きっかけ
リソース管理の話題の中で、「あれ、LimitRangeとResourceQuotaってどっちがどっちだっけ…?」ってなったので、自分用にまとめておきます。
結論から
-
LimitRange: 1個1個のPodやContainerに対する制約 -
ResourceQuota:Namespace全体で使えるリソースの上限
LimitRangeについて
個別のPodに対して「このサイズまでね」「最低限これは指定してね」みたいな制約をかけるやつです。
設定例
apiVersion: v1
kind: LimitRange
metadata:
name: resource-constraint
namespace: dev
spec:
limits:
- max:
memory: "2Gi"
cpu: "1"
min:
memory: "128Mi"
cpu: "100m"
default: # デフォルトのlimitを定義する
memory: "512Mi"
cpu: "500m"
defaultRequest: # デフォルトのrequestを定義する
memory: "256Mi"
cpu: "250m"
type: Container
これを適用すると、
- メモリ2Gi、CPU 1コアより大きいコンテナは作れない
- 最低でもメモリ128Mi、CPU 100mは指定しないとエラーになる
- 何も指定しないと自動的にデフォルトの値が入る
ResourceQuotaについて
Namespace全体で使えるリソースの総量を制限するものです。チームごとにNamespace分けてる場合、リソースの取り合いを防げます。
設定例
apiVersion: v1
kind: ResourceQuota
metadata:
name: compute-resources
namespace: dev
spec:
hard:
requests.cpu: "10"
requests.memory: "20Gi"
limits.cpu: "20"
limits.memory: "40Gi"
pods: "20"
services: "10"
persistentvolumeclaims: "5"
この設定だと、
-
Namespace内の全Podのrequests.cpuの合計が10まで -
Namespace内の全Podのrequests.memoryの合計が20Giまで -
Pod数は20個まで
注意点
ResourceQuotaを設定すると、Podにrequestsとlimitsの指定が必須になります。
これだとエラーになります。
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: nginx
image: nginx
# resourcesの指定なし → エラーになっちゃう
まとめ
-
LimitRangeは個別のPodの上限・下限・デフォルト値を設定 -
ResourceQuotaはNamespace全体のリソース総量を制限
たまに「あれ、どっちだっけ?」ってなるのでメモでした。📝