美文网首页
2022-11-29-集群添加删除、控制平面与node

2022-11-29-集群添加删除、控制平面与node

作者: DGFM | 来源:发表于2022-11-28 11:29 被阅读0次

所有对于集群的操作都应该由部署节点来进行,以此来保证一致性;

图片为kubeasz项目中整理的K8S高可用集群逻辑模式

增加master节点:

# ./ezctl add-master k8s-cluster.1 192.168.1.32

解析:# ./ezctl add-master [集群名称] [要增加的节点IP]

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

删除node节点:

# ./ezctl del-node k8s-cluster.1 192.168.1.47

集群升级:

通常集群升级的目的,一般为,解决已知BUG或者更新某些功能;

注意:升级操作一定要在,测试环境中充分实现后才可以在生产环境中执行;

1.确定当前和要升级的K8S版本,并下载目标版的相关二进制文件;

地址:https://github.com/kubernetes/kubernetes/

需要下载的几个文件:

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/目录中保存的都是相关插件

比方说在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

注意:其余节点一定也要进行升级,保证整体版本统一;

6.    containerd升级

在升级containerd的时候正常情况下,先驱逐pod,然后将服务停止或重启服务器,然后替换二进制文件,再启动服务;

6.1    下载二进制文件

地址:https://github.com/containerd/containerd/releases,注意平台类型;

6.2    上传并解压

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等;

相关文章

网友评论

      本文标题:2022-11-29-集群添加删除、控制平面与node

      本文链接:https://www.haomeiwen.com/subject/adplfdtx.html