Antes de qualquer exercício faça o login no cluster no terminal para execução dos comandos OC.
Crie o pod abaixo:
apiVersion: v1
kind: Pod
metadata:
name: memory-demo-seu-usuario
spec:
containers:
- name: memory-demo-ctr
image: polinux/stress
resources:
limits:
memory: "220Mi"
requests:
memory: "100Mi"
command: ["stress"]
args: ["--vm", "1", "--vm-bytes", "150M", "--vm-hang", "1"]
Crie o pod abaixo:
apiVersion: v1
kind: Pod
metadata:
name: memory-demo-seu-usuario
spec:
containers:
- name: memory-demo-ctr
image: polinux/stress
resources:
limits:
memory: "150Mi"
requests:
memory: "100Mi"
command: ["stress"]
args: ["--vm", "1", "--vm-bytes", "200M", "--vm-hang", "1"]
apiVersion: v1
kind: Pod
metadata:
name: memory-demo-seu-usuario
spec:
containers:
- name: memory-demo-ctr
image: polinux/stress
resources:
limits:
memory: "300Mi"
cpu: "1"
requests:
memory: "300Mi"
cpu: "0.5"
command: ["stress"]
args: [ "--cpu", "2"]
após alguns minutos execute:
oc project seu-namespace
oc adm top pod
A saida deve ser algo como abaixo:
NAME CPU(cores) MEMORY(bytes)
memory-demo-seu-usuario 1000m 2Mi
Remova o limit range atual
oc delete limitrange limits-core-resource-limits
e crie o limit range abaixo:
kind: LimitRange
apiVersion: v1
metadata:
name: limits-core
spec:
limits:
- type: Container
max:
cpu: '500m'
memory: 256Mi
default:
cpu: 250m
memory: 256Mi
defaultRequest:
cpu: 200m
memory: 100Mi
- type: Pod
max:
cpu: '1'
memory: 1Gi
Neste exemplo são permitidos a criação de pods que a soma dos recursos não ultrapasse 1 core e 1Gi de uso.
Os containers quando não especificados terão limite de 250 mili cores e 256Mi, e request de 200 milicores e 100Mi de memoria request.
Tentar definir limites fora desse intervalo ocasionará em erro:
tente criar o pod abaixo sem aplicar limites:
apiVersion: v1
kind: Pod
metadata:
name: web-server
spec:
containers:
- name: web
image: nginx
Depois visualize o YAML do pod, verá que foi definido um limite embora não tenha sido informado:
...
...
containers:
- name: web
image: nginx
resources:
limits:
cpu: 250m
memory: 256Mi
requests:
cpu: 200m
memory: 100Mi
volumeMounts:
...
...
Remova o container.
O limit range não impede que seja definido um limite desde que não atinja o tamanho máximo:
Tente criar o pod abaixo é veja que recebe um erro pois o pod ultrapassou o limite maximo para um container que é de 500Mi.
apiVersion: v1
kind: Pod
metadata:
name: web-server
spec:
containers:
- name: web
image: nginx
resources:
limits:
memory: "1Gi"
cpu: "1"
requests:
memory: "300Mi"
cpu: "0.5"
Crie o resource quota abaixo:
apiVersion: v1
kind: ResourceQuota
metadata:
name: mem-cpu-demo
spec:
hard:
requests.cpu: "3"
requests.memory: 1Gi
limits.cpu: "5"
limits.memory: 2Gi
pods: "5"
No exemplo acima podemos criar até 5 pods e a soma dos 5 pods não pode ultrapassar os limites de memória.
Crie abaixo os pods de 1 a 6 e veja que no sexto vai dar erro pois será imposto o quota.
apiVersion: v1
kind: Pod
metadata:
name: web-server-1-6
spec:
containers:
- name: web
image: nginx
A ferramenta permite saber como quanto de capacidade o cluster suporta para uma especificação de pod.
Na linha de comando execute a ferramenta hypercc.
hypercc cluster-capacity --kubeconfig ~/.kube/config --podspec pod-example.yaml --verbose