コンテナーのリソース要求量と制限の確認

実際のワークロードに合わせ、CPU・メモリ要求量と使用上限を設定してください。

説明

Kubernetes の requests は配置の判断に使われ、limits は使用量の上限です。必要な要求量や制限が有効に設定されていないと、一つのコンテナーの過剰な消費が他のワークロードに影響する場合があります。LimitRange の既定値なども構成に影響するため、デプロイ済みの値を確認してください。

CPU limit の超過は throttling に、メモリ limit の超過はプロセスの終了につながる場合があります。実際の使用量と性能要件を考慮して制限を決める必要があります。

想定される影響

  • ノードのリソース競合により、応答遅延やサービス障害が発生する場合があります。
  • 不適切な要求量と制限は、配置失敗、CPU throttling、OOM による終了を招く場合があります。

対処方法

  • 各コンテナーの CPU・メモリ使用量を測定し、requests と必要な limits を設定してください。要求量を対応する上限以下にし、通常時とピーク負荷でテストしてください。
  • LimitRange と ResourceQuota で組織の既定値と使用ポリシーを適用してください。注入される値と実際の消費量を定期的に確認してください。

例

例の値はすべてのワークロードへの推奨値ではありません。実際の要件に合わせて調整し、保守されているイメージを使ってください。

変更前

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

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

変更後

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

補足:

  • 変更前: 明示的な resources 設定はありません。名前空間の既定値も確認する必要があります。
  • 変更後: CPU・メモリの requests と limits を明示します。実際の性能と使用量への適合は別途確認が必要です。

参考資料