1. PDB 核心概念
- 作用:控制自愿中斷(如節點升級、縮容)期間,應用的最小可用副本數或最大不可用比例。
- 關鍵參數:
minAvailable
:必須保持運行的 Pod 數量(如?2
?或?50%
)。maxUnavailable
:允許中斷的 Pod 數量(如?1
?或?10%
)。
- 注意:兩者只能選其一,不可同時使用。
2. 配置步驟
(1)編寫 PDB YAML 文件
apiVersion: policy/v1 # Kubernetes ≥1.21 使用 policy/v1
kind: PodDisruptionBudget
metadata:name: myapp-pdb # PDB 名稱namespace: default # 目標命名空間
spec:minAvailable: 1 # 或 maxUnavailable: "20%"selector:matchLabels:app: myapp # 匹配目標 Pod 的標簽(需與 Deployment/StatefulSet 一致)
(2)應用配置
kubectl apply -f pdb.yaml
(3)驗證配置
kubectl get pdb -n default # 查看 PDB 狀態
kubectl describe pdb myapp-pdb # 檢查詳情
3. 關鍵注意事項
3.1 適用對象
3.2?中斷類型
- 僅對以下控制器管理的 Pod 生效:Deployment / StatefulSet / ReplicaSet / ReplicationController
- 不適用:裸 Pod(未綁定控制器)。
- 僅針對自愿中斷(如?
kubectl drain
),對節點宕機等非自愿中斷無效。
3.3 參數沖突
3.4 優先級干擾
- 若設置?
minAvailable: 2
?但當前副本數為 1,PDB 會阻止所有驅逐操作。 - 若集群啟用 Pod 優先級,高優先級 Pod 可能繞過 PDB 限制驅逐低優先級 Pod。
4. 實際場景示例
場景 1:確保至少 2 個 Pod 可用
spec:minAvailable: 2selector:matchLabels:app: nginx
場景 2:允許最多 1 個 Pod 不可用
spec:maxUnavailable: 1selector:matchLabels:app: redis
5. 測試與維護
模擬節點維護:
kubectl drain <node-name> --ignore-daemonsets
若違反 PDB 規則,命令會報錯并終止。
刪除 PDB:
kubectl delete pdb myapp-pdb -n default
6. 總結
PDB 是保障應用高可用的關鍵工具,需結合業務需求合理置?minAvailable
?或?maxUnavailable
,并通過測試驗證其行為是否符合預期。