将 Master 节点(控制平面节点)进入维护模式是一个需要格外谨慎的操作,因为它直接关系到整个集群的管理能力。
虽然操作命令与 Worker 节点类似(kubectl drain),但其影响和注意事项有本质区别。
操作前的关键考量(非常重要!)
在动手之前,请务必回答以下问题:
- 你的集群是单 Master 还是多 Master(高可用)集群?
- 单 Master 集群:绝对不要执行
drain操作。将唯一的 Master 节点设为不可调度并驱逐其上的 Pod,会导致整个集群的控制平面(API Server, Scheduler, Controller-Manager)完全不可用。你将无法管理集群,也无法调度新的 Pod。 - 多 Master (HA) 集群:可以执行
drain操作。因为其他 Master 节点仍然在线,可以接管集群的管理工作。
- 单 Master 集群:绝对不要执行
本指南将主要针对多 Master (HA) 集群。如果你的集群是单 Master,请不要继续向下操作。
- Master 节点上是否运行着关键的系统服务?
- 除了控制平面组件,Master 节点上可能还运行着其他关键服务,例如 Ingress Controller、集群 DNS 的副本等。
drain会将这些 Pod 驱逐到其他节点,请确保其他节点有足够的资源来承载它们。
- 除了控制平面组件,Master 节点上可能还运行着其他关键服务,例如 Ingress Controller、集群 DNS 的副本等。
多 Master (HA) 集群的操作步骤
假设你的集群有 3 个 Master 节点,你要维护 master-01。
第 1 步:确认集群状态健康
在开始之前,确保其他 Master 节点都是健康的。
kubectl get nodes -l node-role.kubernetes.io/control-plane
你应该看到除了 master-01 之外的其他 Master 节点状态都是 Ready。
第 2 步:执行 drain 操作
这是将 master-01 进入维护模式的核心命令。
kubectl drain master-01 --ignore-daemonsets --delete-emptydir-data --force
参数解释:
--ignore-daemonsets:必须使用。Master 节点上运行着kube-proxy、CNI 插件等 DaemonSet Pod,它们需要保留。--delete-emptydir-data:推荐使用。如果控制平面组件(如kube-apiserver)使用了emptyDir(虽然罕见),这允许drain继续进行。--force:在 Master 节点上强烈推荐。有些静态 Pod(如kube-apiserver)可能无法被正常驱逐,--force会强制删除这些 Pod,让drain命令可以完成。删除后,kubelet会根据/etc/kubernetes/manifests/下的配置文件立即重新创建它们(但由于节点已cordon,它们会处于Pending状态)。
执行后,master-01 上的 Pod(除了 DaemonSet)会被驱逐到其他 Master 节点上。
第 3 步:执行维护操作
现在 master-01 已经处于维护模式,你可以安全地:
- SSH 登录到
master-01。 - 执行系统更新、重启、升级等操作。
第 4 步:维护完成后,将节点重新上线
维护操作完成后,将 master-01 重新加入集群调度。
kubectl uncordon master-01
执行后,kubelet 会重新在 master-01 上创建控制平面组件的静态 Pod。稍等片刻,master-01 的状态会恢复为 Ready,并重新分担集群的管理工作。
单 Master 集群的“维护模式”
如果你只有一个 Master 节点,你不能使用 drain。如果你必须维护它,流程是这样的:
- 接受服务中断:明确知道在维护期间,你将无法管理集群(
kubectl命令会失败),也无法创建或更新任何资源。 - (可选)备份 Etcd:在关机前备份 Etcd 数据库。
- 直接关机或重启:
# SSH 到 Master 节点 sudo reboot - 等待恢复:等待节点重启完成,
kubelet和容器运行时服务启动,控制平面组件恢复运行。 - 验证:节点重启后,检查其状态:
确认其状态恢复为kubectl get nodesReady。
总结
| 集群类型 | 推荐操作 | 后果 |
|---|---|---|
| 多 Master (HA) 集群 | kubectl drain / kubectl uncordon | 集群管理功能平滑切换,服务不中断。 |
| 单 Master 集群 | 不要 drain,直接重启/维护 | 集群管理功能在维护期间中断。 |
核心建议: 在生产环境中,始终使用多 Master 高可用集群,这样你就可以安全地对单个 Master 节点进行维护,而不会影响整个集群的稳定性。
237

被折叠的 条评论
为什么被折叠?



