Seu guia da jornada Kubernetes

João Brito
7 min readNov 29, 2022

--

Kubernetes é um sistema open source lançado pelo Google em 2014 para automatizar o deploy, a escalabilidade e o gerenciamento de aplicações e está presente na infraestrutura de 90% das empresas na lista da Fortune 500. Sua velocidade de adoção foi puxada pela necessidade de desenvolver e gerenciar aplicações de forma mais eficiente e pelas iniciativas de transformação digital e modernização do portfólio de aplicações nas empresas.

Porém, Kubernetes não é uma tecnologia simples de usar ou de operar, ao contrário, ela é bem complexa. Isso não diminui seu valor, pois sua complexidade está ligada ao fato dela tocar em muitas partes do processo de gerenciamento de infraestrutura e aplicações. Estes aspectos são exatamente onde estão os benefícios já que, Kubernetes, quando bem configurado e usado com a estratégia correta, elimina o “pedágio” de gerenciar infraestrutura e aplicações do seu dia a dia. Na Getup chamamos isto de infraestrutura invisível.

Se você é CTO/CIO e está no momento de inovação, transformação digital e pensando em mover suas aplicações para Kubernetes, este é um guia pensado para ajudá-lo a aumentar suas chances de sucesso.

Por que você está adotando Kubernetes?

Usar o Kubernetes deixou de ser uma questão de “Se” e sim de “Quando”. O uso de Kubernetes, configurado de forma correta, pode ter um impacto gigantesco nas organizações. A plataforma proporciona um ambiente pronto para atender o dinamismo do desenvolvimento de software atual.

Idealmente, a decisão de mudança de qualquer plataforma tecnológica (na ausência de um termo melhor) deve ser feita considerando dois pontos: 1. Se temos os pré-requisitos necessários para 2. Colher os benefícios gerados pela mudança.

Dito isso, os principais pré-requisitos para uma jornada bem sucedida com Kubernetes passam por:

  1. Suas aplicações são “compatíveis”? (aqui temos um artigo cobrindo esse tópico). Você pode rodar aquele monolito Java no Kubernetes e obter algumas vantagens, é verdade. Porém, os maiores benefícios só estão disponíveis para as aplicações com arquitetura de microsserviços, stateless, capazes de escalar horizontalmente…
  2. Ferramentas e processos para deploy automatizado. O Kubernetes oferece um ambiente perfeito para ganho de produtividade e compartilhamento de recursos, tanto no desenvolvimento quanto na operação. Seus desenvolvedores podem fazer o deploy das aplicações manualmente, porém a experiência será prejudicada. Provavelmente seus desenvolvedores irão odiar o Kubernetes dada a complexidade com que terão de lidar, indo contra o objetivo principal aqui: desenvolvedores mais produtivos. Considere investir um tempo em CI/CD (Continuous Integration e Continuous Delivery), GitOps, GitLab, assim como em revisar seus processos para possibilitar que uma aplicação chegue à produção de forma automática.
  3. Kubernetes irá de fato melhorar a velocidade de entrega / experiência de meus clientes / ou outro benefício? Muitas empresas estão entregando software com grande velocidade usando Kubernetes, isso é verdade, ainda assim é válido se perguntar se este será seu caso. Muitos fatores podem contribuir para desacelerar esse processo de evolução e ganho de eficiência, então antes de seguir com a leitura e explorar quais são eles, vou reformular a pergunta: melhorar sua velocidade de entrega irá de fato melhorar seu negócio? Kubernetes é a resposta caso você esteja usando microsserviços, precise escalar horizontalmente para responder picos e demandas sazonais ou para ciclos rápidos de desenvolvimento para validar hipóteses de um novo produto. Se não é este seu cenário, é provável que você não precise de Kubernetes.

Sua infraestrutura tem os atributos necessários para rodar Kubernetes?

Iniciar Kubernetes com o pé direito passa por ter uma boa fundação e a infraestrutura onde ele irá rodar é peça importante.

Conseguir provisionar máquinas, rede, armazenamento, DNS, load balancers, de forma automática, versionada (IaC) e com esses recursos acessíveis via API é essencial para alcançar a experiência e velocidade que sua empresa precisa.

Se você está subindo Kubernetes na nuvem, o que é fortemente recomendado, essas capacidades já estão instaladas. No entanto, você precisa explorá-las através de formas modernas para que a agilidade e eficiência sejam garantidas. Use ferramentas de IaC, como o Terraform, por exemplo, para não só ter visibilidade sobre sua infraestrutura como também simplificar processos de auditoria, compartilhamento das “receitas” dessa infraestrutura e inclusive na criação de planos de Disaster Recovery.

Se tiver no on-premise e não tiver as capacidades citadas instaladas e estáveis, rodar e manter o Kubernetes será desafiador para o seu time.

Você tem o tempo necessário para gerenciar Kubernetes?

Ainda que você escolha por um Kubernetes gerenciado (fortemente recomendado), como Google GKE, AWS, EKS ou Azure AKS, a sua equipe ainda terá de investir uma boa quantidade de tempo mantendo seus clusters.

