コンテンツにスキップ

Kubernetes PodDisruptionBudget(PDB)の目的と動作

問題

What is the purpose of a PodDisruptionBudget?

解答

PodDisruptionBudget(PDB)は、自発的な中断(voluntary disruption)中にアプリケーションの可用性を保護するリソース。

解説

PDB の基本動作

apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  name: my-app-pdb
spec:
  minAvailable: 4        # 最低 4 Pod は常に動いていること
  selector:
    matchLabels:
      app: my-app
  • レプリカ数 5 のアプリに minAvailable: 4 を設定した場合
  • Kubernetes は一度に最大 1 Pod しか退避(evict)できない
  • ノードドレインや Pod の eviction API が PDB を尊重する

minAvailable vs maxUnavailable

# パターン1: 最低N台を維持
spec:
  minAvailable: 2        # 絶対数
  # または
  minAvailable: "80%"    # パーセント指定

# パターン2: 最大N台まで停止を許容
spec:
  maxUnavailable: 1
  # または
  maxUnavailable: "20%"

PDB が効く場面・効かない場面

状況 PDB の効果
kubectl drain(ノードメンテナンス) 有効(PDB が満たされなければ eviction をブロック)
Deployment のローリングアップデート 有効
Cluster Autoscaler によるスケールダウン 有効
OOMKilled(メモリ不足でのプロセス終了) 無効
ノード障害(突然の電源断など) 無効
Pod のクラッシュ・再起動 無効

重要: PDB は「Kubernetes や管理者が意図的に行う操作」だけを制御する。予期しない障害には効かない。

実践的な設定例

# ステートレスアプリ(Web サーバーなど)
spec:
  maxUnavailable: 1    # 1台まで落としてOK

# ステートフルアプリ(DB など)
spec:
  minAvailable: 2      # 2台以上は必ず生きていること

# 単一障害点を避けたいアプリ
spec:
  minAvailable: 1      # 最低1台は動いていること

面接でのポイント

  • PDB は voluntary disruption(自発的な中断)のみを制御することを明確に言えること
  • minAvailablemaxUnavailable の違いと使い分けを説明できること
  • ノード障害や OOMKilled には効かないことを知っていること
  • kubectl drain 時に PDB がどう機能するかを説明できると加点
  • Cluster Autoscaler との組み合わせ(スケールダウン時の保護)を知っていると高評価