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

CPU 上限の必要性と throttling の影響を、ワークロードの要件に合わせて確認してください。

説明

有効な CPU limit がない場合、コンテナーはノードの余っている CPU を使えます。バースト処理に役立つ一方、競合と性能の予測可能性も考慮する必要があります。CPU request は配置と競合時の配分に使われ、limit とは異なります。

CPU limit を適用すると、上限で throttling が発生する場合があります。すべてのワークロードに同じ上限を適用せず、性能要件とリソースポリシーに合わせて決めてください。

想定される影響

  • CPU 競合を制御できないと、他のワークロードの応答遅延が増える場合があります。
  • 低すぎる CPU limit は正常な処理を遅らせ、タイムアウトを増やす場合があります。

対処方法

  • 上限が必要なコンテナーには resources.limits.cpu を設定し、request と実際の使用量も確認してください。
  • LimitRange の既定値と実際の設定値を確認し、通常時とピーク負荷の throttling・遅延を測定してください。上限を設けない場合も、適切な request と容量計画を維持してください。

例

既存の値は説明用です。実際のデプロイには保守されているイメージを使い、性能テストに基づいて値を調整してください。

変更前

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

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

      resources {
        requests = {
          memory = "50Mi"
        }
      }
    }
  }
}

変更後

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"
        }
      }
    }
  }
}

補足:

  • 変更前: 明示的な CPU limit はありません。他の既定値がなければ、余っている CPU を使用できます。
  • 変更後: CPU limit 0.5 と request 250m を指定します。上限で throttling が発生する場合があります。

参考資料