资源配额 ResourceQuota
k8s管理员为每个命名空间创建一个或多个ResourceQuota对象,定义资源使用总量,K8s会跟踪命名空间资源使用情况,当超过定义的资源配额会返回拒绝。
限制 CRD 资源数量
[root@master1 example]# cat ns-quota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: quota-demo
namespace: default
spec:
hard:
# pod 数量限制为 3
pods: "3"
# statfulset 数量限制为 3
count/statfulsets.apps: "3"
# 自定义资源 mysqlclusters 数量限制为 1
count/mysqlclusters.mysql.orain.com: "1"
验证
创建 ResourceQuota
[root@master1 example]# kubectl apply -f ns-quota.yaml
resourcequota/quota-demo created
[root@master1 example]# kubectl get resourcequota
NAME AGE REQUEST LIMIT
quota-demo 5s count/mysqlclusters.mysql.orain.com: 0/1, count/statfulsets.apps: 0/3
自定义资源超出数量创建会报错:
[root@master1 example]# kubectl get mysqlcluster
NAME AGE
test 3s
当 default 命名空间下 CRD 数量超过定义的上限1时,创建会报错提示超过上限
[root@master1 example]# kubectl apply -f test-1.yaml
Error from server (Forbidden): error when creating "test-1.yaml": mysqlclusters.mysql.orain.com "test-1" is forbidden: exceeded quota: quota-demo, requested: count/mysqlclusters.mysql.orain.com=1, used: count/mysqlclusters.mysql.orain.com=1, limited: count/mysqlclusters.mysql.orain.com=1
ResourceQuota不影响原有限制
如果K8S中原有的CRD数量已经超过数量限制,之后才创建ResourceQuota,之前创建的将不受数量限制影响
首先创建两个CRD资源
[root@master1 example]# kubectl get mysqlcluster
NAME AGE
test 3s
test-1 1s
然后创建 ResourceQuota,并查看数量已经超过了定义的数量限制 1,但是并不影响原有资源对象
[root@master1 example]# kubectl get resourcequota
NAME AGE REQUEST LIMIT
quota-demo 5s count/mysqlclusters.mysql.orain.com: 2/1, count/statfulsets.apps: 0/3