在一个多用户、多团队的k8s集群上,通常会遇到一个问题,如何在不同团队之间取得资源的公平,即,不会因为某个流氓团队占据了所有资源,从而导致其他团队无法使用k8s。

k8s的解决方法是,通过RBAC将不同团队(or 项目)限制在不同的namespace下,通过resourceQuota来限制该namespace能够使用的资源。资源分为以下三种。

  • 计算资源配额:cpu,memory
  • 存储资源配置:requests.storage(真~总量),pvc,某storage class下的限制(例如针对fast类型的sc的限制)
  • 对象数量配置:cm,service,pod的个数。

官方文档请见下面的Ref: https://kubernetes.io/docs/tasks/administer-cluster/quota-memory-cpu-namespace/#clean-up

下面举个例子: 首先,集群管理员需要为团队创建一个namespace

kubectl create namespace yfzx

然后,将下面的quota apply到该namespace。

apiVersion: v1
kind: ResourceQuota
metadata:
  name: compute-resources
spec:
  hard:
    limits.cpu: "16"
    limits.memory: 8Gi
    persistentvolumeclaims: "8"
    pods: "16"
    requests.cpu: "8"
    requests.memory: 4Gi
    requests.storage: 30Gi

创建pod时指定相应的requests

apiVersion: v1
kind: Pod
metadata:
  name: quota-mem-cpu-demo
spec:
  containers:
  - name: quota-mem-cpu-demo-ctr
    image: nginx
    resources:
      limits:
        memory: "16Gi"
        cpu: "800m"
      requests:
        memory: "4Gi"
        cpu: "500m"

注意,当开启了resource quota时,用户创建pod,必须指定cpu、内存的 requests or limits ,否则创建失败。resourceQuota搭配 limitRanges口感更佳:limitRange可以配置创建Pod的默认limit/request。

Copyright © suredandan 2018 all right reserved,powered by GitbookUpdateTime: 2020-04-09 16:42:03

results matching ""

    No results matching ""