k8s做命名空间配额

公众号关注 「SY技术小站

设为「星标」,每天带你分享技术与生活!

前言

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

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

配额

资源分为以下三种。

  • 计算资源配额:cpu,memory

  • 存储资源配置:requests.storage(真~总量),pvc,某storage class下的限制(例如针对fast类型的sc的限制)

  • 对象数量配置:cm,service,pod的个数。

集群管理员需要为团队创建一个namespace

kubectl create namespace sy

创建quota

[root@master101 sy]# vim quota.yaml 
apiVersion: v1
kind: ResourceQuota
metadata:
  name: compute-resources
  namespace: sy
spec:
  hard:
    limits.cpu: "2"
    limits.memory: 2Gi
    persistentvolumeclaims: "8"
    pods: "2"
    requests.cpu: "1"
    requests.memory: 1Gi
    requests.storage: 30Gi

也可以设置namespace上下文,在这里执行,就不用指定namespace了

kubectl config set-context $(kubectl config current-context) --namespace=sy

测试pod

[root@master101 sy]# cat nginx.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: quota-mem-cpu-demo
  namespace: sy
spec:
  containers:
  - name: quota-mem-cpu-demo-ctr
    image: nginx
    resources:
      limits:
        memory: "4Gi"
        cpu: "800m" 
      requests:
        memory: "3Gi"
        cpu: "500m"

这时会报错

[root@master101 sy]# kubectl apply -f nginx.yaml 
Error from server (Forbidden): error when creating "nginx.yaml": pods "quota-mem-cpu-demo" is forbidden: exceeded quota: compute-resources, requested: limits.memory=4Gi,requests.memory=3Gi, used: limits.memory=0,requests.memory=0, limited: limits.memory=2Gi,requests.memory=1Gi

注意

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

往期精彩文章 

  • ingress-nginx传输加密与认证

  • ingress高可用

  • k8s二进制升级从1.14.2至1.16.2

  • k8s集群curl service的ip延迟响应高

  • k8s集群数据备份与恢复

  • ingress-nginx持久化日志

  • ingress-nginx金丝雀发布

  • k8s的pv与pvc

  微信群加入方式 

  欢迎关注作者公众号

点个在看少个 bug ????

你可能感兴趣的:(k8s做命名空间配额)