K8s进阶之LimitRange

打印 上一主题 下一主题

主题 1940|帖子 1940|积分 5820

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
概述

官方文档:https://kubernetes.io/zh-cn/docs/concepts/policy/limit-range/
在 Kubernetes(K8s)中,LimitRange 是一种用于约束定名空间(Namespace)内资源配额的资源对象,主要作用是为 Pod 和容器设置资源使用的限制范围(如 CPU、内存等)。它可以定义资源的最小值、最大值、默认值以及比例限制,确保容器在公道的资源范围内运行,避免因资源分配不公道导致的集群性能问题或服务不稳定。
作用


  • 在一个定名空间中实行对每个 Pod 或 Container 最小和最大的资源使用量的限制。
  • 在一个定名空间中实行对每个 PersistentVolumeClaim 能申请的最小和最大的存储空间巨细的限制。
  • 在一个定名空间中实行对一种资源的申请值和限制值的比值的控制。
  • 设置一个定名空间中对计算资源的默认申请/限制值,并且自动的在运行时注入到多个 Container 中。
  • 在一个定名空间中,若某一个Pod或Container未设置最小和最大的资源使用量,可以为其设置默认值
配置示例
  1. apiVersion: v1
  2. kind: LimitRange
  3. metadata:
  4.   name: comprehensive-limit
  5.   namespace: dev-team  # 限制的namespace
  6. spec:
  7.   limits:
  8.   # 容器级别限制
  9.   - type: Container
  10.   # 请求的最小cpu和内存限制,对应request的设置
  11.     min:
  12.       cpu: "100m"
  13.       memory: "256Mi"
  14.   # 请求的最大cpu和内存限制,对应的limits的设置
  15.     max:
  16.       cpu: "2"
  17.       memory: "4Gi"
  18.     # 默认的request设置,如果Container没有设置request,则默认使用这个值
  19.     defaultRequest:
  20.       cpu: "500m"
  21.       memory: "1Gi"
  22.     # 默认的limits设置,如果Container没有设置limit,则默认使用这个值
  23.     default:
  24.       cpu: "1"
  25.       memory: "2Gi"
  26.     # 控制request和limits设置的比例,如果request.cpu设置为1,那么limits.cpu不能超过2,   
  27.     # memory同理
  28.     maxLimitRequestRatio:
  29.       cpu: "2"
  30.       memory: "1.5"
  31.   
  32.   # Pod级别限制
  33.   - type: Pod
  34.     max:
  35.       cpu: "4"        # 整个Pod的CPU总和不得超过4核
  36.       memory: "8Gi"   # 整个Pod的内存总和不得超过8GB
  37.   
  38.   # PVC限制
  39.   - type: PersistentVolumeClaim
  40.     min:
  41.       storage: "1Gi"
  42.     max:
  43.       storage: "20Gi"
复制代码
实战案例

创建LimitRange

先创建一个namespace
  1. [root@master ~]# kubectl create namespace sit-team
  2. namespace/sit-team created
  3. [root@master ~]# kubectl get ns sit-team
  4. NAME       STATUS   AGE
  5. sit-team   Active   8s
