Kubernetes 集群-维护节点
2020-05-29 by dongnan
环境
在前面的三篇文章中,使用 Kubeadm 部署了 K8S集群环境:
测试的K8S集群由一个Master管理节点、两个Worker计算节点组成。
目标
K8S集群运维过程中可能会有维护Node节点的需求,例如Node操作系统软件存在漏洞,需要对系统进行更新和维护。
这里我们以K8S集群节点的操作系统进行更新操作为例。
步骤
与《Kubernetes 集群-删除节点》操作步骤类似,需要先将目标节点上的Pod调度到其它的节点之上,
不同的是在维护结束后需要恢复节点正常调度。
设置节点不可调度
首先将节点标记为不可调度,避免新的Pod在此节点创建和运行:
kubectl cordon host4
查看节点状态:
kubectl get nodes host4
NAME     STATUS                     ROLES    AGE    VERSION
host4   Ready,SchedulingDisabled   <none>   353d   v1.17.4
可以看到 host4 为 SchedulingDisabled 表示不可调度。
排空节点上的Pod
然后驱逐节点上的Pod容器组,被驱逐的Pod将在其它节点重新创建运行:
kubectl drain host4 --delete-local-data --ignore-daemonsets --force
这里有3个参数:
- --ignore-daemonsets, 忽略- DaemonSet管理的- Pod(避免删除,创建这样的死循环)。
- --delete-local-data,使用- emptyDir数据卷的- Pod也要删除。
- --force,不是由- ReplicationController、- ReplicaSet、- Job、- DaemonSet、- StatefulSet管理的- Pod(没有绑定任何控制器)也要删除。
维护节点
- 升级操作系统 apt update && apt upgrade。
- 然后在控制台重启ECS主机。
恢复节点可调度
节点维护结束后,恢复可调度状态:
kubectl uncordon host4
Master (可选)
对于 Master 来说其ETCD的数据非常重要,如果不是致命的问题,不建议对Master进行操作。
- Master主机创建快照,做好数据备份。
- 升级操作系统。
- 停止 Rancher服务,防止继续调度kube-apiserver。
- 控制台重启ECS主机。
- 检查 kube-system命名空间Pod状态(日志显示,kubeadm将依次重建k8s核心组件kube-scheduler-host0、kube-scheduler-host0、kube-controller-manager-host0、etcd-host0、kube-proxy-6spzf、calico-node、cattle-node)。
- 延迟5分钟后启动Rancher服务。
小结
以上就是K8S集群维护的具体步骤,
需要注意的是这里的K8S集群是使用kubeadm部署的单节点Master,对于多节点Master维护操作或者采用二进制部署方式,此方法不适用。