A primitiva Resource Quota estabelece a quantidade máxima utilizável de recursos por namespace. Uma vez aplicada, o Kubernetes Scheduler cuidará do cumprimento destas regras e, além disso, fará a distribuição/escalonamento dos Pods para os nodes que possuem recursos suficientes. Se, em algum momento, todos os nodes estiverem ocupados, as tentativas de escalonamento dos Pods resultarão em status Pending para cada um destes Pods.

A lista a seguir da uma ideia das regras que podem ser aplicadas com ResourceQuota:

<aside> 💡 if you set a CPU request quota in a namespace, then all pods need to set a CPU request in their definition, otherwise they will not be scheduled.

</aside>

Criando de Forma Imperativa

# Exemplo retirado do `kubectl create quota --help`
$ kubectl create quota my-quota \\
--hard=\\
cpu=1,\\
memory=1G,\\
pods=2,\\
services=3,\\
replicationcontrollers=2,\\
resourcequotas=1,\\
secrets=5,\\
persistentvolumeclaims=10
apiVersion: v1
kind: ResourceQuota
metadata:
  creationTimestamp: null
  name: my-quota
spec:
  hard:
    cpu: "1" 
    memory: 1G
    persistentvolumeclaims: "10"
    pods: "2" 
    replicationcontrollers: "2" 
    resourcequotas: "1" 
    secrets: "5" 
    services: "3" 
# Kubectl also supports object count quota for all standard 
# namespaced resources using the syntax count/<resource>.<group>
$ kubectl create quota my-quota \\
--hard=\\
cpu=1,\\
memory=1G,\\
count/deployments.apps=2,\\
count/replicasets.apps=4,\\
count/pods=3,\\
count/secrets=4
apiVersion: v1
kind: ResourceQuota
metadata:
  creationTimestamp: null
  name: my-quota
spec:
  hard:
    count/deployments.apps: "2" 
    count/pods: "3" 
    count/replicasets.apps: "4" 
    count/secrets: "4" 
    cpu: "1" 
    memory: 1G
status: {}

Exemplo 01 - Internet

Understanding Kubernetes Limits and Requests | Sysdig

# manifesto Resource Quota
apiVersion: v1
kind: ResourceQuota
metadata:
  name: mem-cpu-example
spec:
  hard:
    requests.cpu: 2
    requests.memory: 2Gi
    limits.cpu: 3
    limits.memory: 4Gi

Aplicando o ResourceQuota a um namespace:

Exemplo 02 - Livro

Vamos criar um namespace chamado production para aplicar restrições com Resource Quota e demonstrar sua funcionalidade.

As seguintes restrições serão aplicadas ao namespace production:

Manifesto Namespace

# NAMESPACE
apiVersion: v1
kind: Namespace
metadata:
  creationTimestamp: null
  name: production
spec: {}
status: {}

Listagem de Namespaces

**$ kubectl get namespaces**              
	NAME                 STATUS   AGE
	**production           Active   5s**
	default              Active   7d10h
	kube-node-lease      Active   7d10h
	kube-public          Active   7d10h
	kube-system          Active   7d10h
	local-path-storage   Active   7d10h

Manifesto ResourceQuota

apiVersion: v1
kind: ResourceQuota
metadata:
  name: awesome-quota
spec:
  hard:
    pods: 2
    requests.cpu: "1"
    requests.memory: 1024m
    limits.cpu: "4"
    limits.memory: 4096m

Criando e Inspecionando o ResourceQuota

**$ kubectl apply -f resource-quota.yaml --namespace=production**
	resourcequota/awesome-quota created

**$ kubectl describe resourcequotas awesome-quota --namespace=production**
	Name:            awesome-quota
	Namespace:       production
	Resource         Used  Hard
	--------         ----  ----
	limits.cpu       0     4
	limits.memory    0     4096m
	pods             0     2
	requests.cpu     0     1
	requests.memory  0     1024m

Na próxima página(Exploring ResourceQuota Enforcement ) são criados Pods e containers para exemplificar a funcionalidade do Resource Quota.

Documentação Kubernetes

Cotas de Recursos

Untitled

Kubernetes API Reference Docs

API Reference para Resource Quotas.

Resource Management for Pods and Containers