説明
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 と明示します。以前の実効要求量より小さくなる場合があるため、実際の要件を確認する必要があります。