Configurando auto escalonamento usando gitlab com Auto DevOps

Como usar o helm requests e limits com Auto DevOps do Gitlab

Já falei bastante aqui no blog sobre o Auto DevOps. O que poderíamos fazer para permitir que nossas aplicações (que já fazem uso de todas as praticas dos 12 fatores, rodam na nuvem em clusters de orquestração de container, possuem capacidade de tolerância a falha) possam chegar ao próximo passo e escalar de forma inteligente ainda fazendo uso do Auto DevOps?
- Agora é o momento de fazer com que nossa aplicação use apenas o recurso que ela realmente necessita e deixe o resto para quem quiser usar ou para eventuais sobrecargas que exijam "auto escalonamento" :)



Para aqueles que usam o auto DevOps do gitlab e já perceberam que nem tudo é configurável, apresento-lhes a variável HELM_UPGRADE_EXTRA_ARGS do .gitlab-ci.yaml. Essa varável nos permite apontar um arquivo para modificar outros valores dos nossos arquivos yaml gerados pelo Auto DevOps. E um desses valores (que vou falar aqui), é o resources.

Para usa-la, basta inclui-la em variables no .gitlab-ci.yaml:
variables:
  - HELM_UPGRADE_EXTRA_ARGS: "--values helm-values.yaml"
*percebam que passei o nome de um arquivo depois de "--values"

Certo, seguem os passos:
- Junto ao arquivo .gitlab-ci.yaml, vamos criar um arquivo chamado: helm-values.yaml
- Dentro do arquivo helm-values.yaml, vamos incluir as informações de resources (recurso que minha aplicação tem disponível para trabalhar e o limite acima disso).

Dentro do helm-values.yaml:
resources:
  requests:
    memory: "150Mi"
    cpu: "50m"
  limits:
    memory: "195Mi"
    cpu: "65m"
*para encher linguiça, vou apenas deixar aqui a explicação e sugiro que você leia antes de brincar com requests e limits: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#resource-requests-and-limits-of-pod-and-container

Outra forma de configurar o upgrade helm

É possível usar um nome e path padrão. Se usado, o gitlab entende e não precisamos colocar a variável no .gitlab-ci.yaml. para isso, basta criar o arquivo helm: .gitlab/auto-deploy-values.yaml com o mesmo conteúdo do a helm-values.yaml mencionado acima.

Variável criada e arquivo helm preparado

Faremos o deploy via Auto DevOps e dessa forma, possibilitamos nosso cluster escalar nossa aplicação caso ela atinga determinadas métricas (podendo crescer ou diminuir) de acordo com a demanda.

Para configurar o auto scale no seu objeto deployment, faça o seguinte:
- kubectx [nome do cluster]
- kubens [nome do namespace]
- kubectl get deployment
*aqui irá listar seus deployments
- kubectl autoscale deployment [nome do deployment] --min=1 --max=3 --cpu-percent=85
*min, max e cpu são apenas exemplos. Você pode configurar de acordo com sua necessidade.

É isso o/ flwss

Ref:. https://gitlab.com/gitlab-org/gitlab-foss/issues/65497