PDB
Pod Disruption Budget (PDB) Pod 是 Kubernetes 中用于控制应用程序在执行干扰性操作(如节点维护、升级等)时的可用性的一种机制。PDB 允许用户定义在这些操作期间可以容忍的 Pod 中断数量,从而确保应用程序的高可用性。
主要用途
- 确保高可用性:通过限制同时中断的 Pod 数量,确保应用程序在维护期间仍然有足够的副本运行,从而维持服务的可用性。
- 控制干扰操作的影响:在执行如节点维护、升级等干扰性操作时,PDB 可以限制这些操作对应用程序的影响,防止服务中断。
关键概念
- Pod 中断:Pod 中断是指 Pod 被驱逐或删除,这可能由于节点维护、资源不足等原因引起。
- 自愿中断 vs. 非自愿中断:
- 自愿中断:由 Kubernetes 控制器发起的中断,如根据 PDB 控制的驱逐操作。
- 非自愿中断:不由控制器控制的中断,如节点故障等。
How PDBs Work
- 定义 PDB:用户创建一个 PDB 对象,指定期望的应用程序副本数和可中断的 Pod 数量或百分比。
- 控制器检查 PDB:在执行可能中断 Pod 的操作之前,控制器会检查 PDB,确保不会超过允许的中断数。
- 中断操作:如果允许,控制器会按照 PDB 的规定中断指定数量的 Pod。
PDB 的类型
- Min Available:指定在任何时间点必须保持运行的 Pod 的最小数量或百分比。
- Max Unavailable:指定在任何时间点可以中断的 Pod 的最大数量或百分比。
示例配置
以下是一个 PDB 的示例 YAML 文件:
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: my-pdb
namespace: default
spec:
minAvailable: 2
selector:
matchLabels:
app: MyWebApp
在这个例子中:
minAvailable: 2
表示在任何时间点,至少有 2 个带有标签app: MyWebApp
的 Pod 必须保持运行。
使用场景
- 滚动更新:在进行 Deployment 的滚动更新时,确保不会同时中断过多的 Pod,影响服务的可用性。
- 节点维护:在执行节点维护操作时,如节点升级或重启,确保有足够的 Pod 副本在其他节点上运行,以维持服务。
注意事项
- 非自愿中断:PDB 不能防止非自愿中断,如节点故障。此时,PDB 不能保证副本数。
- 手动删除:手动删除 Pod 不会受到 PDB 的限制,除非启用了PodPDBAdmission 等机制。
结合使用
PDB 常常与 Horizontal Pod Autoscaler (HPA) 和 Deployment 等控制器结合使用,以实现自动扩缩容和高可用性。
- 与 HPA 结合:在自动调整 Pod 数量的同时,通过 PDB 确保在维护期间的可用性。
- 与 Deployment 结合:在滚动更新期间,通过 PDB 控制同时中断的 Pod 数量。
通过合理配置 PDB,可以有效地管理 Kubernetes 集群中的 Pod 中断,确保应用程序的高可用性和稳定性。