説明
有効な CPU limit がないと、コンテナーはノードの空いている CPU を使用できます。突発的な負荷への対応には有用ですが、リソース競合と性能の予測可能性も考慮する必要があります。CPU request はスケジューリングと競合時の配分基準であり、CPU limit とは異なります。
CPU limit を適用すると、上限でスロットリングが発生する場合があります。すべてのワークロードに同じ上限を設定するのではなく、性能要件とリソース管理方針に合わせて判断してください。
想定される影響
- CPU の競合により、別のワークロードの応答が遅くなるおそれがあります。
- 低すぎる CPU limit は正常な処理を遅らせ、タイムアウトを増やす場合があります。
対処方法
- 上限が必要なコンテナーに
resources.limits.cpuを設定し、request と実際の使用量を合わせて確認してください。 - LimitRange のデフォルト値と実効値を確認し、通常時と最大負荷時のスロットリングや遅延を測定してください。上限を設けない場合も、適切な request と容量計画を維持してください。
例
イメージのアドレスとリソース値は例示です。実際に利用できる検証済みイメージと、ワークロードに合う値を使用してください。
変更前
yaml
apiVersion: v1
kind: Pod
metadata:
name: frontend
spec:
containers:
- name: app
image: images.my-company.example/app:v4
resources:
limits:
memory: "64Mi"
メモリ上限だけを明記しています。別途 CPU のデフォルト値がなければ、空いている CPU を使用できます。
変更後
yaml
apiVersion: v1
kind: Pod
metadata:
name: frontend
spec:
containers:
- name: app
image: images.my-company.example/app:v4
resources:
requests:
cpu: "250m"
memory: "64Mi"
limits:
cpu: "500m"
memory: "128Mi"
CPU request に 250m、limit に 500m を指定します。上限でスロットリングが発生する場合があります。