Uso declarativo (com .yamls) Manter tudo em um repositório no GitHub
Pode ser com kind/minukube
- Configurar metric-server e testar (kubectl top nodes;): https://github.com/kubernetes-sigs/metrics-server
- Adicionar label nos nós (environemnt=develop)
- Instalar o kyverno pra policy as a code: https://kyverno.io/docs/installation/methods/
- Criar uma política do Kyverno para negar imagens com a tag
latest
: https://kyverno.io/policies/best-practices/disallow-latest-tag/disallow-latest-tag/
Exemplo de API que pode usar: https://github.com/rameshsunkara/go-rest-api-example
- Fazer build da API e fazer push pra registry (ECR) - com CI/CD
- Criar Namespace com Quotas
- Criar um Deployment e um Service (com NodePort e se possível, com Ingress e/ou LoadBalancer) pra fazer o deploy da imagem no cluster
- Adicionar Requests e Limits pra aplicação
- Adicionar Liveness e Readiness probes
- Adicionar NodeSelector para a aplicação executar apenas nos nós onde environment=develop
- Adicionar uma persistência pra aplicação (PersistentVolume/PersistentVolume/Claim)
- Adicionar variáveis de ambiente via ConfigMap e expõe pra dentro da aplicação
- Instalar o Grafana: https://github.com/grafana/helm-charts/tree/main/charts/grafana.
- Via Helm, instalar o chart do Loki: https://github.com/grafana/helm-charts/tree/main/charts/loki-stack e adicionar como datasource do Grafana pra visualizar os logs em uma dashboard.
- Por padrão o Loki usa o promtail (como DaemonSet) pra coleta de logs, trocar para fluentbit e ver se tá tudo certo.
- Instalar o Prometheus e adicionar como Datasource do Grafana
- Criar dashboards para métricas coletas pelo Prometheus.
- Criar alertas para a aplicação (pode se basear nos Golden Signals), uma referência: https://sre.google/sre-book/monitoring-distributed-systems/.
- Configurar o AlertManager pra enviar notificações dos alertas criados por email.
- Instalar o Argo CD via kubectl (ou Helm se preferir): https://argo-cd.readthedocs.io/en/stable/getting_started/
- Configurar o Argo: diminuir o tempo de sync, conectar um repositório do GitHub
- Criar um Project de develop e uma Application pra API REST criada
- Configurar o Argo Rollouts pra definir um modelo de deployment: https://argo-rollouts.readthedocs.io/en/stable/.