管理namespace中的资源配额

当用多个团队或者用户共用同一个集群的时候难免会有资源竞争的情况发生,这时候就需要对不同团队或用户的资源使用配额做出限制。

开启资源配额限制功能

目前有两种资源分配管理相关的控制策略插件 ResourceQuotaLimitRange

要启用它们只要 API Server 的启动配置的 KUBE_ADMISSION_CONTROL 参数中加入了 ResourceQuota 的设置,这样就给集群开启了资源配额限制功能,加入 LimitRange 可以用来限制一个资源申请的范围限制,参考 为 namesapce 配置默认的内存请求与限额在 namespace 中配置默认的CPU请求与限额

两种控制策略的作用范围都是对于某一 namespace,ResourceQuota 用来限制 namespace 中所有的 Pod 占用的总的资源 request 和 limit,而 LimitRange 是用来设置 namespace 中 Pod 的默认的资源 request 和 limit 值。

资源配额分为三种类型:

  • 计算资源配额
  • 存储资源配额
  • 对象数量配额

关于资源配额的详细信息请参考 kubernetes 官方文档 资源配额

示例

我们为 spark-cluster 这个 namespace 设置 ResouceQuotaLimitRange

以下 yaml 文件可以在 kubernetes-handbookmanifests/spark-with-kubernetes-native-scheduler 目录下找到。

配置计算资源配额

配置文件:spark-compute-resources.yaml

  1. apiVersion: v1
  2. kind: ResourceQuota
  3. metadata:
  4. name: compute-resources
  5. namespace: spark-cluster
  6. spec:
  7. hard:
  8. pods: "20"
  9. requests.cpu: "20"
  10. requests.memory: 100Gi
  11. limits.cpu: "40"
  12. limits.memory: 200Gi

要想查看该配置只要执行:

  1. kubectl -n spark-cluster describe resourcequota compute-resources

配置对象数量限制

配置文件:spark-object-counts.yaml

  1. apiVersion: v1
  2. kind: ResourceQuota
  3. metadata:
  4. name: object-counts
  5. namespace: spark-cluster
  6. spec:
  7. hard:
  8. configmaps: "10"
  9. persistentvolumeclaims: "4"
  10. replicationcontrollers: "20"
  11. secrets: "10"
  12. services: "10"
  13. services.loadbalancers: "2"

配置CPU和内存LimitRange

配置文件:spark-limit-range.yaml

  1. apiVersion: v1
  2. kind: LimitRange
  3. metadata:
  4. name: mem-limit-range
  5. spec:
  6. limits:
  7. - default:
  8. memory: 50Gi
  9. cpu: 5
  10. defaultRequest:
  11. memory: 1Gi
  12. cpu: 1
  13. type: Container
  • default 即 limit 的值
  • defaultRequest 即 request 的值

参考

资源配额

为命名空间配置默认的内存请求与限额

在命名空间中配置默认的CPU请求与限额