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

実際の CPU 要件に合わせ、配置の基準となる要求量を設定してください。

説明

CPU request は、Kubernetes の配置と CPU 競合時の割り当てに使われます。実際の要件より小さいと、同じノードに過剰なワークロードが配置され、遅延が増える場合があります。request は使用上限ではなく、余裕があればコンテナーは追加の CPU を使用できます。

LimitRange が既定の request を設定する場合があります。他の既定値がなく CPU limit だけを指定すると、その値が request として使われます。デプロイ済み Pod の実際の要求量を確認してください。

想定される影響

  • CPU 要件を過小評価すると、ノード上の競合や性能低下が発生する場合があります。
  • 過大な request は必要なノード容量を増やしたり、配置を妨げたりする場合があります。

対処方法

  • 実際の CPU 使用量と遅延要件に合わせて resources.requests.cpu を設定し、通常時とピーク負荷でテストしてください。
  • LimitRange の既定値と実際の CPU limit を併せて確認し、Pod の request を調べてください。例の 250m がすべてのワークロードに適切とは限りません。

例

CPU limit を 0.5 に保ちながら request を明示する既存の比較です。他の既定値がなければ変更前の request も 0.5 です。実際のデプロイには保守されているイメージを使ってください。

変更前

hcl
resource "kubernetes_pod" "pod" {
  metadata {
    name = "terraform-example"
  }

  spec {
    container {
      image = "nginx:1.7.9"
      name  = "example"

      resources {
        limits = {
          cpu    = "0.5"
          memory = "512Mi"
        }
      }
    }
  }
}

変更後

hcl
resource "kubernetes_pod" "pod" {
  metadata {
    name = "terraform-example"
  }

  spec {
    container {
      image = "nginx:1.7.9"
      name  = "example"

      resources {
        limits = {
          cpu    = "0.5"
          memory = "512Mi"
        }

        requests = {
          cpu    = "250m"
          memory = "50Mi"
        }
      }
    }
  }
}

補足:

  • 変更前: 明示的な request はありませんが、limit の 0.5 CPU が使われる場合があります。
  • 変更後: CPU request を 250m と明示します。以前の実効要求量より小さくなる場合があるため、実際の要件を確認する必要があります。

参考資料