Kubernetes(V1.25)使用Centos7.9安裝架設教學
★每台機器基本配置環境★
- RAM:2GB 以上
- CPU: 2 以上
- 唯一主機名、MAC 地址和 product_uuid
- 系統: Centos7.9
★三台主機節點命名與分配★
- k8s-master01 #master管理節點
- k8s-node01 #node節點
- k8s-node02 #node節點
★部屬必要的套件工具★
- kubernetes : v1.25
- container: Docker Engine + cri-dockerd
- projectcalico(網路插件calico) CNI工具, pod網路:10.224.0.0/16
- dashboard: v2.7.0 (支援到=k8s 1.25版)
★管理工具與用途(K8S會使用到以下三種管理工具)
- kubectl:用來與集群通信的命令行工具
- kubeadm:用來初始化集群的指令
- kubelet:在集群中的每個節點上用來啟動Pod 和容器等
1.設定本地DNS Hosts解析 (每一台節點要設置)
#各自節點設定主機名稱
hostnamectl set-hostname k8s-master01
hostnamectl set-hostname k8s-node01
hostnamectl set-hostname k8s-node02
#設定hosts配置文件
vi /etc/hosts
#------加入以下配置---------------
192.168.50.110 k8s-master01
192.168.50.109 k8s-node01
192.168.50.108 k8s-node02
#---------------------
#這裡是可以在master管理節點配置好後,直接複製給另外兩台節點的方法
scp /etc/hosts root@k8s-node01:/etc/hosts #複製到節點
scp /etc/hosts root@k8s-node02:/etc/hosts #複製到節點
2.安裝基本套件與設置 (每一台節點都要設置)
#安裝依賴套件
yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git
#停用防火牆
systemctl stop firewalld && systemctl disable firewalld
#設定防火牆只用iptables 並設置空規則
yum -y install iptables-services && systemctl start iptables && systemctl enable iptables && iptables -F && service iptables save
#關閉swap分區
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
#關閉selinux-
setenforce 0 && sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
3.優化參數 (每一台節點都要設置)
#寫入優化參數(從cat複製到EOF,貼上Shell指令即可)
cat > kubernetes.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
vm.swappiness=0 #禁止使用swap空間,只有當系統0M時才允許使用
vm.overcommit_memory=1 #不檢查記憶體是否夠用
vm.panic_on_oom=0 #開啟OOM
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
EOF
#將文件複製到系統文件區
cp kubernetes.conf /etc/sysctl.d/kubernetes.conf
#套用設定
sysctl -p /etc/sysctl.d/kubernetes.conf #執行後會出現沒有文件,升級4.0就會出現了
4.使用ntp校正時間(每一台節點都要設置)
#設定時區
timedatectl set-timezone Asia/Taipei
#啟用
systemctl start ntpd
#開機啟用
systemctl enable ntpd
#關閉用不到的服務(郵件服務)
systemctl stop postfix && systemctl disable postfix
5.設定持久保存日誌 (每一台節點都要設置)
#建立日誌配置文件
mkdir /var/log/journal
mkdir /etc/systemd/journald.conf.d
#設定配置參數(從cat複製到EOF,貼上Shell指令即可)
cat > /etc/systemd/journald.conf.d/99-prophet.conf <<EOF
[Journal]
#持久化保存到硬碟
Storage=persistent
#壓縮歷史日誌
Compress=yes
SyncIntervalSec=5m
RateLimitInterval=30s
RateLimiBurst=1000
#最大占用空間 10G
SystemMaxUse=10G
#單日誌文件最大
SystemMaxFileSize=200M
#日誌保存時間2周
MaxRetentionSec=2week
#不將日誌轉發到 syslog
ForwardToSyslog=no
EOF
#重啟日誌管理工具
systemctl restart systemd-journald
6.升級內核 (3.10.x內核存在一些Bug,所以要升級)(每一台節點都要設置)
#查詢核版本,當前是3.10
uname -r
#導入key
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
#安裝elrepo源
rpm -Uvh http://elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
#安裝內核最新版本
yum --enablerepo=elrepo-kernel install kernel-ml-devel kernel-ml -y
#查看內核
awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
#UEFI模式查看內核,(如果上一個指令不能查詢,就換這一個)
#awk -F\' '$1=="menuentry " {print $2}' /etc/grub2-efi.cfg
#默認啟動順序從0開始,新內核位置在1,所以要選擇0
grub2-set-default 0
#重啟系統
reboot
#重啟後進入系統看就會是新版本
uname -r
7.kube-proxy 開啟ipvs的前置條件 (每一台節點都要設置)
#啟用模組
modprobe br_netfilter
#設定參數配置(從cat複製到EOF,貼上Shell指令即可)
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF
#開啟文件權限
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod |grep -e ip_vs -e nf_conntrack
8.安裝Docker(centos7.9) (每一台節點都要安裝)
#安裝所需的套件
yum install yum-utils device-mapper-persistent-data lvm2 -y
#官網載點(yum源)
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
#安裝 (如果提示接收GPG金鑰,選擇是)
yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y
#列出可用的版本
yum list docker-ce --showduplicates | sort -r
#指定安裝版本規則
#yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
#指定安裝版本範例
yum install docker-ce-18.09.0 docker-ce-cli-18.09.0 containerd.io
#啟用docker
systemctl start docker
#開機自動啟用docker
systemctl enable docker
#建立文件夾
mkdir -p /etc/systemd/system/docker.service.d
#設定Docker配置(從cat複製到EOF,貼上Shell指令即可)
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver-systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
}
}
EOF
#套用配置
systemctl daemon-reload && systemctl restart docker && systemctl enable docker
注意事項:
- 安裝kubernetes 1.25 版本集群部署. (原1.26不支援dashboard)
- 容器運行安裝 docker > cri-dockerd
- 初始化集群 網路
- 網路插件 calico
9.安裝cri-docker,k8s使用docker容器環境 (每一台節點都要安裝)
#下載cri-dockerd
git clone https://github.com/Mirantis/cri-dockerd.git
#安裝 GO SDK套件
wget https://storage.googleapis.com/golang/getgo/installer_linux
#給予執行權限
chmod +x ./installer_linux
#開始安裝
./installer_linux
#套用配置
source ~/.bash_profile
#前往cri-dockerd文件夾
cd cri-dockerd
#建立bin文件夾
mkdir bin
#使用go 把包部屬cri-dockerd
go build -o bin/cri-dockerd
#建立文件夾
mkdir -p /usr/local/bin
#安裝cri-dockerd
install -o root -g root -m 0755 bin/cri-dockerd /usr/local/bin/cri-dockerd
#複製到系統文件夾
cp -a packaging/systemd/* /etc/systemd/system
#修改參數
sed -i -e 's,/usr/bin/cri-dockerd,/usr/local/bin/cri-dockerd,' /etc/systemd/system/cri-docker.service
#重載配置
systemctl daemon-reload
#開機啟用cri-docker
systemctl enable cri-docker.service
#開機啟用cri-docker
systemctl enable --now cri-docker.socket
#查詢版本
cri-dockerd --version
10.安裝kubeadm kubectl kubelet 官網 (每一台節點都要安裝)
#設定kubernetes配置(從cat複製到EOF,貼上Shell指令即可)
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
#查看kubeadm版本
yum list kubeadm.x86_64 --showduplicates |sort -r
#查看kubectl版本
yum list kubectl.x86_64 --showduplicates |sort -r
#查看kubelet版本
yum list kubelet.x86_64 --showduplicates |sort -r
11.安裝kubeadm,kubelet,kubectl (記得確認版本)
#安裝指定版本(要確認下載版本,不要用-y)
yum install kubeadm-1.25.2 kubelet-1.25.2 kubectl-1.25.2
#安裝最新版(不建議)
#yum -y install kubeadm kubelet kubectl
#設定kubelet配置(從cat複製到EOF,貼上Shell指令即可)
cat > /etc/sysconfig/kubelet <<EOF
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
EOF
#開機啟動kubelet
systemctl enable kubelet
#查看需要的鏡像
kubeadm config images list
#查詢版本
kubelet --version
#查看k8s版本
kubectl version
#查詢版本
kubeadm version
12.集群初始化 (只有master管理節點需要配置)(輸入第二次會提示ERROR端口在使用)
#提早下載鏡像(不操作也沒關係,下一步會自動幫你下載)
#kubeadm config images pull --cri-socket unix:///var/run/cri-dockerd.sock
#集群初始化
kubeadm init --kubernetes-version=1.26.2 --pod-network-cidr=10.224.0.0/16 --apiserver-advertise-address=192.168.50.110 --cri-socket unix:///var/run/cri-dockerd.sock
#上面有提示,要輸入這些指令
#會需要用到.kube/config,否則執行kubectl get nodes 會錯誤
13.輸入K8S請我們執行的指令
#建立文件夾
mkdir -p $HOME/.kube
#複製配置文件到指定路徑
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
#給予文件夾擁有者
sudo chown $(id -u):$(id -g) $HOME/.kube/config
#取得目前有哪些節點
kubectl get nodes
14.到每一個node節點部屬 (每一台node節點配置)(上面有提示指令,後面加上unix:///var/run/cri-dockerd.sock )
#部屬node節點,(注意:內文的IP要指定到您的master管理節點IP),(這裡部屬到其他節點時有發生錯誤,重啟後正常)
kubeadm join 192.168.50.110:6443 --token rtwaue.7vfhsfu74iekmaa4 \
--discovery-token-ca-cert-hash sha256:2c2f3e0b700aafb2642bec0cc04bfb02a8e1fe5818004f4bd144e10684b4712e --cri-socket unix:///var/run/cri-dockerd.sock
#到master>查詢加入節點地址
#kubeadm token create --print-join-command
#到master>取得目前有哪些節點
kubectl get nodes
15.安裝calico 官網 (只有mastere管理需要安裝)
- 網頁前往:calico opensource>install calico>kubernetes>quickstart>往下install calico
- 注意:不要部屬到v3.24.3版本,有bug
#安裝calico
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/tigera-operator.yaml
#下載calicon配置文件
wget https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/custom-resources.yaml
#進入配置文件,設定自訂要網段,如下圖
vi custom-resources.yaml #
#執行建立
kubectl create -f custom-resources.yaml
#查看有沒有命名空間
kubectl get ns
#查看命名空間有沒有相應的port,否則無法使用
watch kubectl get pods -n calico-system
- 必須是1/1 完成百分比
#如果一直無法完成,刪掉pod 再重來
#刪除pod 會自動在建立一個新的
kubectl delete pods calico-node-b9d62 -n calico-system
#Dashboard v2.7.0支援到kubernetes1.25
#安裝Dashboard v2.7.0
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
#忘記這裡是幹嘛了,後續補上(先不用操作)
kubectl describe pod
kubectl delete deployment nginx-deployment666
kubectl get pods -n kubernetes-dashboard -o wide
#創建用戶(從cat複製到EOF,貼上Shell指令即可)
cat > dashboard-adminuser.yaml <<EOF
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
EOF
#創建ClusterRoleBinding(從cat複製到EOF,貼上Shell指令即可)
cat > ClusterRoleBinding.yaml <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
EOF
#獲取不記名令牌
kubectl -n kubernetes-dashboard create token admin-user
18.建立Dashboard
#建立dashboard配置文件(從cat複製到EOF,貼上Shell指令即可)
cat > kubernetes-dashboard.yaml <<EOF
apiVersion: v1
kind: Service
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
type: NodePort
ports:
- port: 443
targetPort: 8443
nodePort: 32333
selector:
k8s-app: kubernetes-dashboard
EOF
#啟動dashboard
kubectl apply -f kubernetes-dashboard.yaml
#啟用代理
kubectl proxy
#使用瀏覽器訪問你的Dashboard
https://192.168.50.110:32333/
沒有留言:
張貼留言