O Openshift permite que você limite a quantidade de recursos que serão disponibilizados para sua aplicação. Antes de continuarmos esse assunto, é preciso esclarecer duas nomenclaturas
Request
seria o equivalente ao valor mínimo de um determinado recurso. Esse campo é muito importante para o scheduler do Openshift. Toda vez que uma nova aplicação é criada, o Openshift escolhe automaticamente em qual nó do cluster ela irá rodar. Ele faz isso utilizando o valor do request como base para descobrir qual node tem o valor do request disponível.
Limit
****é o valor máximo de um determinado recurso que o Openshift permitirá ser utilizado. Esse campo também é importante pois evita que sua aplicação possa consumir mais recurso do que foi alocado. Situações como Out of Memory acabam sendo minimizadas quando este valor está configurado corretamente.
- Garanteed
- Bustable
- Best Effort
- Milicores
- GiB/MiB
Podemos limitar a quantidade de CPU e memória que nossa aplicação irá consumir. Para isso, precisamos acessar:
- Selecione no menu vertical esquerdo a opção Application -> Deployments
- Na tabela a seguir, clique em workshop-ocp
- No menu lateral superior, clique em Actions -> Edit Resource Limits
- Preencha os valors conforme abaixo
- CPU - Request: 200 milicores
- CPU - Limit: 200 milicores
- Memory - Request: 100 MiB
- Memory - Limit: 100 MiB
Nesse caso, estamos falando para o Openshift que nossa aplicação precisa de 20% (200 milicores) de 1 CPU livre para ser criada - somente nodes com essa condição receberão a aplicação - e que utilizará no máximo também 20% de 1 CPU.
O mesmo se aplica a memória. Openshift irá procurar nodes com 100 Megas de memória livres para colocar a aplicação e ela somente poderá usar 100 Megas de memória.
Nesse caso, nossa aplicação se encontra no QoS Garanteed.
Clique em Save e o Openshift irá iniciar um novo deploy da nossa aplicação.
Na página de metricas, agora vocês podem ver que existe um novo gráfico indicando o quanto de recurso temos disponível.
Testando o uso dos recursos
Vamos agora executar um processo dentro do container que consuma todo recurso possível de memória e CPU. O comando abaixo faz exatamente essa tarefa:
while :; do _+=( $((++__)) ); done
AVISO: Use o comando acima com cuidado uma vez que ele pode travar o sistema operacional se utilizado em ambientes sem restrições de recurso.
Para executar esse comando dentro do container, vamos primeiro acessar nossa aplicação remotamente com o comando abaixo:
oc rsh <nome do pod>
Podemos acompanhar o uso de recursos da aplicação pela Web Console ou pela linha de comando por meio do docker stats
.
Primeiro vamos achar qual é o nosso container. Para isso, executamos:
docker ps
Agora que achamos nossa aplicação, basta executar:
docker stats <id do container>
O uso de CPU e memória não devem passar do que limitamos no início desse lab.