基本
https://kubernetes.io/docs/concepts/policy/limit-range/
namespace 资源约束(LimitRange)提供默认的Pod资源约束,并防止命名空间内的Pod资源配置超出管理员允许的预期范围。若超出则不允许创建,从而让我们可以更方便的管理资源.
特点
- 提供 pod 的默认 request 约束.
- 提供 pod 的默认 limit 约束.
- 提供默认的 pvc.
- LimitRange配置策略的构建和变更仅影响之后的pod创建。已创建Pod不受影响。
写法
apiVersion: v1
kind: LimitRange
metadata:
name: cpu-mem-storage-min-max-default
spec:
limits:
- type: Container
max:
cpu: "1000m"
memory: "1G"
min:
cpu: "50m"
memory: "50M"
default:
cpu: "250m"
memory: "250M"
defaultRequest:
cpu: "50m"
memory: "50M"
- type: PersistentVolumeClaim
max:
storage: 30G
min:
storage: 8G
kubectl apply -f limitrange-default.yaml --namespace=default
上述的意思基本遵循:
- 不设置Pod约束,则Pod约束limit级走default,Pod约束request级走defaultRequest
- 设置Pod约束,则Pod约束不能低于min,不能大于max,且request级不能大于limit级.
- 在继承上述条件的基础下,若Pod只设置了limit约束,则Pod的request约束直接等同于Pod的limit约束
上述例子为 default 命名空间加了一个资源策略.效果如下:
-
当pod没有任何限制的时候, pod 规则如下遵循 default 和 defaultRequest 的属性
-
limit: cpu=250m mem=250M
-
request: cpu=50m mem=50M
-
8G < pvc < 30G
会全部走limitrange的默认值
-
-
当pod仅设置了request: cpu=100m mem=150M的时候, pod规则如下
- limit: cpu=250m mem=250M
- request: cpu=100m mem=150M
- 8G < pvc < 30G
-
当pod仅设置了limit,且limit值不超过namespace的max的时候, pod规则如下
假设这里pod的limit是 cpu=1000m mem=1G
- limit: cpu=1000m mem=1G
- request: cpu=1000m mem=1G
- 8G < pvc < 30G
即仅当设置limit级的Pod约束时,request级Pod约束等同于limit级