K8s进阶之LimitRange


概述

官方文档: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)

原创作者: huangSir-devops 转载于: https://www.cnblogs.com/huangSir-devops/p/18895502
### 回答1: 我不太清楚关于K8s LimitRange的内容,但我可以提供一些帮助。LimitRange是一种在Kubernetes集群中用于限制资源使用的资源配置机制,它可以限制一个命名空间或一组命名空间中Pod和容器的资源使用。 ### 回答2: KubernetesK8s)是一种用于管理容器化应用程序的开源平台。K8s LimitRangeKubernetes中的一种资源限制机制,用于限制容器或Pod的资源使用。 K8s LimitRange允许您在创建Pod时指定资源使用的限制。它可以设置以下几个方面的限制:CPU、内存、存储和持久卷数量等。通过设置LimitRange,可以防止容器或Pod占用过多的资源,从而确保系统的稳定性和性能。 通过LimitRange,我们可以设置默认的资源限制,所有未指定资源限制的Pod都将被应用这个默认值。此外,我们还可以定义一组特定名称空间的资源限制,以便对不同名称空间内的Pod应用不同的限制。 K8s LimitRange还支持资源限制的最大值和最小值。这意味着我们可以设置资源的上限和下限值,以确保Pod的资源使用在可控范围内。这在多租户环境中特别有用,可以避免某个Pod激增导致其他Pod的资源被枯竭。 另外,LimitRange还可以设置资源请求的默认值。资源请求是指容器或Pod为其正常运行所需的最低资源量。通过设置资源请求的默认值,可以确保Pod在启动时能够得到所需的资源,并避免因资源不足而导致的问题。 综上所述,K8s LimitRange是一种非常有用的资源限制机制,可以帮助我们在Kubernetes集群中管理和控制容器或Pod的资源使用。它提供了灵活的设置选项,可以根据需求定制和调整资源限制,从而有效地管理和优化容器化应用程序的性能和稳定性。 ### 回答3: K8s LimitRangeKubernetes中一种资源配额管理机制,用于限制Pod及其容器可以使用的资源量。它允许集群管理员为不同的命名空间或特定的对象设置资源限制,以确保资源的合理分配和优化资源利用率。 LimitRange可以设置多个资源类型的配额,包括CPU、内存、存储等。可以设置每个容器的最小和最大资源请求以及限制值。通过LimitRange,管理员可以控制Pod或容器的资源使用情况,防止某些容器占用过多资源而影响其他容器的正常运行。 此外,LimitRange还可以限制Pod运行的最大副本数、最大并发请求数以及最大存活时间等。这些限制可用于确保集群性能和稳定性,防止异常情况下资源被过度占用。 在使用LimitRange时,需要在命名空间中创建相应的LimitRange对象,并指定每个资源的限制范围。Pod或容器创建时,会自动应用这些限制。同时,如果用户尝试创建不符合LimitRange限制的Pod或容器,将会收到相应的错误信息,从而保证了资源配额的合理使用。 总之,K8s LimitRangeKubernetes中一种用于资源配额管理的重要机制。通过它,管理员可以有效地控制集群资源的分配,避免资源竞争和过度消耗,提高集群性能和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值