Um Kubernetes gerenciado facilita o começo e a acompanhar o ciclo acelerado de atualização para novas versões. Porém, as atividades envolvidas em manter ou gerenciar ambientes em produção vão muito além das funcionalidades oferecidas pelo “gerenciado”. Atividades que estarão sob a gestão do seu time:

  • Ter um plano para as atualizações. Embora o Kubernetes gerenciado deixe disponível novas versões e patches, sua equipe ainda terá que aplicá-las nos ambientes e esse procedimento pode impactar na disponibilidade de algumas aplicações. Certas atualizações impactam inclusive na descontinuação ou alteração de componentes do Kubernetes que, numa eventual atualização, envolverá também o time de desenvolvimento. Atualizar o Kubernetes vai além do Kubernetes, as aplicações podem ficar indisponíveis durante o processo por não seguirem determinadas melhores práticas Cloud Native, como quantidade de réplicas ou até mesmo o uso de componentes básicos do Kubernetes como P.D.B.
  • Monitoramento para o Kubernetes e aplicações. Monitoramento em Kubernetes ou qualquer sistema distribuído, tende a ser mais complexo, pois requer uma estratégia que vá além dos 4 Golden Signals. Você precisa pensar em observabilidade, em como irá coletar métricas das aplicações e onde irá plugá-las, se em uma solução proprietária ou open source. Temos diversas opções disponíveis como Loki, Prometheus, Grafana, NewRelic, Datadog, Sysdig, OpenTelemetry. Encontrar a melhor para seu cenário, cuidar da compatibilidade e integração delas irá demandar um tempo e expertise considerável. Vale conferir nossa maratona de observabilidade em formato de podcast.
  • Abordagem para segurança. Segurança em ambientes Kubernetes ou Cloud-Native requer uma abordagem específica dado o dinamismo e velocidade das mudanças. Velocidade de entrega ou múltiplos deploys quer dizer que você tem diferentes versões indo para produção, que podem conter falhas que não estavam presentes na versão anterior. Você pode montar uma operação descentralizada, conhecida como “You Build It You Run It”, dando mais autonomia para as equipes, porém seu baseline de segurança ou melhores práticas podem se perder ao longo do tempo. Vale investir um tempo pensando e definindo um conjunto de regras, de como se dará o acesso aos ambientes pelos desenvolvedores e quais as políticas de uso: de onde podem vir as imagens, scan de segurança, desde o código, passando pelas imagens no repositório, assim como em tempo de execução (runtime). Por fim, faça uso de admisssion controllers para forçar que as melhores práticas estejam sendo seguidas, e se possível tenha uma ferramenta que alerte caso não estejam.
  • Disponibilidade (backup). Pode parecer meio óbvio, afinal, disponibilidade é importante em qualquer cenário, porém com Kubernetes lidamos com uma coisa chamada densidade. É comum haver uma grande concentração de aplicações ou microsserviços em um único cluster Kubernetes, logo, a perda de um único ambiente pode ter um impacto significativo na sua operação. Sua equipe precisará pensar em uma arquitetura (tanto para o Kubernetes quanto para as aplicações) capaz de suportar perdas de infraestrutura, assim como uma estratégia de backup capaz de restaurar desde um namespace ou até um cluster inteiro. Uma boa ferramenta para backup de ambientes Kubernetes é o Velero.

Você tem o tempo necessário para que seu time ganhe experiência suficiente para gerenciar ambientes em produção?

Para colher de forma significativa os benefícios do Kubernetes você precisará de tempo e investimento em treinamento, para subir o nível de todos nas equipes de desenvolvimento e operações. Aqui um planejamento, visão de longo prazo e apoio são fundamentais para transformar a tecnologia em resultados.

Lembre-se, transformações significativas levam tempo. A AWS investiu um bom tempo e envolveu mais de 100 equipes para substituir os bancos de dados Oracle, enquanto a Netflix levou 7 anos para migrar suas aplicações para a nuvem.

É compreensível e até positivo certa ansiedade em fazer as mudanças, principalmente quando o assunto é acabar com aplicações legadas. Então aqui vai uma curiosidade que talvez fará você se sentir melhor: saiba que no Japão 1900 procedimentos do governo ainda requerem o uso de floppy disk. Mesmo que fora do tópico Kubernetes, a anedota é válida.

Como você fará o deploy das aplicações?

Não só a gestão do Kubernetes precisa ser automatizada (Terraform). Como você fará o deploy das aplicações terá um efeito direto em obter ou não os benefícios esperados. Você pode optar por fazer deploy manual, mas a experiência estará longe daquela que você imaginou, além de ficar extremamente difícil para os desenvolvedores, o que normalmente resulta em falhas na adoção ou shadow IT. Tenha no seu plano o uso de continuous delivery ou melhor, continuous deployment. Dê uma olhada em Gitlab, Azure Devops e ferramentas Gitops como Flux, ArgoCD, GitlabCI, Github Actions.

Gerenciar Kubernetes é fator de diferenciação?

Essa é uma pergunta estratégica, afinal gerenciar Kubernetes pode consumir bastante energia das equipes. Manter os ambientes atualizados, ter um plano de melhoria contínua da infraestrutura, da segurança, capacitação, disseminação de conhecimento e o turnover serão itens constantes na pauta.

Você pode olhar para Kubernetes da mesma forma que olhamos para a infraestrutura de datacenter (on-premise) onde, na maioria dos segmentos, já não faz nenhum sentido ter, pois hoje temos algo muito mais alinhado com as necessidades das empresas: Cloud Computing.

Quer avançar nesta jornada? Fale com um especialista Kubernetes.

--

--

João Brito

Blog moved to getup.io/blog - A devops enthusiast. Trying to establish myself in this crazy market that until yesterday called me a sysadmin.