説明
有効な 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 が発生する場合があります。