use*_*803 6 kubernetes kubectl kubernetes-deployment
是否kubectl drain首先确保replicas=1其他节点上的Pod是健康的?
假设 pod 由部署控制,并且确实可以将 pod 移动到其他节点。目前,我认为它只从节点中驱逐(删除 pod),而不先调度它们。
除了Suresh Vishnoi 的 回答:
如果未指定PodDisruptionBudget并且您的部署只有一个副本,则 Pod 将终止,然后新 Pod 将被安排在新节点上。
为了确保您的应用程序在节点排空过程中可用,您必须指定 PodDisruptionBudget 并创建更多副本。如果您有 1 个 Pod,minAvailable: 30%它将拒绝排水并出现以下错误:
error when evicting pod "pod01" (will retry after 5s): Cannot evict pod as it would violate the pod's disruption budget.
Run Code Online (Sandbox Code Playgroud)
简而言之,这就是排水过程的工作原理:
如文档kubectl drain命令中所述,“在节点上执行维护之前,从节点安全地驱逐所有 Pod,并允许 Pod 的容器正常终止并尊重PodDisruptionBudgets您指定的”
Drain 做两件事:
封锁节点 - 这意味着该节点被标记为不可调度,因此无法在该节点上调度新的 Pod。有道理 - 如果我们知道该节点将在维护中,则没有必要在那里安排一个 pod,然后由于维护而将其重新安排在另一个节点上。从 Kubernetes 的角度来看,它为节点添加了一个污点:node.kubernetes.io/unschedulable:NoSchedule
evicts/ 删除 pods - 在节点被标记为不可调度后,它会尝试驱逐在节点上运行的 pods。它使用Eviction API考虑PodDisruptionBudgets在内(如果它不受支持,它将删除 pod)。它向 K8S 调用 DELETE 方法,但认为GracePeriodSeconds它可以让 pod 完成它的进程。
当 Pod 数量不可用(期望状态!= 当前状态)时,分别排空或节点故障时,将安排新的 Pod。
使用PodDisruptionBudget 资源,您可以在节点耗尽期间管理中断。
您只能在单个 PodDisruptionBudget 中指定 maxUnavailable 和 minAvailable 之一。maxUnavailable 只能用于控制有关联控制器管理它们的 pod 的驱逐。在下面的示例中,“所需副本”是管理由 PodDisruptionBudget 选择的 Pod 的控制器的规模。https://kubernetes.io/docs/tasks/run-application/configure-pdb/#specifying-a-poddisruptionbudget
示例 1:如果 minAvailable 为 5,则允许驱逐,只要它们在 PodDisruptionBudget 选择器选择的那些 Pod 中留下 5 个或更多健康 Pod。
示例 2:当 minAvailable 为 30% 时,只要所需副本数量的至少 30% 是健康的,就允许驱逐。
示例 3:当 maxUnavailable 为 5 时,只要所需副本总数中最多有 5 个不健康的副本,就允许驱逐。
示例 4:maxUnavailable 为 30%,只要不超过 30% 的所需副本不健康,就允许驱逐。
| 归档时间: |
|
| 查看次数: |
5460 次 |
| 最近记录: |