説明
有効なメモリ limit がないと、一つのワークロードがノードのメモリを過剰に使い、他のワークロードに影響する場合があります。明示的な設定がなくても LimitRange が既定の制限を設定することがあるため、デプロイ済みの構成を確認する必要があります。
メモリ limit を超えると、プロセスが OOM によって終了する場合があります。低すぎる値はアプリケーション障害を招き、limit がノードのあらゆるメモリ不足を防ぐわけではありません。
想定される影響
- メモリ使用量の急増により、他の Pod の性能低下や退避が発生する場合があります。
- 低すぎる limit によりプロセスが終了し、サービスが停止する場合があります。
対処方法
- 実際の使用量とピーク負荷に合わせて
resources.limits.memoryを設定し、request と併せて確認してください。 - OOM による終了とノードのメモリ不足を監視して値を調整してください。LimitRange で既定値と許容範囲を管理し、実際の制限を確認してください。
例
既存の 50Mi と 512Mi は説明用の値です。ワークロードに合わせて調整し、実際のデプロイには保守されているイメージを使ってください。
変更前
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"
}
}
}
}
}
補足:
- 変更前: memory request だけを明示しています。他のポリシーが limit を設定するか確認する必要があります。
- 変更後: memory limit 512Mi と request を明示します。実際の最大使用量に合っているか確認する必要があります。