do Vax’ildan e da Keyleth Staff Site Reliability Engineer @ iFood com foco em K8s 13+ anos na área de TI (Suporte/SysAdmin/DevOps/SRE/Platform..) DM de D&D nas horas vagas (ou seja, quase nunca 🫠) Usuário de Emacs com keybindings do VIM 4
primórdios fazendo tudo isso que vai ser mostrado aqui acontecer Em especial ao @daniel.requena que fez essa apresentação antes de mim e eu to usando a mesma ideia, mesmos slides (quase…) 6
de Kubernetes de forma geral, como EKS, GKE, AKS , KubeADM, Cluster-API, Kops, etc… Distribuição iFood: Padronização de instalação e customização de pacotes. Um conjunto testado e homologado de pacotes de softwares que quando instalados proveem todas (ou quase todas) as funcionalidades para a sua necessidade. 7.2
O problema Problemas Atualização de valores demorada Reconciliação Multiplas instalações da mesma aplicação Falta de customização Zero testes (A nível de aplicação e a nivel de cluster) 10.6
O problema Problemas Atualização de valores demorada Reconciliação Multiplas instalações da mesma aplicação Falta de customização Zero testes (A nível de aplicação e a nivel de cluster) Demorado 10.7
O problema Problemas Atualização de valores demorada Reconciliação Multiplas instalações da mesma aplicação Falta de customização Zero testes (A nível de aplicação e a nivel de cluster) Demorado Super centralizado 10.8
O problema Problemas Atualização de valores demorada Reconciliação Multiplas instalações da mesma aplicação Falta de customização Zero testes (A nível de aplicação e a nivel de cluster) Demorado Super centralizado Escalabilidade 10.9
exatamente é o Helmfile TL;DR: Um wrapper em cima do Helm que usa anabolisantes, ou simplesmente um Chart que cuida de outros Charts As principais características são: Templates usando Sprig incluindo o values.yaml 19
arquivos de valor (S3, Git, OCI, Local…) Transforma tudo em Helm Release (mesmo se passar manifestos de Kustomize) Tem separação de dependencias por Release Conceito de ambientes (dev/prod) Integração com Backend de Secrets (Vault, AWS SSM) 20
ferarmentas pra automatizar, validar e testar os nossos pacotes antes de eles instalados em ambientes produtivos vCluster - Clusters efêmeros isolados 34.1
ferarmentas pra automatizar, validar e testar os nossos pacotes antes de eles instalados em ambientes produtivos vCluster - Clusters efêmeros isolados Pluto - Verificação de depreciação de versões de API do K8s 34.2
ferarmentas pra automatizar, validar e testar os nossos pacotes antes de eles instalados em ambientes produtivos vCluster - Clusters efêmeros isolados Pluto - Verificação de depreciação de versões de API do K8s Terratest - Testes unitários e de integração para cada pacote 34.3
terratest GitLab CI - Todo o fluxo é automatizado pelo CI RenovateBot - MRs automáticos com novas versões dos charts públicos e privados Semantic Release - Gerador de Releases (GitLab CI Release, Git Tags e CHANGELOG) automáticos baseados em commit message 35.3
output, &service) assert.Equal(t, "external-dns", service.Name, "service name should be external-d assert.Equal(t, v1.ServiceType("ClusterIP"), service.Spec.Type, "service type sh assert.Equal(t, "http", service.Spec.Ports[0].Name, "service port name should be assert.Equal(t, intstr.IntOrString(intstr.IntOrString{Type: 1, IntVal: 0, StrVa assert.Equal(t, int32(7979), service.Spec.Ports[0].Port, "service port should be 37
cluster usando vCluster com a versão de Kubernetes suportada pelo time Após o vCluster no ar, os testes são rodados da mesma forma que os unit test go test -timeout 4h -v ./integration/ 39
um runner customizado do RenovateBot todo o domingo O runner verifica quais repositórios dos pacotes tem o arquivo renovate.json Os repositórios que tiverem, vão ser verificados pela ferramenta e caso exista alguma versão nova de chart/imagem docker o bot irá abrir um novo MR 40
Não é tão simples achar os valores utilizados para determinado cluster (cluster -> distribuição -> pacote -> chart) Atualizações automatizadas de versão em clusters após todos os testes passarem 42.3