1.9.2. 资源配额

当多个用户或团队使用固定的节点数目的集群时候,担心有人超过自己使用的资源量。资源配额主要是帮忙管理员解决这个问题的。

可以通过这种方式工作:

  • 不通团队在不通的命名空间工作。

  • 集群管理员可以为每个命名空间创建一个或者多个resourceQuota对象。

如果创建pod的没有指资源信息,就会错误的, 如果超过总量,就是403了。

1.9.2.1. 计算资源配额

  • limits.cpu 所有非终止状态的 Pod,其 CPU 限额总量不能超过该值。

  • limits.memory 所有非终止状态的 Pod,其内存限额总量不能超过该值。

  • requests.cpu 所有非终止状态的 Pod,其 CPU 需求总量不能超过该值。

  • requests.memory 所有非终止状态的 Pod,其内存需求总量不能超过该值。

  • hugepages-<size> 对于所有非终止状态的 Pod,针对指定尺寸的巨页请求总数不能超过此值。

  • cpu 与 requests.cpu 相同。

  • memory 与 requests.memory 相同。

1.9.2.2. 存储资源配额

  • requests.storage 所有 PVC,存储资源的需求总量不能超过该值。

  • persistentvolumeclaims 在该命名空间中所允许的 PVC 总量。

  • <storage-class-name>.storageclass.storage.k8s.io/requests.storage 在所有与 <storage-class-name> 相关的持久卷申领中,存储请求的总和不能超过该值。

  • <storage-class-name>.storageclass.storage.k8s.io/persistentvolumeclaims 在与 storage-class-name 相关的所有持久卷申领中,命名空间中可以存在的持久卷申领总数。

1.9.2.3. 对象数量配额

  • count/<resource>.<group>:用于非核心(core)组的资源

  • count/<resource>:用于核心组的资源

1.9.2.4. 配额作用域

每个配额应该有一组相关的作用域, 配额支队作用域内的资源生效。

  • Terminating 匹配所有 spec.activeDeadlineSeconds 不小于 0 的 Pod。

  • NotTerminating 匹配所有 spec.activeDeadlineSeconds 是 nil 的 Pod。

  • BestEffort 匹配所有 Qos 是 BestEffort 的 Pod。

  • NotBestEffort 匹配所有 Qos 不是 BestEffort 的 Pod。

  • PriorityClass 匹配所有引用了所指定的优先级类的 Pods。

  • CrossNamespacePodAffinity 匹配那些设置了跨名字空间 (反)亲和性条件的 Pod。

scopeSelector:
  matchExpressions:
    - scopeName: PriorityClass
      operator: In
      values:
        - middle

1.9.2.5. 根据服务的优先级设置不同的配额样例

apiVersion: v1
kind: List
items:
- apiVersion: v1
  kind: ResourceQuota
  metadata:
    name: pods-high
  spec:
    hard:
      cpu: "1000"
      memory: 200Gi
      pods: "10"
    scopeSelector:
      matchExpressions:
      - operator : In
        scopeName: PriorityClass
        values: ["high"]
- apiVersion: v1
  kind: ResourceQuota
  metadata:
    name: pods-medium
  spec:
    hard:
      cpu: "10"
      memory: 20Gi
      pods: "10"
    scopeSelector:
      matchExpressions:
      - operator : In
        scopeName: PriorityClass
        values: ["medium"]
- apiVersion: v1
  kind: ResourceQuota
  metadata:
    name: pods-low
  spec:
    hard:
      cpu: "5"
      memory: 10Gi
      pods: "10"
    scopeSelector:
      matchExpressions:
      - operator : In
        scopeName: PriorityClass
        values: ["low"]

d之一。