BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Notícias Como o Airbnb simplificou o fluxo de trabalho do Kubernetes para mais de 1000 engenheiros

Como o Airbnb simplificou o fluxo de trabalho do Kubernetes para mais de 1000 engenheiros

Melanie Cebula, engenheira de infraestrutura da Airbnb, fez uma palestra no QCon Londres [slides em PDF] sobre o ferramental interno e as estratégias que a Airbnb adotou para dar suporte a mais de 1000 engenheiros configurando e implantando simultaneamente mais de 250 serviços críticos para o Kubernetes (com uma frequência de cerca de 500 implantações por dia em média). Um ativador de chave foi usado como uma camada de abstração e geração de configuração do Kubernetes a partir de primitivos de nível superior, usando ambientes padronizados e namespaces (e validações automatizadas sempre que possível). Também foi fundamental a automação de fluxos de trabalho comuns para engenheiros e o uso das mesmas ferramentas em todos os ambientes.

O kube-gen é a ferramenta interna do Airbnb que pode obter os parâmetros de um serviço (definidos em um único arquivo YAML) e gerar a configuração completa do serviço do Kubernetes, adicionando toda a configuração padrão necessária. No passado, o Airbnb usava mecanismos de herança de arquivos para configuração (como os cookbooks do Chef) o que levou a efeitos de falha de infraestrutura em cascata. Portanto, um dos objetivos era reduzir o raio de aumento de possíveis erros usando modelos YAML para configuração de serviço.

O outro grande objetivo do kube-gen era abstrair as complexidades de configuração e ferramentas do Kubernetes para permitir que as equipes de engenharia mantivessem a propriedade de seus serviços, com os níveis de isolamento necessários (parcialmente garantidos pelos namespaces gerados automaticamente baseados em nomes de ambiente padronizados), mas sem uma longa curva de aprendizado. Embora o kube-gen não esteja disponível publicamente, pois aborda o contexto específico do Airbnb, Cebula apontou algumas alternativas de código aberto: helm (gerenciamento de pacotes), kustomize (configuração via herança de arquivos) e kapitan (configuração via modelagem).


Imagem: Arquivos de configuração de serviço no YAML personalizado são traduzidos nos arquivos de configuração necessários do Kubernetes (um conjunto por ambiente definido no YAML personalizado) e aplicados ao cluster do Kubernetes (crédito: Melanie Cebula, Airbnb)

Outras estratégias para promover configurações de serviços homogêneas e fáceis de evoluir incluem a criação de um novo repositório de esqueleto de serviço em um comando, validação no tempo de construção e implantação de arquivos de configuração (não apenas sintaxe, mas também problemas conhecidos em valores fornecidos como nome ou proprietário inválido do projeto) e versionando a configuração de serviço (gerada).

O repositório git de um serviço recém-criado inclui arquivos padrões de aplicativos e de infraestrutura (inclusive para CI/CD), preenchimento automático com padrões e boas práticas (como a escalabilidade automática por padrão ou geração de documentação). As configurações do serviço de controle de versão (com um campo específico no arquivo YAML) permitem marcar versões com problemas (para que elas nunca sejam reimplantadas) - o podem ser problemas no próprio Kube-gen ou em um serviço específico - além de distribuir diferentes versões em diferentes canais (por exemplo, estável vs beta).


Imagem: exemplos de arquivos YAML de configuração de serviço do Airbnb, incluindo um campo de versão (crédito: Melanie Cebula, Airbnb)

O k é outra ferramenta interna do Airbnb. O k é principalmente um invólucro opinativo para kubectl, e que também filtra algumas das repostas verbosas do kubectl. O k também suporta algumas funcionalidades extras, como agrupar a ferramenta kube-gen mencionada anteriormente, e construir/subir as imagens do Docker. O objetivo dessa ferramenta era automatizar fluxos de trabalho comuns, simplificando e padronizando o trabalho de engenharia ao abstrair parte da complexidade das ferramentas do Kubernetes. Mas, também levou os desenvolvedores e engenheiros de infraestrutura a falarem uma linguagem comum e usarem as mesmas ferramentas, o que fortaleceu a colaboração, de acordo com Cebula.

Um fluxo de trabalho típico seria começar com o k generate para gerar arquivos do Kubernetes, depois o k build para construir imagens do Docker e enviar para o registro e, finalmente, implementar para criar os namespaces do Kubernetes e aplicar os arquivos do Kubernetes, aguardando um status de implantação final. Os serviços são criados e implantados da mesma maneira, independentemente do ambiente (ou seja, uma máquina local, CI, preparação ou produção). Também é possível executar diagnósticos que dependem de alguns plugins criados pelo Airbnb: kubectl diagnose e kubectl podevents. O objetivo era automatizar etapas manuais comuns ao depurar um problema de implantação: coletar informações sobre containers não-prontos, localizar eventos de conjuntos relacionados, e obter os registros desses containers.

Finalmente, Cebula mencionou alguns desafios remanescentes para a adoção da jornada Kubernetes do Airbnb, em particular relacionados à migração de milhares de serviços existentes que exigem melhor suporte e escalonamento multicluster (alguns serviços usam centenas de réplicas), manipulando mais serviços com alto nível de memória e movimentando toda a configuração para um modelo de fluxo de trabalho GitOps com controladores personalizados.

Avalie esse artigo

Relevância
Estilo/Redação

Conteúdo educacional

BT