用 PodDisruptionBudget 來保護應用
一個 PodDisruptionBudget 有 3 個字段:
- 标簽選擇算符 .spec.selector 用于指定其所作用的 Pod 集合,該字段為必需字段。
- .spec.minAvailable 表示驅逐後仍須保證可用的 Pod 數量。即使是以影響到 Pod 驅逐 (即該條件在和 Pod 驅逐發生沖突時優先保證)。 minAvailable 值可以是絕對值,也可以是百分比。
- .spec.maxUnavailable (Kubernetes 1.7 及更高的版本中可用)表示驅逐後允許不可用的 Pod 的最大數量。其值可以是絕對值或是百分比。
說明:
policy/v1beta1 和 policy/v1 API 中 PodDisruptionBudget 的空選擇算符的行為 略有不同。在 policy/v1beta1 中,空的選擇算符不會比對任何 Pods,而 policy/v1 中,空的選擇算符會比對名字空間中所有 Pods。
說明: 幹擾預算并不能真正保證指定數量/百分比的 Pod 一直處于運作狀态。例如: 當 Pod 集合的 規模處于預算指定的最小值時,承載集合中某個 Pod 的節點發生了故障,這樣就導緻集合中可用 Pod 的 數量低于預算指定值。預算隻能夠針對自發的驅逐提供保護,而不能針對所有 Pod 不可用的誘因。
設定 maxUnavailable 值為 0%(或 0)或設定 minAvailable 值為 100%(或等于副本數) 可能會阻塞節點,導緻資源耗盡。按照 PodDisruptionBudget 的語義,這是允許的。
使用者可以在下面看到 pod 幹擾預算定義的示例,它們與帶有 app: zookeeper 标簽的 pod 相比對:
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
name: zk-pdb
spec:
minAvailable: 2
selector:
matchLabels:
app: zookeeper
你可以通過類似 kubectl apply -f mypdb.yaml 的指令來建立 PDB。
PDB 對象無法更新,必須删除後重新建立。
kubectl get poddisruptionbudgets