【リミットレンジ】

LimitRange(Kubernetes) とは?

最終更新:
💡 個々のリソース設定に「この範囲で申請してね」と決める規約

KubernetesのNamespace内で、コンテナやPodのリソース要求・上限、PVCのストレージ要求などに最小・最大値を定めるリソース。コンテナには省略されたrequests・limitsの既定値も設定できる。

📌 このページのポイント
個々のリソース設定を、ルールで検査する Namespace内:Container型の架空のCPU設定 📋 LimitRange min:50m max:2 defaultRequest:100m default:200m 📦 A:両方省略 request:100m limit:200m 既定値が付く 📦 B:明示 request:500m limit:1 この検査を通る 📦 C:明示 request:4 limit:4 最大2を超え拒否 request ≠ 実使用量の上限 検査を通っても、起動が保証されるわけではない
CPUだけを扱う架空の設定例。矢印は各コンテナの設定にルールを適用することを示す。100mは0.1 CPU。実際の使用量の範囲や、Podの起動を保証する図ではない。
ひよこ ひよこ
ResourceQuotaだけでは、個々の設定までは決まらないの?
ペンギン先生 ペンギン先生
ResourceQuotaはNamespace全体の合計などを制限するものだよ。LimitRangeでは個々のコンテナやPodのリソース要求・上限の範囲を決める。PVCのストレージ要求にも最小・最大値を設定できるんだ。
ひよこ ひよこ
コンテナにCPUの設定を書かなかったら?
ペンギン先生 ペンギン先生
たとえばdefaultRequest.cpuを100m、default.cpuを200mにすると、どちらも省略したコンテナにrequest 100m、limit 200mが付くよ。100mは0.1 CPU。requestは配置の判断などに使う要求値で、それだけでは実際の使用量の上限にはならないんだ。
ひよこ ひよこ
最小・最大値を外れると、どうなるの?
ペンギン先生 ペンギン先生
設定に違反するPodの作成などは拒否されるよ。Container型でmax.memoryを2Giにした場合、2Giを超える要求や上限は違反するけれど、2Giちょうどはこの最大値を超えない。要求と上限の比率にも制限を設定できるんだ。
ひよこ ひよこ
図の緑のコンテナは、必ず起動できる?
ペンギン先生 ペンギン先生
図はCPUのルールだけを検査した架空の例だよ。Aは既定値が付き、Bは明示したrequest 500m・limit 1が範囲内、Cは4・4で最大2を超える。この検査に通っても、Quotaやノードの空きなど別の条件によって起動できないことはあるんだ。
ひよこ ひよこ
LimitRangeを変えると、動いているPodも変わる?
ペンギン先生 ペンギン先生
既存のPodには変更が自動で適用されないよ。また、明示したrequestより既定のlimitが小さくなると不整合で拒否されることもある。Quotaと補完し合えるけれど、値の整合や配置条件まで無条件に保証するものではないんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「LimitRange」って出てきたら「個々のリソース設定に上下限や既定値を決めるルール」と思えばだいたいOK!
📖 おまけ:英語の意味
「LimitRange」 = 制限範囲
💬 Limitは「制限」、Rangeは「範囲」。実際の使用量を常に下限以上にするのではなく、リソースの要求や上限として設定する値の範囲などを定めるよ

参考資料

← 用語集にもどる