安全地清空一个节点
你的 Kubernetes 服务器版本必须不低于版本 1.5. 要获知版本信息,请输入 kubectl version
.
此任务假定你已经满足了以下先决条件:
- 使用的 Kubernetes 版本 >= 1.5。
(可选) 配置干扰预算
为了确保你的负载在维护期间仍然可用,你可以配置一个 PodDisruptionBudget。 如果可用性对于正在清空的该节点上运行或可能在该节点上运行的任何应用程序很重要, 首先 并继续遵循本指南。
说明: 默认情况下, 将忽略节点上不能杀死的特定系统 Pod; 有关更多细节,请参阅 文档。
kubectl drain
的成功返回,表明所有的 Pods(除了上一段中描述的被排除的那些), 已经被安全地逐出(考虑到期望的终止宽限期和你定义的 PodDisruptionBudget)。 然后就可以安全地关闭节点, 比如关闭物理机器的电源,如果它运行在云平台上,则删除它的虚拟机。
首先,确定想要清空的节点的名称。可以用以下命令列出集群中的所有节点:
一旦它返回(没有报错), 你就可以下线此节点(或者等价地,如果在云平台上,删除支持该节点的虚拟机)。 如果要在维护操作期间将节点留在集群中,则需要运行:
然后告诉 Kubernetes,它可以继续在此节点上调度新的 Pods。
并行清空多个节点
kubectl drain
命令一次只能发送给一个节点。 但是,你可以在不同的终端或后台为不同的节点并行地运行多个 kubectl drain
命令。 同时运行的多个 drain 命令仍然遵循你指定的 PodDisruptionBudget 。
如果你不喜欢使用 kubectl drain (比如避免调用外部命令,或者更细化地控制 pod 驱逐过程), 你也可以用驱逐 API 通过编程的方式达到驱逐的效果。 更多信息,请参阅 。
接下来
- 执行中的各个步骤, 保护你的应用