K8S资源配额

K8S提供ResourceQuota和LimitRange两种资源配额管理机制,用以限制命名空间(Namespace)中Pod的资源使用量。

ResourceQuota:限定整个命名空间资源消耗的天花板
LimitRange:为命名空间内的Pod或容器设置资源请求与限制的默认值、最小值及最大值,确保单个应用负载的资源使用在合理范围内,并自动为未设置资源的Pod提供默认值,以满足ResourceQuota的强制要求

kubectl create namespace dev # 创建命名空间

apiVersion: v1  # 指定此资源对象使用的Kubernetes API版本。ResourceQuota资源定义在核心API组中,其稳定版本为v1
kind: ResourceQuota  # 定义要创建的Kubernetes资源类型。ResourceQuota用于在命名空间级别限制资源消耗总量
metadata:
  name: dev-quota  # 为此ResourceQuota对象指定一个名称,在命名空间内必须唯一
  namespace: dev  # 指定此配额规则将应用于名为`dev`的命名空间。这意味着所有在`dev`命名空间内创建的资源都将受到此配额的限制
spec:
  hard:  # `hard`字段定义了资源配额的“硬性限制”,是必须遵守的资源使用上限
    # 计算资源配额
    requests.cpu: "2"  # 限制该命名空间中所有Pod的CPU请求总量不能超过2个CPU核心CPU单位:1 core = 1000 milli core (毫核)。
    requests.memory: 4Gi  # 限制该命名空间中所有Pod的内存请求总量不能超过4 GiB (Gibibytes)内存单位:Mi (Mebibyte) 和 Gi (Gibibyte) 是1024进制单位。
    limits.cpu: "4"  # 限制该命名空间中所有Pod的CPU使用上限总量不能超过4个CPU核心
    limits.memory: 8Gi  # 限制该命名空间中所有Pod的内存使用上限总量不能超过8 GiB
    # 存储资源配额
    requests.storage: 10Gi  # 限制该命名空间中所有持久卷声明(PVC)的存储请求总量不能超过10 GiB。
    persistentvolumeclaims: "4"  # 限制该命名空间中最多可以创建4个持久卷声明(PVC)。
    # 对象数量配额
    pods: "20"  # 限制该命名空间中最多可以存在20个Pod(通常指非终止状态的Pod)。
    services: "10"  # 限制该命名空间中最多可以创建10个Service对象。
    configmaps: "10"  # 限制该命名空间中最多可以创建10个ConfigMap对象。
    secrets: "10"  # 限制该命名空间中最多可以创建10个Secret对象。
    services.loadbalancers: "2"  # 限制该命名空间中最多可以创建2个类型为LoadBalancer的Service。这是一种更细粒度的对象数量配额控制。
apiVersion: v1  # 指定使用的Kubernetes API版本,LimitRange资源定义在核心API组中,其稳定版本为v1
kind: LimitRange  # 定义要创建的Kubernetes资源类型。LimitRange用于在命名空间内对Pod、容器或PVC的资源使用进行细粒度控制
metadata:
  name: default-limits  # 为此LimitRange对象指定一个名称,在命名空间内必须唯一
  namespace: dev  # 指定此LimitRange规则将应用于名为`dev`的命名空间。这意味着所有在`dev`命名空间内创建的容器都将受到此规则的限制
spec:
  limits:  # `spec.limits` 字段定义了具体的限制规则列表
  - type: Container  # 指定此条限制规则的作用对象类型为`Container`,即对Pod中的每个容器生效。其他可选类型包括`Pod`和`PersistentVolumeClaim`
    min:  # 定义容器资源请求(`requests`)的最小值。创建容器时,其`resources.requests`值不能低于此处设置的最小值,否则Pod创建会失败
      cpu: "100m"
      memory: "100Mi"
    max:  # 定义容器资源限制(`limits`)的最大值。创建容器时,其`resources.limits`值不能超过此处设置的最大值,否则Pod创建会失败
      cpu: "2"  # 
      memory: "2Gi"  
    default:  # 定义容器的默认资源限制(`limits`)。当Pod中的容器未显式指定`resources.limits`时,系统会注入此处定义的默认值
      cpu: "500m"
      memory: "512Mi"
    defaultRequest:  # 定义容器的默认资源请求(`requests`)。当Pod中的容器未显式指定`resources.requests`时,系统会注入此处定义的默认值
      cpu: "200m"
      memory: "256Mi"

kubectl describe resourcequota dev-quota -n dev
# 或
kubectl get resourcequota dev-quota -n dev -o yaml


kubectl describe limitranges -A
posted @ 2026-01-13 15:39  WiseHYH  阅读(7)  评论(0)    收藏  举报