説明
CPU request は Kubernetes のノード配置と CPU 競合時の配分に使われます。実際の必要量より低いと、同じノードにワークロードが集中して応答が遅れる場合があります。request は使用上限ではないため、余裕があればより多くの CPU を使用できます。
LimitRange がデフォルトの request を設定する場合があります。別のデフォルト値がなく CPU limit だけを指定すると、その値が request として使われます。デプロイされた Pod の実効値を確認してください。
想定される影響
- CPU 必要量を低く見積もると、ノードのリソース競合や性能低下が発生する場合があります。
- 過大な request は必要な容量を増やしたり、Pod の配置を妨げたりする場合があります。
対処方法
- 実際の使用量と遅延要件に合わせて
resources.requests.cpuを設定し、通常時と最大負荷時にテストしてください。 - LimitRange のデフォルト値、適用された CPU limit、実際の Pod request を確認してください。例の 250m がすべてのワークロードに適するわけではありません。
例
イメージのアドレスは実際の検証済みイメージに置き換えてください。CPU limit を 500m に保ちながら request を明示する比較です。別のデフォルト値がなければ、変更前の request も 500m です。
変更前
yaml
apiVersion: v1
kind: Pod
metadata:
name: frontend
spec:
containers:
- name: app
image: images.my-company.example/app:v4
resources:
requests:
memory: "64Mi"
limits:
cpu: "500m"
memory: "128Mi"
CPU request は明記されていませんが、limit の 500m が request として適用される場合があります。
変更後
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 と明記します。以前の実効要求量より低くなる場合があるため、実際の必要量を確認してください。