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 リソースの変更時には再起動が防止されます。
リソースポリシーの例
apiVersion: v1
kind: Pod
metadata:
name: resize-demo
spec:
securityContext:
runAsNonRoot: true
seccompProfile:
type: RuntimeDefault
containers:
- name: pause
# ...
resizePolicy:
- resourceName: cpu
restartPolicy: NotRequired
- resourceName: memory
restartPolicy: RestartContainer
- 1
- サイズ変更ポリシーを指定します。
memory のサイズ変更ポリシーを RestartContainer でない限り、メモリーの制限を引き下げることはできません。
既存の Pod にサイズ変更ポリシーを追加または変更することはできません。ただし、Pod にオーナーオブジェクトがある場合は、デプロイメントなどの Pod のオーナーオブジェクトでポリシーを追加または編集できます。
Pod のインプレースサイズ変更を使用するには、次の例に示すように、OpenShift CLI (oc) で Pod を編集するときに --subresource resize フラグを使用する必要があります。
コマンドの例
$ oc edit pod <pod_name> --subresource resize
$ oc apply -f <file_name>.yaml --subresource resize
$ oc 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
出力例
NAME READY STATUS RESTARTS AGE
resize-pod 1/1 Running 0 5s
サイズ変更ポリシーが RestartContainer の場合、要求または制限を変更すると、Pod が再起動されます。
$ oc get pods
出力例
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) な変更のステータスの例
apiVersion: v1
kind: Pod
metadata:
name: resize-demo
# ...
status:
conditions:
- lastProbeTime: "2025-09-03T15:00:50Z"
lastTransitionTime: "2025-09-03T15:00:50Z"
message: 'Node didn''t have enough capacity: cpu, requested: 1000000, capacity:
3500'
reason: Infeasible
status: "True"
type: PodResizePending
以下の制限事項に注意してください。
- 再起動不可能な init コンテナーおよび一時コンテナーでは、Pod のインプレースサイズ変更はサポートされていません。
- Pod のインプレースサイズ変更が、Pod QoS クラスなど、他の Pod の可変性に関する制約に違反する場合、その変更は許可されません。
-
静的な
cpuManagerPolicyまたはmemoryManagerPolicyパラメーターによって管理される Pod は、Pod のインプレースサイズ変更ではサイズ変更できません。 -
スワップメモリーを利用する Pod のメモリー要求を Pod のインプレースサイズ変更で変更するには、
RestartContainerポリシーを使用する必要があります。