在同一文档中:
当非空节点终止时会发生什么?如上所述,所有 pod 都应该迁移到其他地方。Cluster Autoscaler 通过驱逐它们并污染节点来做到这一点,因此它们不会再次被安排在那里。
什么是驱逐?:
Pod 的逐出子资源可以被认为是对 Pod 本身的一种策略控制的 DELETE 操作。
好的,但是如果节点上的所有 pod 同时被驱逐怎么办?您可以使用 Pod Disruption Budget 来确保最小副本始终有效:
什么是 PDB?:
PDB 会限制因自愿中断而同时停机的复制应用程序的 Pod 数量。
在k8s 文档中,您还可以阅读:
PodDisruptionBudget 具有三个字段:
一个标签选择器 .spec.selector 来指定它适用的一组 pod。这是必填栏。
.spec.minAvailable which is a description of the number of pods from that set that must still be available after the eviction
,即使没有被驱逐的 pod。minAvailable 可以是绝对数或百分比。
.spec.maxUnavailable(在 Kubernetes 1.7 及更高版本中可用)描述了该集合中在驱逐后可能不可用的 pod 数量。它可以是绝对数字或百分比。
因此,如果您使用 PDB 进行部署,则不应一次将其全部删除。
但是请注意,如果节点由于其他原因(例如硬件故障)而失败,您仍然会遇到停机时间。如果您真的关心高可用性,请考虑使用 pod 反亲和性来确保 pod 不会全部安排在一个节点上。