Bir*_*man 4 kubernetes kubectl
当您排空 Kubernetes 集群中的节点时,我想获得一些有关维护准备的说明:
这是我在您运行时所知道的kubectl drain MY_NODE:
我对节点耗尽时会发生什么感到困惑。
问题:
我希望对此进行一些澄清以及任何最佳实践或建议。提前致谢。
我只想在eamon1234的答案中添加一些内容:
您可能会发现这也很有用:
官方文档的链接(如果默认标志发生更改等)。根据它:
“drain”会逐出或删除除镜像 pod(无法通过 API 服务器删除)之外的所有 pod。如果存在 DaemonSet 管理的 pod,如果没有 --ignore-daemonsets,drain 将不会继续,并且无论如何它都不会删除任何 DaemonSet 管理的 pod,因为这些 pod 会立即被 DaemonSet 控制器替换,从而忽略不可调度的标记。如果有任何 Pod 既不是镜像 Pod,也不是由 ReplicationController、ReplicaSet、DaemonSet、StatefulSet 或 Job 管理的,则 Drain 不会删除任何 Pod,除非您使用 --force。如果一个或多个 pod 的管理资源丢失,--force 还将允许继续删除。
简单的图表说明了使用时实际发生的情况kubectl drain。
使用kubectl drainwith--dry-run选项可能也是一个好主意,这样您就可以在应用任何实际更改之前看到其结果,例如:
kubectl drain foo --force --dry-run
但是,它不会显示有关现有本地数据或守护进程集的任何错误,您可以在不使用--dry-run标志的情况下看到这些错误:
... error: cannot delete DaemonSet-managed Pods (use --ignore-daemonsets to ignore) ...
默认情况下kubectl drain是非破坏性的,您必须覆盖才能更改该行为。它使用以下默认值运行:
Run Code Online (Sandbox Code Playgroud)--delete-local-data=false --force=false --grace-period=-1 --ignore-daemonsets=false --timeout=0s
这些保护措施中的每一个都处理不同类别的潜在破坏(本地数据、裸 Pod、优雅终止、守护进程)。它还尊重 Pod 中断预算以遵守工作负载可用性。任何非裸 Pod 将通过其各自的控制器(例如daemonset controller,replication controller)在新节点上重新创建。
是否要覆盖该行为取决于您(例如,如果运行 jenkins 作业,您可能有一个裸机。如果您通过设置进行覆盖,--force=true它将删除该 Pod,并且不会重新创建它)。如果您不覆盖它,该节点将无限期地处于排放模式 ( --timeout=0s))。
| 归档时间: |
|
| 查看次数: |
6097 次 |
| 最近记录: |