Myluzh Blog

K8S 命名空间资源配额 (ResourceQuota) 和资源限制 (LimitRange)

发布时间: 2024-9-6 文章作者: myluzh 分类名称: Kubernetes 朗读文章


0x00 概述
在 Kubernetes 中,ResourceQuota 和 LimitRange 是两种用于管理命名空间资源使用的重要机制。它们帮助确保集群资源的有效分配,防止资源过度消耗。下面将介绍如何配置这两种机制,并解释它们的相互作用。
ResourceQuota:
适用于整个命名空间,限制命名空间中所有 Pod 的总资源使用量。
如果命名空间中的资源总使用量超出配额,则无法创建新的资源(例如,Pod、服务等)。
LimitRange:
适用于命名空间中的单个 Pod 和容器,确保它们的资源请求和限制在指定的范围内。
如果容器的资源请求或限制超出 LimitRange 定义的范围,Kubernetes 将拒绝 Pod 的创建。

0x01 使用 ResourceQuota 限制命名空间的总资源
ResourceQuota 用于设置一个命名空间中所有资源的总量上限。这包括 CPU、内存、存储、Pod 数量等。它确保命名空间中的资源使用不会超出指定的配额。
apiVersion: v1
kind: ResourceQuota
metadata:
  name: example-quota
  namespace: your-namespace
spec:
  hard:
    requests.cpu: "10"
    requests.memory: "20Gi"
    limits.cpu: "20"
    limits.memory: "40Gi"
    pods: "50"
    services: "10"
requests.cpu: 命名空间中所有 Pod 请求的 CPU 总量上限(例如,10 个 CPU 核心)。
requests.memory: 命名空间中所有 Pod 请求的内存总量上限(例如,20 GiB)。
limits.cpu: 命名空间中所有 Pod 的 CPU 限制总量上限(例如,20 个 CPU 核心)。
limits.memory: 命名空间中所有 Pod 的内存限制总量上限(例如,40 GiB)。
pods: 命名空间中允许的最大 Pod 数量(例如,50 个 Pod)。
services: 命名空间中允许的最大服务数量(例如,10 个服务)。

0x02  使用 LimitRange 限制单个 Pod 和容器的资源请求和限制
LimitRange 用于为命名空间中的 Pod 和容器设置资源请求和限制的范围。它确保所有 Pod 和容器的资源使用符合定义的范围。
apiVersion: v1
kind: LimitRange
metadata:
  name: example-limits
  namespace: your-namespace
spec:
  limits:
    - type: Container
      max:
        cpu: "1"
        memory: "2Gi"
      min:
        cpu: "100m"
        memory: "256Mi"
      default:
        cpu: "500m"
        memory: "1Gi"
      defaultRequest:
        cpu: "250m"
        memory: "512Mi"
      resourceTypes:
        - cpu
        - memory
max: 定义容器可以使用的最大资源量(例如,1 CPU 核心和 2 GiB 内存)。
min: 定义容器需要请求的最小资源量(例如,100m CPU 和 256 MiB 内存)。
default: 为未指定资源限制的容器设置默认的限制(例如,500m CPU 和 1 GiB 内存)。
defaultRequest: 为未指定资源请求的容器设置默认的请求(例如,250m CPU 和 512 MiB 内存)。
resourceTypes: 限制适用的资源类型,例如 CPU 和内存。

0x03 验证资源限制 
查看 ResourceQuota:
kubectl get resourcequota -n your-namespace
查看 LimitRange:
kubectl get limitrange -n your-namespace


标签: k8s kubernetes Namespace ResourceQuota LimitRange 资源限制

发表评论