Kubernetes histórias de sucesso em produção. Parte 10: Reddit

Na semana passada , foi anunciado que a partir de agora todos os novos serviços Reddit serão lançados em produção em uma infraestrutura baseada em clusters Kubernetes. Este é um marco significativo no caminho da migração para os K8s de um dos recursos on-line mais populares, e aqui está como ...



Likbez : Até o momento, o Reddit está entre os 20 principais sites globais (e o número 6 nos EUA), de acordo com Alexa . Essa comunidade online de origem americana compreende mais de 400 milhões de usuários ativos (dentro de um mês), 12 milhões de publicações e 2 bilhões de votos por dia.

Sobre por que e como os engenheiros do Reddit chegaram ao Kubernetes, em dezembro passado no KubeCon 2018 ( apresentação + vídeo ) Greg Taylor, chefe do Grupo de Engenharia de Liberação da Project Engineering, Departamento de Infraestrutura.



Por que você veio para Kubernetes?


No início de 2016, o serviço, implementado como um aplicativo monolítico , possuía apenas cerca de 20 engenheiros que formaram 3 equipes, uma das quais é uma espécie de herói da história - a equipe de infraestrutura. No entanto, este ano trouxe grandes mudanças: até o final do ano, mais de 60 engenheiros trabalhavam na empresa (e até o final de 2018, seu número havia aumentado para 200, ou seja, em apenas 3 anos, houve um aumento de 10 vezes na equipe ).

Tais taxas de crescimento rápido colocaram na agenda a irrelevância (ineficiência) da arquitetura monolítica de aplicativos, uma vez que fazer inúmeras alterações em seus vários componentes (por equipes diferentes) tornou-se muito difícil. Reunidos para resolver o problema e considerando várias opções, os engenheiros escolheram o caminho da arquitetura orientada a serviços (SOA) .

Mudando para uma arquitetura de serviço em vez de um grande monólito, o Reddit encontrou um novo problema. A equipe de infraestrutura tornou-se um gargalo nas atividades dos desenvolvedores, que se mostraram muito dependentes dela em diferentes estágios: durante a inicialização dos serviços, durante sua operação contínua, durante a depuração e solução de problemas de desempenho. Como uma solução rápida para o problema, a empresa formou equipes mais auto-suficientes chamadas "orientadas à infraestrutura": os participantes dessas equipes possuíam as habilidades necessárias no campo de operação da infraestrutura, permitindo que eles superassem muitas dificuldades sem esperar pelas ações da equipe de Infraestrutura, que estava sobrecarregada com uma lista interminável de inúmeros desenvolvedores.

No entanto, ainda era uma solução temporária e a prática mostrou que nem todos queriam operar toda a pilha para o serviço:



Como esta situação foi resolvida? A organização introduziu o conceito de proprietários de serviços , que poderiam desenvolver seu serviço desde o início até o fim, implantá-lo cedo e freqüentemente, operar o serviço (incluindo problemas de disponibilidade e desempenho). Mas como conseguir isso?

Em vez de esperar que equipes de engenheiros com habilidades impecáveis ​​combinem serviços de dezenas de tijolos, para muitos dos quais talvez não tenham conhecimento, é necessário oferecer a eles um caminho bem pensado e predefinido para levar serviços à produção, afetando um mínimo de tecnologia. Isso evitará que os engenheiros precisem aprender várias novas tecnologias e ferramentas, que podem ser realmente muitas:



"Para colocar essa idéia em prática, precisávamos" agrupar "nossos conhecimentos, processos, melhores práticas e muito mais em uma forma mais acessível".

InfreRedd - Kubernetes no Reddit


Foi assim que surgiu o InfreRedd, o produto de infraestrutura interna do Reddit, baseado no Kubernetes.

Como as três necessidades dos proprietários de serviços especificadas em sua definição foram atendidas?

1. Desenvolvimento


