【每日一个云原生小技巧 #72】Kubernetes Limit Ranges

Kubernetes(k8s)中的 Limit Ranges(限制范围)是用于设置命名空间内 Pods 和 Containers 资源请求和限制的默认值和范围。它可以确保在某个命名空间内创建的资源不会超过预定义的限制,从而避免资源耗尽等问题。

使用场景

  1. 资源管理:确保集群中资源得到合理分配,避免个别应用占用过多资源。
  2. 多租户隔离:在多租户环境中,可以为每个租户设置资源限制,保证公平性。
  3. 故障预防:防止因单个应用配置不当导致整个集群性能下降。

使用技巧

  1. 设置默认限制:为命名空间设置默认的资源请求和限制,简化应用的资源配置。
  2. 限制范围:设置资源的最小/最大请求和限制,确保资源配置在合理范围内。
  3. 优先级和抢占:结合 ResourceQuotas 和 PriorityClasses 使用,实现更细粒度的资源管理和调度。

使用案例

假设我们有一个命名空间,我们希望确保:

  • 默认情况下,Pods至少请求100m CPU和200MiB内存,且不超过500m CPU和1GiB内存。
  • 最小和最大Pods请求和限制设置如上所述。

YAML配置示例

代码语言:javascript
复制
apiVersion: v1
kind: LimitRange
metadata:
  name: example-limit-range
spec:
  limits:
  - default:
      cpu: 100m
      memory: 200Mi
    defaultRequest:
      cpu: 100m
      memory: 200Mi
    max:
      cpu: 500m
      memory: 1Gi
    min:
      cpu: 100m
      memory: 200Mi
    type: Container

这个配置创建了一个名为example-limit-range的限制范围,应用于容器级别的资源限制。它为容器设置了默认的请求和限制,并定义了最大和最小值。

创建和使用

  1. 将上面的YAML保存为文件,例如limit-range.yaml
  2. 在Kubernetes集群中应用这个配置:
代码语言:javascript
复制
kubectl apply -f limit-range.yaml -n <your-namespace>
  1. 现在在这个命名空间中创建的任何Pod,如果没有明确指定资源请求和限制,将默认使用这里设置的值。

注意:实际应用中,需要根据实际工作负载和集群资源情况调整这些值。 Limit Ranges是Kubernetes中资源管理的重要工具,正确配置可以帮助集群管理员确保资源得到合理分配,避免资源争抢和性能问题。