https://github.com/mycloudlab/handson-cluster-limits
https://github.com/mycloudlab/handson-cluster-limits
Last synced: 5 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/mycloudlab/handson-cluster-limits
- Owner: mycloudlab
- Created: 2020-07-15T00:17:26.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2020-07-15T11:37:32.000Z (almost 6 years ago)
- Last Synced: 2025-04-09T14:21:32.166Z (about 1 year ago)
- Language: Dockerfile
- Size: 3.91 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Exercícios do handson de gerenciamento de limites do cluster
Antes de qualquer exercício faça o login no cluster no terminal para execução dos comandos OC.
# 1.1 Definindo um pod com limites
Crie o pod abaixo:
```yaml
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"]
```
# 1.2 Definindo um pod com mais memoria do que o limite
Crie o pod abaixo:
```yaml
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"]
```
# 1.3 Definindo um pod com limite de CPU
```yaml
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:
```bash
oc project seu-namespace
oc adm top pod
```
A saida deve ser algo como abaixo:
```bash
NAME CPU(cores) MEMORY(bytes)
memory-demo-seu-usuario 1000m 2Mi
```
# 2.1 definindo um limit range
Remova o limit range atual
```bash
oc delete limitrange limits-core-resource-limits
```
e crie o limit range abaixo:
```yaml
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:
```yaml
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:
```yaml
...
...
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.
```yaml
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"
```
# 3.1 Resource Quota
Crie o resource quota abaixo:
```yaml
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.
```yaml
apiVersion: v1
kind: Pod
metadata:
name: web-server-1-6
spec:
containers:
- name: web
image: nginx
```
# 4.1 Exercício ferramenta hypercc
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.
```bash
hypercc cluster-capacity --kubeconfig ~/.kube/config --podspec pod-example.yaml --verbose
```