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维护操作或者采用二进制部署方式,此方法不适用。