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