6.13. Pod Disruption Budget
Pod Disruption Budget を理解して設定します。
6.13.1. 起動している必要がある Pod の数を Pod Disruption Budget を使用して指定する方法について リンクのコピーリンクがクリップボードにコピーされました!
Pod Disruption Budget を使用すると、メンテナンスのためにノードの drain (Pod の退避) を実行するなど、運用中の Pod に対して安全上の制約を指定できます。
PodDisruptionBudget
は、同時に起動している必要のあるレプリカの最小数またはパーセンテージを指定する API オブジェクトです。これらをプロジェクトに設定することは、ノードのメンテナンス (クラスターのスケールダウンまたはクラスターのアップグレードなどの実行) 時に役立ち、この設定は (ノードの障害時ではなく) 自発的なエビクションの場合にのみ許可されます。
PodDisruptionBudget
オブジェクトの設定は、次の主要な部分で構成されます。
- 一連の Pod に対するラベルのクエリー機能であるラベルセレクター。
同時に利用可能にする必要のある Pod の最小数を指定する可用性レベル。
-
minAvailable
は、中断時にも常に利用可能である必要のある Pod 数です。 -
maxUnavailable
は、中断時に利用不可にできる Pod 数です。
-
Available
は、Ready=True
の状態にある Pod 数を指します。ready=True
は、要求に対応でき、一致するすべてのサービスの負荷分散プールに追加する必要がある Pod を指します。
maxUnavailable
の 0%
または 0
あるいは minAvailable
の 100%
、ないしはレプリカ数に等しい値は許可されますが、これによりノードがドレイン (解放) されないようにブロックされる可能性があります。
OpenShift Container Platform のすべてのマシン設定プールにおける maxUnavailable
のデフォルト設定は 1
です。この値を変更せず、一度に 1 つのコントロールプレーンノードを更新することを推奨します。コントロールプレーンプールのこの値を 3
に変更しないでください。
次のコマンドで、すべてのプロジェクトの Pod Disruption Budget を確認できます。
oc get poddisruptionbudget --all-namespaces
$ oc get poddisruptionbudget --all-namespaces
出力例
PodDisruptionBudget
は、最低でも minAvailable
Pod がシステムで実行されている場合は正常であるとみなされます。この制限を超えるすべての Pod はエビクションの対象となります。
Pod の優先度とプリエンプションの設定によっては、Pod Disruption Budget の要件にもかかわらず、優先度の低い Pod が削除される可能性があります。
6.13.2. 起動している必要がある Pod の数を Pod Disruption Budget を使用して指定する リンクのコピーリンクがクリップボードにコピーされました!
同時に起動している必要のあるレプリカの最小数またはパーセンテージは、PodDisruptionBudget
オブジェクトを使用して指定します。
手順
Pod Disruption Budget を設定するには、次の手順を実行します。
YAML ファイルを以下のようなオブジェクト定義で作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow または、以下を実行します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行してオブジェクトをプロジェクトに追加します。
oc create -f </path/to/file> -n <project_name>
$ oc create -f </path/to/file> -n <project_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.13.3. 正常でない Pod のエビクションポリシーの指定 リンクのコピーリンクがクリップボードにコピーされました!
Pod Disruption Budget (PDB) を使用して、同時に使用可能にする必要がある Pod の数を指定する場合、異常な Pod をエビクション対象として考慮する基準も定義できます。
以下のポリシーから選択できます。
- IfHealthyBudget
- 正常ではない実行中の Pod は、保護されたアプリケーションが停止されない場合に限りエビクトできます。
- AlwaysAllow
-
まだ正常ではない実行中の Pod は、Pod Disruption Budget の基準が満たされているかどうかに関係なく削除される可能性があります。このポリシーは、Pod が
CrashLoopBackOff
状態でスタックしているアプリケーションやReady
ステータスの報告に失敗しているアプリケーションなど、正常に動作しないアプリケーションをエビクトするために使用できます。
Pod の Disruption Budget に対して正常ではない Pod のエビクションポリシーを指定する機能は、テクノロジープレビュー機能としてのみ使用できます。テクノロジープレビュー機能は、Red Hat 製品サポートのサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではない場合があります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
このテクノロジープレビュー機能を使用するには、TechPreviewNoUpgrade
機能セットを有効にする必要があります。
クラスターで TechPreviewNoUpgrade
機能セットを有効にすると、元に戻すことができず、マイナーバージョンの更新が妨げられます。本番クラスターでは、この機能セットを有効にしないでください。
手順
PodDisruptionBudget
オブジェクトを定義する YAML ファイルを作成し、正常でない Pod のエビクションポリシーを指定します。pod-disruption-budget.yaml
ファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 正常でない Pod エビクションポリシーとして
IfHealthyBudget
またはAlwaysAllow
のいずれかを選択します。unhealthyPodEvictionPolicy
フィールドが空の場合、デフォルトはIfHealthyBudget
です。
以下のコマンドを実行して
PodDisruptionBudget
オブジェクトを作成します。oc create -f pod-disruption-budget.yaml
$ oc create -f pod-disruption-budget.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
PDB で正常でない Pod のエビクションポリシーが AlwaysAllow
に設定されている場合、ノードをドレイン (解放)、この PDB が保護する正常に動作しないアプリケーションの Pod をエビクトできます。