跳转至

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

可以看到 host4SchedulingDisabled 表示不可调度。

排空节点上的Pod

然后驱逐节点上的Pod容器组,被驱逐的Pod将在其它节点重新创建运行:

kubectl drain host4 --delete-local-data --ignore-daemonsets --force

这里有3个参数:

  • --ignore-daemonsets, 忽略 DaemonSet 管理的 Pod(避免删除,创建这样的死循环)。
  • --delete-local-data,使用 emptyDir 数据卷的 Pod 也要删除。
  • --force,不是由 ReplicationControllerReplicaSetJobDaemonSetStatefulSet 管理的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-host0kube-scheduler-host0kube-controller-manager-host0etcd-host0kube-proxy-6spzfcalico-nodecattle-node)。
  • 延迟5分钟后启动 Rancher服务。

小结

以上就是K8S集群维护的具体步骤, 需要注意的是这里的K8S集群是使用kubeadm部署的单节点Master,对于多节点Master维护操作或者采用二进制部署方式,此方法不适用。

参考

欢迎关注微信公众号: 运维录

Back to top