【ポッドディスラプションバジェット】

Pod Disruption Budget(PDB) とは?

最終更新:
💡 メンテナンスでPodを退去させすぎないためのルール

Kubernetesで、Eviction APIを通じた自発的なPod退去を制限するリソース。対象Podの最低利用可能数か最大利用不能数を指定する。ノード障害や直接のPod削除を防ぎ、稼働数を常に保証するものではない。

📌 このページのポイント
PDB:計画的な退去の許容枠 対象の5つがすべて利用可能な例 Pod1 Pod2 Pod3 Pod4 Pod5 minAvailable: 3 退去の余裕は 5 − 3 = 2 Pod1 Pod2 Pod3 Pod4 Pod5 利用可能3つなら、追加の退去を待つ 緑:利用可能 / 灰:退去済み ノード障害や直接の削除は防げない
通常のdrainはEviction APIを使う。PDBは退去を制限するが、常時稼働を保証するものではない。
ひよこ ひよこ
ペンギン先生、Kubernetesのメンテナンスでノードを再起動したら、全部のPodが一気に落ちちゃったんだけど……
ペンギン先生 ペンギン先生
PDBは、ノードのメンテナンスなどでPodを退去させるときに、止めすぎないためのルールだよ。ただし、ノード障害や直接の削除まで防ぐものではないから、再起動すれば必ずサービスが守られるわけではないんだ。
ひよこ ひよこ
ルールって、どうやって設定するの?
ペンギン先生 ペンギン先生
例えば対象の5つがすべて利用可能なら、minAvailable: 3では退去の余裕は2つ。maxUnavailable: 1なら利用不能なPodを1つまでに制限する設定だよ。この2つは同じPDBには両方書けないんだ。
ひよこ ひよこ
じゃあPDBを設定しておけば、drain中でもサービスが止まらないってこと?
ペンギン先生 ペンギン先生
停止しない保証ではないよ。通常のkubectl drainはEviction APIを使い、PDBに反する退去を拒否されると再試行して待つんだ。代わりのPodが起動して利用可能になるか、配置先の容量があるかも大切だね。
ひよこ ひよこ
ローリングアップデートとは別の話なの?
ペンギン先生 ペンギン先生
別に制御するよ。Deploymentのローリング更新はmaxSurgeやmaxUnavailableなどの更新戦略に従い、PDBでは制限されない。ただし更新で利用不能になったPodは、PDBの退去の余裕にも影響するんだ。
ひよこ ひよこ
最低限の本数を考えて、工事で止めすぎないようにする感じだね!
ペンギン先生 ペンギン先生
そのイメージだね。ただ、突然の故障まで止められるわけではない。必要なレプリカ数や配置、利用可能と判断する条件を整えたうえで、計画的な退去を制限する仕組みなんだ。
もっと詳しく知りたい人へ

minAvailableをレプリカ数と同じにするとどうなる?

すべてのPodが利用可能でも退去の余裕がなく、通常のdrainが進まなくなる。最低必要数を満たしたまま退去できるレプリカ数と配置を用意する必要がある。割合指定では切り上げもあるため、少数のPodでは実際に何個を退去できるか確認する。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「PDB」って出てきたら「メンテナンス時のPod退去を制限するルール」と思えばだいたいOK!
📖 おまけ:英語の意味
「Pod Disruption Budget」 = Podの中断の許容枠
💬 Disruptionは中断、Budgetは許容できる枠のこと。Podの自発的な退去にどれだけ余裕を認めるかを表す名前だよ。

参考資料

← 用語集にもどる