下面分别以允许存在的 ConfigMap 总数上限数和允许存在的非终止状态的 Pod 总数上限数为例:
一、设置允许存在的 ConfigMap 总数¶
1.定义一个yaml文件
[root@k8s-master01 study]# vim resourceQuota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: resource-test
labels:
app: resourcequota
spec:
hard:
pods: 2
# requests.cpu: 0.5
# requests.memory: 512Mi
# limits.cpu: 5
# limits.memory: 16Gi
configmaps: 2
# requests.storage: 40Gi
# persistentvolumeclaims: 20
# replicationcontrollers: 20
# secrets: 20
# services: 50
# services.loadbalancers: "2"
# services.nodeports: "10"
#pods:限制最多启动Pod的个数
#requests.cpu:限制最高CPU请求数
#requests.memory:限制最高内存的请求数
#limits.cpu:限制最高CPU的limit上限
#limits.memory:限制最高内存的limit上限
2.新建一个命名空间
[root@k8s-master01 study]# kubectl create ns rq-test
3.开始创建
[root@k8s-master01 study]# kubectl create -f resourceQuota.yaml -n rq-test
4.查看部署情况
[root@k8s-master01 study]# kubectl get resourcequota -n rq-test
NAME AGE REQUEST LIMIT
resource-test 69s configmaps: 1/2, pods: 0/2
[root@k8s-master01 study]# kubectl get resourcequota -n rq-test -oyaml
apiVersion: v1
items:
- apiVersion: v1
kind: ResourceQuota
metadata:
creationTimestamp: "2022-12-11T01:03:55Z"
labels:
app: resourcequota
name: resource-test
namespace: rq-test
resourceVersion: "14348"
uid: c58788f1-6b16-4d6f-b5c2-16522af71574
spec:
hard:
configmaps: "2" #限制内容
pods: "2" #限制内容
status:
hard:
configmaps: "2"
pods: "2"
used:
configmaps: "1"#目前使用情况
pods: "0" #目前使用情况
kind: List
metadata:
resourceVersion: ""
selfLink: ""
5.查看cm默认数量为1
[root@k8s-master01 study]# kubectl get cm -n rq-test
NAME DATA AGE
kube-root-ca.crt 1 8m29s
6.再创建两个cm,验证。观察到,满足两个后,再创建会发生报错信息
[root@k8s-master01 study]# kubectl create cm test-cm01 --from-file=job.yaml -n rq-test
configmap/test-cm01 created
[root@k8s-master01 study]# kubectl get cm -n rq-test
NAME DATA AGE
kube-root-ca.crt 1 12m
test-cm01 1 11s
[root@k8s-master01 study]# kubectl create cm test-cm02 --from-file=job.yaml -n rq-test
error: failed to create configmap: configmaps "test-cm02" is forbidden: exceeded quota: resource-test, requested: configmaps=1, used: configmaps=2, limited: configmaps=2
二、设置允许存在的Pod总数¶
1.定义一个yaml文件
[root@k8s-master01 study]# vim resourceQuota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: resource-test
labels:
app: resourcequota
spec:
hard:
pods: 2
# requests.cpu: 0.5
# requests.memory: 512Mi
# limits.cpu: 5
# limits.memory: 16Gi
configmaps: 2
# requests.storage: 40Gi
# persistentvolumeclaims: 20
# replicationcontrollers: 20
# secrets: 20
# services: 50
# services.loadbalancers: "2"
# services.nodeports: "10"
#pods:限制最多启动Pod的个数
#requests.cpu:限制最高CPU请求数
#requests.memory:限制最高内存的请求数
#limits.cpu:限制最高CPU的limit上限
#limits.memory:限制最高内存的limit上限
2.创建deployment
[root@k8s-master01 study]# kubectl create deploy test-01 --image=registry.cn-hangzhou.aliyuncs.com/zq-demo/nginx:1.14.2 --replicas=3 -n rq-test
3.查看创建情况,观察到只起来两个pod
[root@k8s-master01 study]# kubectl get deploy -n rq-test
NAME READY UP-TO-DATE AVAILABLE AGE
test-01 0/3 2 0 17s
[root@k8s-master01 study]# kubectl get po -n rq-test
NAME READY STATUS RESTARTS AGE
test-01-5465c8b4fd-5x4wg 0/1 ContainerCreating 0 92s
test-01-5465c8b4fd-jx4wt 0/1 ContainerCreating 0 92s
4.查看报错信息
[root@k8s-master01 study]# kubectl describe deployment test-01 -n rq-test
...
...
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 4m25s deployment-controller Scaled up replica set test-01-5465c8b4fd to 3
[root@k8s-master01 study]# kubectl describe rs test-01-5465c8b4fd -n rq-test
...
...
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulCreate 6m15s replicaset-controller Created pod: test-01-5465c8b4fd-jx4wt
Warning FailedCreate 6m15s replicaset-controller Error creating: pods "test-01-5465c8b4fd-q5cmt" is forbidden: exceeded quota: resource-test, requested: pods=1, used: pods=2, limited: pods=2
Normal SuccessfulCreate 6m15s replicaset-controller Created pod: test-01-5465c8b4fd-5x4wg
Warning FailedCreate 6m15s replicaset-controller Error creating: pods "test-01-5465c8b4fd-87tkn" is forbidden: exceeded quota: resource-test, requested: pods=1, used: pods=2, limited: pods=2
Warning FailedCreate 6m15s replicaset-controller Error creating: pods "test-01-5465c8b4fd-9ptwh" is forbidden: exceeded quota: resource-test, requested: pods=1, used: pods=2, limited: pods=2
Warning FailedCreate 6m15s replicaset-controller Error creating: pods "test-01-5465c8b4fd-4dv8h" is forbidden: exceeded quota: resource-test, requested: pods=1, used: pods=2, limited: pods=2
Warning FailedCreate 6m15s replicaset-controller Error creating: pods "test-01-5465c8b4fd-2qr6p" is forbidden: exceeded quota: resource-test, requested: pods=1, used: pods=2, limited: pods=2
Warning FailedCreate 6m15s replicaset-controller Error creating: pods "test-01-5465c8b4fd-jjqsn" is forbidden: exceeded quota: resource-test, requested: pods=1, used: pods=2, limited: pods=2
Warning FailedCreate 6m14s replicaset-controller Error creating: pods "test-01-5465c8b4fd-sgx8b" is forbidden: exceeded quota: resource-test, requested: pods=1, used: pods=2, limited: pods=2
Warning FailedCreate 6m14s replicaset-controller Error creating: pods "test-01-5465c8b4fd-hk4lk" is forbidden: exceeded quota: resource-test, requested: pods=1, used: pods=2, limited: pods=2
Warning FailedCreate 6m14s replicaset-controller Error creating: pods "test-01-5465c8b4fd-xhdvs" is forbidden: exceeded quota: resource-test, requested: pods=1, used: pods=2, limited: pods=2
Warning FailedCreate 51s (x8 over 6m14s) replicaset-controller (combined from similar events): Error creating: pods "test-01-5465c8b4fd-hp6cq" is forbidden: exceeded quota: resource-test, requested: pods=1, used: pods=2, limited: pods=2
4.修改pod限制数为3
[root@k8s-master01 study]# vim resourceQuota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: resource-test
labels:
app: resourcequota
spec:
hard:
pods: 3
# requests.cpu: 0.5
# requests.memory: 512Mi
# limits.cpu: 5
# limits.memory: 16Gi
configmaps: 2
# requests.storage: 40Gi
# persistentvolumeclaims: 20
# replicationcontrollers: 20
# secrets: 20
# services: 50
# services.loadbalancers: "2"
# services.nodeports: "10"
#pods:限制最多启动Pod的个数
#requests.cpu:限制最高CPU请求数
#requests.memory:限制最高内存的请求数
#limits.cpu:限制最高CPU的limit上限
#limits.memory:限制最高内存的limit上限
5.重新创建
[root@k8s-master01 study]# kubectl replace -f resourceQuota.yaml -n rq-test
6.等待轮询检查完毕,自动创建完成即可
[root@k8s-master01 study]# kubectl get po -n rq-test
NAME READY STATUS RESTARTS AGE
test-01-5465c8b4fd-5x4wg 0/1 ContainerCreating 0 10m
test-01-5465c8b4fd-jx4wt 0/1 ContainerCreating 0 10m