一、 服務器環境及初始化
1、架構分析
集群角色 | 主機名 | 操作系統 | IP地址 |
---|---|---|---|
master | k8s-master | OpenEuler24.03 | 192.168.166.128 |
node | k8s-node1 | OpenEuler24.03 | 192.168.166.129 |
node | k8s-node2 | OpenEuler24.03 | 192.168.166.130 |
2、初始化
所有節點都需要初始化!
2.1、清空Iptales默認規則及關閉防火墻
iptables -t nat -F
iptables -t filter -F
systemctl disable --now firewalld
2.2、關閉SELINUX
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config?
2.3、關閉Swap交換空間
swapoff -a
sed -i 's/.*swap.*/#&/' /etc/fstab
2.4、設置主機名
hostnamectl set-hostname k8s-masterhostnamectl set-hostname k8s-node1hostnamectl set-hostname k8s-node2
2.5、編寫hosts文件
vim /etc/hosts
cat <<EOF >> /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.166.128 k8s-master
192.168.166.129 k8s-node1
192.168.166.130 k8s-node2
EOF###拷貝到node節點
scp /etc/hosts 192.168.166.129:/etc
scp /etc/hosts 192.168.166.130:/etc
2.6、設置內核參數
注意:安裝完成docker-ce并啟動之后方可設置!
vim /etc/sysctl.conf
cat <<EOF >> /etc/sysctl.conf
net.ipv4.ip_forward=1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOFmodprobe br_netfilter
sysctl net.bridge.bridge-nf-call-ip6tables=1
sysctl net.bridge.bridge-nf-call-iptables=1sysctl -p
二、安裝Docker環境
所有節點都需要安裝!
1、安裝Docker
1.1、配置阿里源
[root@localhost yum.repos.d]#
cat <<EOF >> /etc/yum.repos.d/docker-ce.repo
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://mirrors.aliyun.com//docker-ce/linux/centos/9/x86_64/stable/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
EOF
1.2、安裝docker
yum install -y docker-ce
1.3、啟動docker
systemctl enable --now docker
2、安裝cri-docke
下載地址:https://github.com/Mirantis/cri-dockerd/releases
yum install -y libcgroup
rpm -ivh cri-dockerd-0.3.8-3.el8.x86_64.rpm
三、安裝kubeadm和kubectl
所有節點都需要安裝!
1、配置yum源
cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/repodata/repomd.xml.key
EOF
2、安裝
yum install -y kubelet kubeadm kubectl
3、設置kubectl開機自啟動
systemctl enable kubelet && systemctl start kubelet
4、啟動kubeadm和kubectl命令補齊功能
source <(kubeadm completion bash)
source <(kubectl completion bash)echo -e "source <(kubeadm completion bash)\nsource <(kubectl completion bash)" >> /root/.bashrc
source /root/.bashrc
四、部署Master節點
在k8s-master節點執行下述命令:
kubeadm init --apiserver-advertise-address=192.168.166.128 --image-repository=registry.aliyuncs.com/google_containers --kubernetes-version=v1.28.15 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --cri-socket=unix:///var/run/cri-dockerd.sock
命令解析:--apiserver-advertise-address:指定 API Server 監聽的 IP 地址。如果沒有設置,則將使用默認的網絡接口。--image-repository:指定鏡像倉庫地址。默認值為“registry.k8s.io”,但該倉庫在中國無法訪問,因此這里指定阿里云倉庫。--kubernetes-version:指定 Kubernetes 版本。--pod-network-cidr:指定 Pod 網絡的 CIDR 地址范圍。--service-cidr:指定 Service 網絡的 CIDR 地址范圍。--cri-socket:指定 kubelet 連接容器運行時的 UNIX 套接字文件。
執行命令后,kubeadm 會執行一系列任務,具體如下:
[preflight]:該階段執行一系列檢查,驗證當前系統環境是否滿足 Kubernetes 的安裝要求,包括:CPU 和內存是否滿足最低要求。網絡是否正常。操作系統版本是否滿足要求。容器運行時是否可以連接。內核參數是否正確配置。下載所需的容器鏡像。[certs]:生成 Kubernetes 組件所需的 HTTPS 證書和密鑰,并將其存儲到“/etc/ kubernetes/pki”目錄中。[kubeconfig]:生成 kubeconfig 文件,其中包含 API Server 地址、客戶端證書等信息,并將其存儲在“/etc/kubernetes”目錄中。[kubelet-start]:生成 kubelet 配置文件“/var/lib/kubelet/config.yaml”并啟動 kubelet服務。[control-plane]:為 kube-apiserver、kube-controller-manager 和 kube-scheduler 創建靜態 Pod 資源文件,并將其存儲到“/etc/kubernetes/manifests”目錄中。[etcd]:為 etcd 創建靜態 Pod 資源文件,并將其存儲在“/etc/kubernetes/manifests”目錄中。[wait-control-plane]:等待 kubelet 從目錄“/etc/kubernetes/manifest”中以靜態 Pod的形式啟動 Master 組件。[apiclient]:檢查 Master 組件是否健康。[upload-config]:將 kubeadm 配置存儲在 ConfigMap 對象中。[kubelet]:將 kubelet 配置存儲在 ConfigMap 對象中。[upload-certs]:提示用戶跳過證書上傳。[mark-control-plane]:給 Master 節點添加標簽和污點。[bootstrap-token]:生成引導令牌,供 Node 節點在加入集群時使用。[kubelet-finalize]:更新 kubelet 配置文件(/etc/kubernetes/kubelet.conf)。[addons]:安裝 CoreDNS 和 kube-proxy 插件。
出問題后,集群還原
kubeadm reset --cri-socket=unix:///var/run/cri-dockerd.sock
注意保存證書文件
每個人的證書是不一致的,注意查看自己的證書。
為本人輸出指令后得到:
kubeadm join 192.168.166.128:6443 --token 5rmwwf.ocgwzx6evxwvcaet \--discovery-token-ca-cert-hash sha256:cf77f1977c11d90758acb6dc6546e922ab21fe76a87385b7ce412fb0c22f142a
配置管理集群文件
mkdir -p $HOME/.kube
cd /root/.kube
cp /etc/kubernetes/admin.conf ./config###查看集群狀態
kubectl get nodes
五、部署node節點
分別在k8s-node1和k8s-node2中執行:
kubeadm join 192.168.166.128:6443 --token uz36v1.szquumxe2nq58abq \--discovery-token-ca-cert-hash sha256:bfa0dc7f33c37616cdb76b20eaf92ef900c03bd35b59be120ce80afb5b00a5d1 --cri-socket=unix:///var/run/cri-dockerd.sock借由master 主機憑證
kubeadm join 192.168.166.128:6443 --token uz36v1.szquumxe2nq58abq \--discovery-token-ca-cert-hash sha256:bfa0dc7f33c37616cdb76b20eaf92ef900c03bd35b59be120ce80afb5b00a5d1 --cri-socket=unix:///var/run/cri-dockerd.sock
查看集群狀態:
[root@k8s-master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master NotReady control-plane 2d16h v1.28.15
k8s-node1 NotReady <none> 2d16h v1.28.15
k8s-node2 NotReady <none> 2m14s v1.28.15
目前看到的是NotReady狀態,是由于沒有安裝網絡插件的原因。ROLES角色一欄顯示“none”,可以通過一下命令修改角色名稱:
kubectl label node k8s-master node-role.kubernetes.io/master=master
kubectl label node k8s-node1 node-role.kubernetes.io/worker=worker
kubectl label node k8s-node2 node-role.kubernetes.io/worker=worker