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

CPU 上限の必要性とスロットリングの影響をワークロードの要件に合わせて確認してください。

説明

有効な 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 を指定します。上限でスロットリングが発生する場合があります。

参考資料