O padrão para desenvolvimento na organização não indica a escolha de uma linguagem ou estrutura específica, mas define a "forma" geral do serviço, à qual deve corresponder. O padrão - uma especificação de serviço independente da linguagem de programação - inclui a definição de um protocolo RPC, trabalhando com segredos, retornando métricas, rastreabilidade e o formato para emissão de logs. Um exemplo da implementação de uma especificação desse tipo em Python pode ser encontrado no projeto da placa de base , que, no entanto, dificilmente será útil a alguém para uso real, mas pode ser uma inspiração.

Além disso, foram criados materiais para um início rápido ao escrever novos serviços: stubs de código para diferentes idiomas (Python, Go, Node), assim como Dockerfile, configurações para CI e até Helm charts.

Para ajudar no desenvolvimento local, a escolha dos engenheiros do Reddit recorreu ao produto do Google - Skaffold , que oferece aos desenvolvedores um ciclo de leitura através de edição → reconstrução → atualização, que:

  • não requer conhecimento aprofundado de Kubernetes;
  • o mais próximo possível da produção;
  • permite usar gráficos / imagens padrão;
  • e - diferentemente do Minikube usado anteriormente - o trabalho com o Skaffold não requer grandes recursos dos laptops em funcionamento (porque a implementação é feita em clusters remotos).

2. Implantar


O Reddit usa a plataforma de entrega contínua Drone para executar testes e criar artefatos (geralmente imagens do Docker).

Kubernetes originalmente usou o plug-in Helm para Drone para implantação, mas rapidamente os engenheiros chegaram à conclusão de que Helm não estava satisfeito com isso porque queriam um sistema que "entendesse melhor o estado de objetos criados ou atualizados" e a automação adicional dos processos de implantação levou a a necessidade de uma solução que possa apelar para as ferramentas usadas e pausar a reversão, se houver falhas ou problemas de desempenho.

Como resultado, o Spinnaker foi escolhido para orquestrar a implantação no Kubernetes. Para ele, foram criados modelos para pipelines típicos (no Jsonnet). Em seguida, gráficos Helm são gerados, que já são lançados no Kubernetes pelo Spinnaker. Os usuários recebem informações sobre o andamento da implantação e ajudam no diagnóstico em caso de problemas. Aqui está como é um processo típico de implantação na preparação / produção de uma maneira muito geral:



3. Operação


Em primeiro lugar, como são compartilhadas as obrigações dos proprietários de serviços e da equipe de infraestrutura?

  • Proprietários de serviços : entenda o básico do Kubernetes, implante e opere seus serviços;
  • Equipe de infraestrutura : suporte à operacionalidade (implementação, suporte, dimensionamento) de clusters Kubernetes, fornecendo a eles todos os recursos necessários e também aconselha os engenheiros da organização no design de serviços confiáveis, produtivos e tolerantes a falhas (em particular, sessões de treinamento são realizadas regularmente, cujos registros são distribuídos em toda a empresa).

Os proprietários do serviço são limitados em seus direitos. No entanto, para obter acesso à produção (para diagnosticar um problema), é possível solicitar (por meio de um utilitário especial do console) um token temporário que lhes conceda direitos completos sobre seus espaços de nomes.

Outro ponto importante da operação é a minimização de possíveis danos que podem advir de diferentes fontes. Aqui está o que o Reddit faz para isso:



Para facilitar a vida dos engenheiros envolvidos na operação, também estão envolvidos:


Status do Kubernetes no Reddit


As estatísticas gerais sobre a infraestrutura do Kubernetes na época de dezembro do ano passado foram as seguintes:

  • 7 grupos (de 3 a 6 novos serão adicionados nos próximos meses);
  • de um terço a metade de todas as equipes de engenharia interagem com o Kubernetes;
  • cerca de 20 serviços Reddit estão em produção com K8s;
  • em um dia útil, ocorrem de 10 a 20 implantações desses serviços nos K8s.

A disponibilidade do InfreRedd com o Kubernetes para toda a organização foi planejada para o primeiro trimestre de 2019, o que implicava a implantação de qualquer novo serviço em produção atendido pelo Kubernetes. (Naquele momento, isso acontecia em cerca de 3 de 4 novos serviços.)

Conforme mencionado no início do artigo, esse marco foi alcançado com sucesso apenas na semana passada:



Outros artigos do ciclo


Source: https://habr.com/ru/post/pt441754/


All Articles