1.測試環境所需要的主機名和IP和扮演的角色
harbor 172.25.254.200 harbor倉庫
k8s-master 172.25.254.100 k8s集群控制節點
k8s-node1 172.25.254.10?k8s集群工作節點
k8s-node2 172.25.254.20 k8集群工作節點
注意:所有節點禁用selinux和防火墻
所有節點同步時間和地址解析
所有節點安裝docker
所有節點禁用swap 注意注釋掉/etc/fstab文件中的定義
為什么禁用swap?
內存速度遠快于 Swap,使用 Swap 會導致性能下降,影響節點和應用響應速度。
Kubernetes 依賴 kubelet 管理節點資源,而 kubelet 默認無法有效處理 Swap,可能導致資源分配錯誤。
Swap 可能延遲內存壓力的響應,導致節點或 Pod 進入不穩定狀態。
關閉所有節點的火墻和禁用iptables
1.master 和node harbor禁用swap
swapon -s#查看磁盤名
Filename?? ??? ??? ??? ?Type?? ??? ?Size?? ??? ?Used?? ??? ?Priority
/dev/dm-1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? partition?? ?2097148?? ??? ?0?? ??? ?-2
]# systemctl mask swap.target
]# swapoff -a
]# vim /etc/fstab
#/dev/mapper/rhel-swap swap swap defaults 0 0
/dev/cdrom /media iso9660 defaults 0 0
2.master和node harbor都做本地解析
[root@k8s-master ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.254.100 k8s-master.timinglee.org
172.25.254.10 k8s-node1.timinglee.org
172.25.254.20 k8s-node2.timinglee.org
172.25.254.254 reg.timinglee.org
3.master和node harbor都安裝docker
[root@k8s-master ~]# vim /etc/yum.repos.d/docker.repo
[docker] name=docker
baseurl=https://mirrors.aliyun.com/docker-ce/linux/rhel/9/x86_64/stable/
gpgcheck=0
[root@k8s-master ~]# dnf install docker-ce -y
4.所有節點設定 docker資源管理模式為systemd
[root@k8s-master ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://reg.timinglee.org"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
? ? ? ? ? ? ? ? "max-size": "100m"
},
? "storage-driver": "overlay2"
}
4.復制harbor倉庫中的證書并啟動docker
?k8s-master:#mkdir /etc/docker/certs.d/reg.timinglee.org/ -p
harbor:#scp /data/certs/timinglee.org.crt root@172.25.254.100:/etc/docker/certs.d/reg.timinglee.org/ca.crt
同時把密鑰拷給所有node節點
確保master和所有節點都能訪問harbor倉庫
5.安裝k8s部署工具
添加軟件倉庫中k8s源
[root@k8s-master ~]# vim /etc/yum.repos.d/k8s.repo
[k8s] name=k8s
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpm
gpgcheck=0
#安裝軟件 [root@k8s-master ~]# dnf install kubelet-1.30.0 kubeadm-1.30.0 kubectl-1.30.0 -y
4.設置kubectl命令補全功能
[root@k8s-master ~]# dnf install bash-completion -y?
[root@k8s-master ~]# echo "source > ~/.bashrc
[root@k8s-master ~]# source ~/.bashrc
5.在master節點拉取k8s所需要的鏡像
kubeadm config print init-defaults
手動指定鏡像下載位置和容器管理接口
kubeadm config images pull \
--image-repository registry.aliyuncs.com/google_containers \? #拉取鏡像的位置現在我們所用的為aliyun的
--kubernetes-version v1.30.0 \? #需要的版本
--cri-socket=unix:///var/run/cri-dockerd.sock? ?#拉取需要連接容器控制器使用
先在master登錄harbor倉庫
拉取結束上傳至我們的harbor倉庫
[root@k8s-master ~]# docker images | awk '/google/{ print $1":"$2}' \ | awk -F "/" '{system("docker? tag "$0" reg.timinglee.org/k8s/"$3)}'
[root@k8s-master ~]# docker images | awk '/k8s/{system("docker push "$1":"$2)}'
6..在節點安裝cri-docker
k8s從1.24版本開始就移除了dockershim 所以節點安裝cri-docker插件才能使同docker
在節點安裝插件和插件依賴性用docker管理k8s 和docker依賴
vim/lib/systemd/system/cri-docker.service#編寫該文件夾 加上網絡插件和根容器
指定網絡插件名稱及基礎容器鏡像 ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --networkplugin=cni --pod-infra-container-image=reg.timinglee.org/k8
systemctl daemon-reload
以上操作master和node節點都要做
例:scp -r /lib/systemd/system/cri-docker.service? @root172.25.254.10:/lib/systemd/system/cri-docker.service
7.集群初始化
#kubeadm init --pod-network-cidr=192.188.0.0/16 \? #初始化并設定容器集群的網絡
--image-repository reg.timinglee.org/k8s \? #
--kubernetes-version v1.30.0 \ #指k8s版本
--cri-socket=unix:///var/run/cri-dockerd.sock #指定插件使docker和k8s結合到一起使用
#kubeadm reset?--cri-socket=unix:///var/run/cri-dockerd.sock重置集群
8.指定主配置文件
#指定集群配置文件變量 [
root@k8s-master ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
初始化完成
9.安裝網絡插件
導入flannel插件 和?kube-flannel.yml
將網絡插件導入到本地docker倉庫 并且上傳到harbor倉庫中
kubectl apply -f kube-flannel.yml 安裝flannel.yml
10.節點擴容
1.禁用swap
2.安裝kubelet-1.30.0 kubeadm-1.30.0 kubectl-1.30.0
docker-ce
cri-dockerd#連接docker和k8s 的 還有一個依賴
修改cri-dockerd啟動文件添加?vim /lib/systemd/system/cri-docker.service
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --networkplugin=cni --pod-infra-container-image=reg.timinglee.org/k8s/pause:3.9
5 啟動服務 kubelet.service cri-docker.service
root@k8s-node1 & 2 ~]# kubeadm join 172.25.254.100:6443 --token 5hwptm.zwn7epa6pvatbpwf --discovery-token-ca-cert-hash sha256:52f1a83b70ffc8744db5570288ab51987ef2b563bf906ba4244a300f61e9db23 --crisocket=unix:///var/run/cri-dockerd.soc