Kubernetes コンテナーの CPU request 設定の確認

実際の CPU 要求に合うスケジューリング基準を設定してください。

説明

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 と明記します。以前の実効要求量より低くなる場合があるため、実際の必要量を確認してください。

参考資料