説明
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 を明示します。実際の性能と使用量への適合は別途確認が必要です。