2.6. Pod を中断せずに Pod のリソースレベルを調整する
Pod のインプレースサイズ変更 を使用すると、Pod を再作成または再起動せずに、コンテナーに割り当てられた CPU またはメモリーリソースの要求と制限を変更できます。
2.6.1. Pod のインプレースサイズ変更について リンクのコピーリンクがクリップボードにコピーされました!
Pod のインプレースサイズ変更を使用すると、アプリケーションを中断することなく、実行中の Pod 内のコンテナーの CPU およびメモリーリソースを変更できます。Pod の CPU およびメモリーリソースを変更する標準的な方法では、Pod が再作成され、中断が発生する可能性があります。Pod のインプレースサイズ変更により、Pod の再起動に伴うダウンタイムや状態の損失を発生させることなく、Pod のリソースを増減できます。
Pod のインプレースサイズ変更を使用して CPU またはメモリーリソースを変更する場合、Pod 仕様でサイズ変更ポリシーを設定することで、Pod を再起動するかどうかを制御できます。次のサイズ変更ポリシーの例では、メモリーリソースの変更時には Pod の再起動が必要ですが、CPU リソースの変更時には再起動が防止されます。
リソースポリシーの例
- 1
- サイズ変更ポリシーを指定します。
memory
のサイズ変更ポリシーを RestartContainer
でない限り、メモリーの制限を引き下げることはできません。
既存の Pod にサイズ変更ポリシーを追加または変更することはできません。ただし、Pod にオーナーオブジェクトがある場合は、デプロイメントなどの Pod のオーナーオブジェクトでポリシーを追加または編集できます。
Pod のインプレースサイズ変更を使用するには、次の例に示すように、OpenShift CLI (oc
) で Pod を編集するときに --subresource resize
フラグを使用する必要があります。
コマンドの例
oc edit pod <pod_name> --subresource resize
$ oc edit pod <pod_name> --subresource resize
apply -f <file_name>.yaml --subresource resize
$ apply -f <file_name>.yaml --subresource resize
patch pod <pod_name> --subresource resize --patch \ '{"spec":{"containers":[{"name":"pause", "resources":{"requests":{"cpu":"800m"}, "limits":{"cpu":"800m"}}}]}}'
$ patch pod <pod_name> --subresource resize --patch \
'{"spec":{"containers":[{"name":"pause", "resources":{"requests":{"cpu":"800m"}, "limits":{"cpu":"800m"}}}]}}'
サイズ変更ポリシーとともに --subresource resize
フラグを使用する必要があるため、OpenShift Container Platform Web コンソールで Pod リソースを編集することはできません。
サイズ変更ポリシーが NotRequired
の場合、要求または制限を変更しても、Pod は再起動されません。
oc get pods
$ oc get pods
出力例
NAME READY STATUS RESTARTS AGE resize-pod 1/1 Running 0 5s
NAME READY STATUS RESTARTS AGE
resize-pod 1/1 Running 0 5s
サイズ変更ポリシーが RestartContainer
の場合、要求または制限を変更すると、Pod が再起動されます。
oc get pods
$ oc get pods
出力例
NAME READY STATUS RESTARTS AGE resize-pod 1/1 Running 1 (5s ago) 5s
NAME READY STATUS RESTARTS AGE
resize-pod 1/1 Running 1 (5s ago) 5s
リソースの変更後、Pod のステータス条件に、次のメッセージを使用してサイズ変更要求の状態が示されます。
-
PodResizeInProgress
: 要求されたリソースの割り当てが可能であり、kubelet が変更を適用中です。 PodResizePending
: 次のいずれかの理由により、kubelet がすぐに変更を加えることができません。-
Infeasible
: 現在のノードでは要求されたサイズ変更を実行できません。たとえば、ノードが使用できるリソースよりも多くのリソースを要求すると、Infeasible
状態になります。 -
Deferred
: 要求されたサイズ変更は現在は不可能ですが、後で可能になる可能性があります。たとえば、別の Pod がノードから削除されると、要求されたリソースが使用可能になる可能性があります。ノードの状態に変化があった場合、kubelet がサイズ変更を再試行します。
-
-
Error
: リソース割り当て中に kubelet でエラーが発生しました。メッセージフィールドにエラーの理由が報告されます。
実行不可能 (Infeasible) な変更のステータスの例
以下の制限事項に注意してください。
- 再起動不可能な init コンテナーおよび一時コンテナーでは、Pod のインプレースサイズ変更はサポートされていません。
- Pod のインプレースサイズ変更が、Pod QoS クラスなど、他の Pod の可変性に関する制約に違反する場合、その変更は許可されません。
-
静的な
cpuManagerPolicy
またはmemoryManagerPolicy
パラメーターによって管理される Pod は、Pod のインプレースサイズ変更ではサイズ変更できません。 -
スワップメモリーを利用する Pod のメモリー要求を Pod のインプレースサイズ変更で変更するには、
RestartContainer
ポリシーを使用する必要があります。
2.6.2. Pod のインプレースサイズ変更の設定 リンクのコピーリンクがクリップボードにコピーされました!
Pod のインプレースサイズ変更を使用するには、Pod 仕様にサイズ変更ポリシーを追加する必要があります。
既存の Pod にサイズ変更ポリシーを追加または変更することはできません。ただし、Pod にオーナーオブジェクトがある場合は、デプロイメントなどの Pod のオーナーオブジェクトでポリシーを追加または編集できます。
手順
サイズ変更ポリシーを使用して Pod 仕様を作成するか、既存の Pod のオーナーオブジェクトにサイズ変更ポリシーを追加します。
次の例のような YAML ファイルを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- サイズ変更ポリシーを指定します。CPU リソースやメモリーリソースについて、次のいずれかの値を指定します。
-
NotRequired
: Pod を再起動せずにリソースの変更を適用します。これは、サイズ変更ポリシーを使用する場合のデフォルト値です。 -
RestartContainer
: リソースの変更を適用し、Pod を再起動します。
-
次のようなコマンドを実行してオブジェクトを作成します。
oc create -f <file_name>.yaml
$ oc create -f <file_name>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
次のようなコマンドを実行して、CPU またはメモリーの要求または制限を変更し、サイズ変更ポリシーが適用されていることを確認します。
--subresource resize
フラグを含める必要があります。Pod にデプロイメントなどのオーナーオブジェクトがある場合は、オーナーオブジェクトを編集する必要があります。oc edit pod <pod_name> --subresource resize
$ oc edit pod <pod_name> --subresource resize
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ポリシーが適用されると、Pod は期待どおりに応答します。
oc get pods
$ oc get pods
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サイズ変更ポリシーが
NotRequired
の場合、Pod は再起動されません。出力例
NAME READY STATUS RESTARTS AGE resize-pod 1/1 Running 0 5s
NAME READY STATUS RESTARTS AGE resize-pod 1/1 Running 0 5s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サイズ変更ポリシーが
RestartContainer
の場合、Pod は再起動されます。出力例
NAME READY STATUS RESTARTS AGE resize-pod 1/1 Running 1 (5s ago) 5s
NAME READY STATUS RESTARTS AGE resize-pod 1/1 Running 1 (5s ago) 5s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow