马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
概述
官方文档:https://kubernetes.io/zh-cn/docs/concepts/policy/limit-range/
在 Kubernetes(K8s)中,LimitRange 是一种用于约束定名空间(Namespace)内资源配额的资源对象,主要作用是为 Pod 和容器设置资源使用的限制范围(如 CPU、内存等)。它可以定义资源的最小值、最大值、默认值以及比例限制,确保容器在公道的资源范围内运行,避免因资源分配不公道导致的集群性能问题或服务不稳定。
作用
- 在一个定名空间中实行对每个 Pod 或 Container 最小和最大的资源使用量的限制。
- 在一个定名空间中实行对每个 PersistentVolumeClaim 能申请的最小和最大的存储空间巨细的限制。
- 在一个定名空间中实行对一种资源的申请值和限制值的比值的控制。
- 设置一个定名空间中对计算资源的默认申请/限制值,并且自动的在运行时注入到多个 Container 中。
- 在一个定名空间中,若某一个Pod或Container未设置最小和最大的资源使用量,可以为其设置默认值
配置示例
- apiVersion: v1
- kind: LimitRange
- metadata:
- name: comprehensive-limit
- namespace: dev-team # 限制的namespace
- spec:
- limits:
- # 容器级别限制
- - type: Container
- # 请求的最小cpu和内存限制,对应request的设置
- min:
- cpu: "100m"
- memory: "256Mi"
- # 请求的最大cpu和内存限制,对应的limits的设置
- max:
- cpu: "2"
- memory: "4Gi"
- # 默认的request设置,如果Container没有设置request,则默认使用这个值
- defaultRequest:
- cpu: "500m"
- memory: "1Gi"
- # 默认的limits设置,如果Container没有设置limit,则默认使用这个值
- default:
- cpu: "1"
- memory: "2Gi"
- # 控制request和limits设置的比例,如果request.cpu设置为1,那么limits.cpu不能超过2,
- # memory同理
- maxLimitRequestRatio:
- cpu: "2"
- memory: "1.5"
-
- # Pod级别限制
- - type: Pod
- max:
- cpu: "4" # 整个Pod的CPU总和不得超过4核
- memory: "8Gi" # 整个Pod的内存总和不得超过8GB
-
- # PVC限制
- - type: PersistentVolumeClaim
- min:
- storage: "1Gi"
- max:
- storage: "20Gi"
复制代码 实战案例
创建LimitRange
先创建一个namespace- [root@master ~]# kubectl create namespace sit-team
- namespace/sit-team created
- [root@master ~]# kubectl get ns sit-team
- NAME STATUS AGE
- sit-team Active 8s
复制代码 创建LimitRange,namespace需要选中上一步创建的名称空间- # 定义LimitRange
- [root@master ~/limits]# cat sit-limits.yaml
- apiVersion: v1
- kind: LimitRange
- metadata:
- name: sit-team-limits
- # 限制的namespace
- namespace: sit-team
- spec:
- limits:
- # 容器级别限制
- - type: Container
- # 请求的最小cpu和内存限制,对应request的设置
- min:
- cpu: "100m"
- memory: "256Mi"
- # 请求的最大cpu和内存限制,对应的limits的设置
- max:
- cpu: "1"
- memory: "1Gi"
- # 默认的request设置,如果Container没有设置request,则默认使用这个值
- defaultRequest:
- cpu: "500m"
- memory: "500Mi"
- # 默认的limits设置,如果Container没有设置limit,则默认使用这个值
- default:
- cpu: "1"
- memory: "1Gi"
- # 控制request和limits设置的比例,如果request.cpu设置为1,那么limits.cpu不能超过2,
- # memory同理
- maxLimitRequestRatio:
- cpu: "2.5"
- memory: "2.5"
- # Pod级别限制
- - type: Pod
- max:
- # 整个Pod的CPU总和不得超过4核
- cpu: "4"
- # 整个Pod的内存总和不得超过8GB
- memory: "8Gi"
- # PVC限制
- - type: PersistentVolumeClaim
- # 最小的存储容量
- min:
- storage: "1Gi"
- # 最大的存储容量
- max:
- storage: "20Gi"
- # 创建limits
- [root@master ~/limits]# kubectl apply -f sit-limits.yaml
- limitrange/sit-team-limits created
复制代码 查看LimitRange
- [root@master ~/limits]# kubectl get limits -n sit-team
- NAME CREATED AT
- sit-team-limits 2025-05-26T03:12:30Z
- # 查看详情
- [root@master ~/limits]# kubectl describe limits sit-team-limits -n sit-team
- Name: sit-team-limits
- Namespace: sit-team
- Type Resource Min Max Default Request Default Limit Max Limit/Request Ratio
- ---- -------- --- --- --------------- ------------- -----------------------
- Container memory 256Mi 1Gi 500Mi 1Gi 1500m
- Container cpu 100m 1 500m 1 2
- Pod memory - 8Gi - - -
- Pod cpu - 4 - - -
- PersistentVolumeClaim storage 1Gi 20Gi - - -
复制代码 创建Pod验证LimitRange
创建一个Pod,不设置request和limits- [root@master ~/limits]# cat pod-1.yaml
- apiVersion: v1
- kind: Pod
- metadata:
- name: nginx-pod
- namespace: sit-team
- spec:
- containers:
- - name: nginx-container-1
- image: nginx:latest
- [root@master ~/limits]# kubectl apply -f pod-1.yaml
- pod/nginx-pod created
- # 查看一下详细信息,发现对应的limits和requests和我们配置limitRange的默认值一样
- [root@master ~/limits]# kubectl describe po nginx-pod -n sit-team | grep -A 2 -Ei 'limits|requests'
- Limits:
- cpu: 1
- memory: 1Gi
- Requests:
- cpu: 500m
- memory: 500Mi
复制代码 创建一个Pod,将limits和requests设置超出limitRange的范围,看看会发生什么- [root@master ~/limits]# cat pod-2.yaml
- apiVersion: v1
- kind: Pod
- metadata:
- name: nginx-pod-1
- namespace: sit-team
- spec:
- containers:
- - name: nginx-container
- image: nginx:latest
- resources:
- limits:
- cpu: "2"
- memory: "2Gi"
- requests:
- cpu: "1"
- memory: "1Gi"
- # 创建Pod,发现创建Pod失败了
- [root@master ~/limits]# kubectl apply -f pod-2.yaml
- Error from server (Forbidden): error when creating "pod-2.yaml": pods "nginx-pod-1" is forbidden: [maximum cpu usage per Container is 1, but limit is 2, maximum memory usage per Container is 1Gi, but limit is 2Gi]
复制代码 LimitRange使用注意事项
- 一个定名空间中理论上可以存在多个LimitRange,但是当有多个LimitRange时,以哪一个为基准是不确定的。以是我们在一个定名空间中创建一个LimitRange即可
- LimitRange是做的准入检查,在LimitRange创建之前已存在的Pod或容器不受影响
- LimitRange通常和ResourceQuota结合起来使用
学习ResourceQuota可以阅读这篇文章:K8s进阶之多租户场景下的资源配额(ResourceQuota)
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |