所有对于集群的操作都应该由部署节点来进行,以此来保证一致性;
![](https://img.haomeiwen.com/i28561759/46823611995cccf4.png)
增加master节点:
# ./ezctl add-master k8s-cluster.1 192.168.1.32
解析:# ./ezctl add-master [集群名称] [要增加的节点IP]
![](https://img.haomeiwen.com/i28561759/608863807667291e.png)
k8s-cluster.1/hosts文件的master内容也会发生变化;
# systemctl restart kube-lb.service #在node节点上执行,重启node节点的负载均衡服务;
删除master节点:
# ./ezctl del-master k8s-cluster.1 192.168.1.32
增加node节点:
# ./ezctl add-node k8s-cluster.1 192.168.1.47
![](https://img.haomeiwen.com/i28561759/3e8d12f4d929b966.png)
删除node节点:
# ./ezctl del-node k8s-cluster.1 192.168.1.47
集群升级:
通常集群升级的目的,一般为,解决已知BUG或者更新某些功能;
注意:升级操作一定要在,测试环境中充分实现后才可以在生产环境中执行;
1.确定当前和要升级的K8S版本,并下载目标版的相关二进制文件;
地址:https://github.com/kubernetes/kubernetes/
![](https://img.haomeiwen.com/i28561759/4632be059e97f682.png)
需要下载的几个文件:
kubernetes.tar.gz #源码;
kubernetes-client-linux-amd64.tar.gz #客户端文件;
kubernetes-server-linux-amd64.tar.gz #服务端文件;
kubernetes-node-linux-amd64.tar.gz #node端文件;
2.上传并解压:
解压完成后会统一到一个kubernetes目录中
/usr/local/src/kubernetes-1.25.4/kubernetes/cluster/addons/目录中保存的都是相关插件
![](https://img.haomeiwen.com/i28561759/7ab26117e9489435.png)
比方说在kubernetes/cluster/addons/dns/coredns/下有coredns相关的yml配置文件模板,可以根据自己需要进行修改然后使用;
/usr/local/src/kubernetes-1.25.4/kubernetes/server/bin/中保存了相关的二进制文件;
3.升级流程
升级过程为逐个模块进行
4.升级master节点
4.1 在每个node节点上操作,/etc/kube-lb/conf/kube-lb.conf文件中注释掉要升级的master节点(即节点下线),并重启# systemctl restart kube-lb.service,或重读# systemctl reload kube-lb.service;
4.2 关闭要升级的master节点功能,如果不关闭会因为程序占用而无法更新;
master节点上操作
# systemctl stop kube-apiserver.service
# systemctl stop kube-controller-manager.service
# systemctl stop kube-scheduler.service
# systemctl stop kubelet.service
# systemctl stop kube-proxy.service
4.3 copy二进制文件进行更新
deploy节点上操作
# scp -P 2200 kube-apiserver kube-scheduler kube-controller-manager kube-proxy kubelet kubectl 目标主机用户@目标主机地址:目标主机目录
根据我们的配置这个目录的位置是/usr/local/bin下,这个目录位置就是/etc/kubeasz/clusters/k8s-cluster.1/hosts,60行所配置的;
将新的二进制文件同步拷贝到deploy节点的/etc/kubeasz/bin/目录下,以保证今后再新创建node或者master时版本统一;
4.4 如有需要,修改相关配置文件
在master节点的/var/lib/目录下,有kube-proxy和kubelet插件的配置文件可以按需修改,但要注意每个升级节点都需要进行同样的修改;
4.5 重启服务
master节点上操作
# systemctl start kube-apiserver.service
# systemctl start kube-controller-manager.service
# systemctl start kube-scheduler.service
# systemctl start kubelet.service
# systemctl start kube-proxy.service
4.6 将其他节点下线,更新后重新上线;
注意:此种升级方式仅适用于小版本升级,即1.24.2-->1.24.3这种类型,如果有大版本升级建议另行搭建一套,进行测试;
5. node节点升级
5.1 对要升级的node节点容器驱逐到别的node节点上
deploy节点执行:
# kubectl drain [要驱逐的IP] [选项]
# kubectl drain 192.168.1.47 --ignore-daemonsets #--ignore-daemonsets表示忽略所有node节点上都有的容器,只驱逐该节点特有容器;
5.2 关闭指定node节点服务
# systemctl stop kube-proxy.service kubelet.service
5.3 copy二进制文件到指定node节点
deploy节点上操作
# scp -P 2200 kube-proxy kubelet kubectl 目标主机用户@目标主机地址:目标主机目录
将新的二进制文件同步拷贝到deploy节点的/etc/kubeasz/bin/目录下,以保证今后再新创建node或者master时版本统一;
5.4 重新启动node节点服务
# systemctl start kube-proxy.service kubelet.service
5.5 将节点从驱逐状态恢复
deploy节点执行:
# kubectl uncordon 192.168.1.47
![](https://img.haomeiwen.com/i28561759/1bfd942fb8370480.png)
注意:其余节点一定也要进行升级,保证整体版本统一;
6. containerd升级
在升级containerd的时候正常情况下,先驱逐pod,然后将服务停止或重启服务器,然后替换二进制文件,再启动服务;
6.1 下载二进制文件
地址:https://github.com/containerd/containerd/releases,注意平台类型;
6.2 上传并解压
![](https://img.haomeiwen.com/i28561759/f7d17c98ce3fd7ea.png)
6.3 更新二进制文件
同样我们也许要更新两个位置
deploy节点:/etc/kubeasz/bin/containerd-bin/ #保证后续新建节点的版本正确,这个位置是,在/etc/kubeasz/roles/containerd/tasks/main.yml文件的16行位置所定义的;
目的节点:deploy节点上/etc/kubeasz/clusters/k8s-cluster.1/hosts,60行所配置的位置,这里是/usr/local/bin;
注意:当有某些二进制文件被进程占用时是无法更新的;
6.4 重启kubelet服务,目标节点执行
# systemctl restart kubelet.service
7. 同理其余插件也可以同样的方式更新,如runc(通常不需要更新),crictl等;
网友评论