O Resource Quota utilizado nestes exemplos foi definido na página Creating a ResourceQuota e aplicado a um namespace chamado production. Com o Resource Quota aplicado queremos ver a imposição de regras em funcionamento.
apiVersion: v1
kind: ResourceQuota
metadata:
name: awesome-quota
spec:
hard:
pods: 2
requests.cpu: "1"
requests.memory: 1024m
limits.cpu: "4"
limits.memory: 4096m
O primeiro teste será a tentativa de criação de um Pod com um container nginx sem a definição de requests e limits para CPU e memória. A criação será barrada pois a partir do momento que o Resource Quota é aplicado ao namespace devemos informar requests e limits para CPU e memória na definição dos containers deste namespace.
Manifesto Pod sem *Requests*
e *Limits*
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: production
spec:
containers:
- image: nginx:1.18.0
name: nginx
Tentando Criar o Pod
**$ kubectl apply -f pod_sem_requests_limits.yaml --namespace=production**
Error from server (Forbidden):
error when creating "pod_sem_requests_limits.yaml":
pods "nginx" is forbidden: failed quota: awesome-quota:
must specify
limits.cpu,
limits.memory,
requests.cpu,
requests.memory
Manifesto Pod com *Requests*
e *Limits*
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- image: nginx:1.18.0
name: nginx
resources:
requests:
cpu: "0.5"
memory: "512m"
limits:
cpu: "1"
memory: "1024m"
Tentando Criar o Pod
**$ kubectl apply -f pod_com_requests_limits.yaml --namespace production**
pod/nginx created
# Com um Pod em execução, estado atual do ResourceQuota
**$ kubectl describe resourcequotas awesome-quota --namespace=production**
Name: awesome-quota
Namespace: production
Resource Used Hard
-------- ---- ----
limits.cpu 1 4
limits.memory 1024m 4096m
pods 1 2
requests.cpu 500m 1
requests.memory 512m 1024m
# Com dois Pods em execução, chegamos ao limite do ResourceQuota
**$ kubectl describe resourcequotas awesome-quota --namespace=production**
Name: awesome-quota
Namespace: production
Resource Used Hard
-------- ---- ----
limits.cpu 2 4
limits.memory 2048m 4096m
pods 2 2
requests.cpu 1 1
requests.memory 1024m 1024m
# Ao tentar criar outro Pod
**$ kubectl apply -f pod_com_requests_limits.yaml --namespace production**
Error from server (Forbidden):
error when creating "pod_com_requests_limits.yaml":
pods "nginx32" is forbidden: exceeded quota: awesome-quota,
requested:
pods=1,
requests.cpu=500m,
requests.memory=512m,
used:
pods=2,
requests.cpu=1,
requests.memory=1024m,
limited:
pods=2,
requests.cpu=1,
requests.memory=1024m
Podemos criar até dois Pods com as configurações de CPU e memória mostradas no manifesto acima devido as restrições definidas no Resource Quota para CPU, memória e quantidade de Pods admitidos no namespace.