复制代码
创建LimitRange,namespace需要选中上一步创建的名称空间
  1. # 定义LimitRange
  2. [root@master ~/limits]# cat sit-limits.yaml
  3. apiVersion: v1
  4. kind: LimitRange
  5. metadata:
  6.   name: sit-team-limits
  7.   # 限制的namespace
  8.   namespace: sit-team
  9. spec:
  10.   limits:
  11.   # 容器级别限制
  12.   - type: Container
  13.   # 请求的最小cpu和内存限制,对应request的设置
  14.     min:
  15.       cpu: "100m"
  16.       memory: "256Mi"
  17.   # 请求的最大cpu和内存限制,对应的limits的设置
  18.     max:
  19.       cpu: "1"
  20.       memory: "1Gi"
  21.     # 默认的request设置,如果Container没有设置request,则默认使用这个值
  22.     defaultRequest:
  23.       cpu: "500m"
  24.       memory: "500Mi"
  25.     # 默认的limits设置,如果Container没有设置limit,则默认使用这个值
  26.     default:
  27.       cpu: "1"
  28.       memory: "1Gi"
  29.     # 控制request和limits设置的比例,如果request.cpu设置为1,那么limits.cpu不能超过2,   
  30.     # memory同理
  31.     maxLimitRequestRatio:
  32.       cpu: "2.5"
  33.       memory: "2.5"
  34.   # Pod级别限制
  35.   - type: Pod
  36.     max:
  37.       # 整个Pod的CPU总和不得超过4核
  38.       cpu: "4"
  39.       # 整个Pod的内存总和不得超过8GB
  40.       memory: "8Gi"
  41.   # PVC限制
  42.   - type: PersistentVolumeClaim
  43.     # 最小的存储容量
  44.     min:
  45.       storage: "1Gi"
  46.     # 最大的存储容量
  47.     max:
  48.       storage: "20Gi"
  49. # 创建limits
  50. [root@master ~/limits]# kubectl apply -f sit-limits.yaml
  51. limitrange/sit-team-limits created
复制代码
查看LimitRange
  1. [root@master ~/limits]# kubectl get limits -n sit-team
  2. NAME              CREATED AT
  3. sit-team-limits   2025-05-26T03:12:30Z
  4. # 查看详情
  5. [root@master ~/limits]# kubectl describe limits sit-team-limits -n sit-team
  6. Name:                  sit-team-limits
  7. Namespace:             sit-team
  8. Type                   Resource  Min    Max   Default Request  Default Limit  Max Limit/Request Ratio
  9. ----                   --------  ---    ---   ---------------  -------------  -----------------------
  10. Container              memory    256Mi  1Gi   500Mi            1Gi            1500m
  11. Container              cpu       100m   1     500m             1              2
  12. Pod                    memory    -      8Gi   -                -              -
  13. Pod                    cpu       -      4     -                -              -
  14. PersistentVolumeClaim  storage   1Gi    20Gi  -                -              -
复制代码
创建Pod验证LimitRange

创建一个Pod,不设置request和limits
  1. [root@master ~/limits]# cat pod-1.yaml
  2. apiVersion: v1
  3. kind: Pod
  4. metadata:
  5.   name: nginx-pod
  6.   namespace: sit-team
  7. spec:
  8.   containers:
  9.   - name: nginx-container-1
  10.     image: nginx:latest
  11. [root@master ~/limits]# kubectl apply -f pod-1.yaml
  12. pod/nginx-pod created
  13. # 查看一下详细信息,发现对应的limits和requests和我们配置limitRange的默认值一样
  14. [root@master ~/limits]# kubectl describe po nginx-pod -n sit-team | grep -A 2 -Ei 'limits|requests'
  15.     Limits:
  16.       cpu:     1
  17.       memory:  1Gi
  18.     Requests:
  19.       cpu:        500m
  20.       memory:     500Mi
复制代码
创建一个Pod,将limits和requests设置超出limitRange的范围,看看会发生什么
  1. [root@master ~/limits]# cat pod-2.yaml
  2. apiVersion: v1
  3. kind: Pod
  4. metadata:
  5.   name: nginx-pod-1
  6.   namespace: sit-team
  7. spec:
  8.   containers:
  9.   - name: nginx-container
  10.     image: nginx:latest
  11.     resources:
  12.       limits:
  13.         cpu: "2"
  14.         memory: "2Gi"
  15.       requests:
  16.         cpu: "1"
  17.         memory: "1Gi"
  18. # 创建Pod,发现创建Pod失败了
  19. [root@master ~/limits]# kubectl apply -f pod-2.yaml
  20. 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企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

半亩花草

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表