Entendendo Kubernetes - Introdução

Iniciando nosso guia de Kubernetes que vai te ensinar conceitos importantes de infraestrutura!

Entendendo Kubernetes - Introdução
itexto e Kubernetes

Por muito tempo Kubernetes (famigerado "k8s") me pareceu uma solução complexa demais para nossos projetos e impensável para casos menores. Mudei de ideia quando percebi que podia usar a tecnologia como material didático para ensinar à nossa equipe conceitos essenciais sobre infraestrutura e gestão de configuração e mudança.

Temos projetos que lidam com milhões de requisições por hora e nunca precisaram do "k8s". Outros projetos recebem no máximo 100 ao longo do dia (porém todas as 100 vitais). Sabe o que notei? Kubernetes não seria uma bazuca para estes projetos menores por mais que sempre digam o contrário. Hein?

💡
Não vou explicar o porquê disto neste post, mas sim em post futuro.

É... to jogando um cliffhanger no início da série. "Inovando".

Então, o que me fez ver o Kubernetes com interesse?

  • Cenários on premise começam a se mostrar importantes (de novo).
    • O custo cloud , questões envolvendo compliances e gestão de risco (por menor que seja o risco, o cenário geopolítico está em nosso radar).
  • Apesar de complexo vi que não é tão difícil quanto parece.
    • Por anos ouvi "é uma bazuca pra projetos pequenos, é para situações de alta complexidade e escalabilidade". O que respondo hoje: talvez.
    • Sim, é complexo, mas não tanto.
  • Mais importante: pensei como ferramenta de aprendizado para nossa equipe.

Usando o Kubernetes como guia meu objetivo é apresentar uma série de conceitos de infraestrutura:

  • O conceito de ambiente (parece óbvio, mas não é).
    • O que é um componente (aka "seu software ou sistema")?
    • Como o ambiente e seus componentes são configurados?
      • Variáveis de ambiente?
      • Como lido com configurações secretas, como credenciais de acesso?
  • O que é disponibilidade?
    • O que é alta disponibilidade? Como garanto que meus componentes estarão disponíveis a maior parte do tempo?
  • Como disponibilizo o acesso aos meus componentes?
  • Como implanto um sistema?
  • O que é escalabilidade? Horizontal, vertical? Hein???
  • O que é orquestração?

Este é o primeiro post de um guia no qual vou te apresentar o Kubernetes e, junto, todos os pontos que mencionei acima (e outros que podem surgir durante o processo).

O que você precisa saber

Pra tirar maior proveito do que você lerá aqui e maximizar o meu tempo, preciso que você já saiba o que é um contêiner. Há várias implementações deste conceito, a mais popular de longe é o Docker.

Não sabe Docker? Então seguem algumas fontes pra você aprender rápido.

Recomendo aprender direto na fonte. Visite o "Get started" oficial do Docker e siga o guia ( https://docs.docker.com/get-started/ ). Foque sua atenção na seção "Docker concepts". DE LONGE a parte mais importante.

Curte vídeo? Docker Crash Course for Absolute Beginners - TechWorld with Nana (aprendi k8s no canal dela inclusive, que é maravilhoso)

💡
Um alerta sobre mim

Não sou um expert em Kubernetes, pelo contrário!
Vou descrever apenas o uso mais simples da ferramenta para que você possa dar seus primeiros passos, e é claro que vão surgir outras formas (possivelmente melhores) sobre como executar estas ações.

Um alerta sobre a periodicidade dos posts

Sou uma pessoa cada vez mais ocupada, então não tenho como garantir que vou conseguir escrever tudo de uma vez, nem que vou conseguir uma periodicidade decente (semanal, por exemplo).

A boa notícia é que to adorando Kubernetes, o que me motiva a continuar.

Orquestração?

Foto de Joseph Eulo: https://www.pexels.com/pt-br/foto/homens-sentado-entretenimento-diversao-5536373/

"O Kubernetes é uma ferramenta de orquestração de contêineres". Você lê isto pela primeira vez e pensa: hein? A melhor analogia seria dizer que o Kubernetes é um sistema operacional que gerencia seus contêineres tal como o do seu desktop que gerencia os processos e recursos usados pelos mesmos.

Se você está dando seus primeiros passos com Docker duas ações são realizadas:

  • Você inicia o contêiner.
  • Define os recursos que ele vai ter acesso (volumes ("sistema de arquivos"), memória, CPU)
    • Quando você se preocupa com este segundo aspecto é sinal de que já está caminhando para

O Kubernetes vai além: ele vai ser o responsável por:

  • Definir quando um contêiner é iniciado e finalizado.
    • Famigerado "ciclo de vida".
  • Definir e tentar garantir os recursos disponíveis para os contêineres: quanta memória estará disponível, CPU...
  • Quantas instâncias serão iniciadas.
    • E nisto também ajuda a definir a disponibilidade da plataforma, garantindo que o número mínimo de instâncias será garantido pelo k8s.
  • O controle de escalabilidade: qual o número mínimo e máximo de instâncias que devem ser criados de acordo com a carga que o sistema recebe.
    • Indo além: o k8s também vai gerenciar novas máquinas (nodes) que você pode plugar no seu ambiente de produção para que mais recursos estejam disponíveis para os seus contêineres.
  • Como os contêineres recebem suas configurações.
    • Inclusive como lidar com configurações sensíveis, tal como credenciais.
  • Configurar o sistema de arquivos que estará disponível para estes contêineres (os "volumes" que você viu no Docker, mas definidos de uma forma BEM mais interessante).
  • Como seus contêineres estarão acessíveis ao mundo externo.
    • É o conceito de "service", que foi de onde tirei o insight pra usar k8s como ferramenta pedagógica de infraestrutura.
      • (é claro que esta minha ideia não é original)

O k8s cuida de tudo isto e mais algumas coisas que provavelmente esqueci de mencionar. Talvez por serem tantos aspectos é que tenhamos esta impressão (justificada) de complexidade por trás da ferramenta.

Já viu o Docker Compose?

A Photo by Strapi

É importante lembrar que o k8s não é a única ferramenta de orquestração de contêineres, mas é de longe a mais popular e influente. Entre desenvolvedores uma alternativa que também é muito popular é o Docker Compose.

Se você nunca usou outra ferramenta de orquestração de contêineres minha sugestão é que você pare agora e experimente o Docker Compose. Nós o usamos no ambiente de desenvolvimento porque encapsula todas as dependências externas que os sistemas que desenvolvemos precisam para serem executados localmente.

💡
É possível usar o Docker Compose em produção, mas não é ideal.

Funciona bem inclusive: a questão é que não vai te garantir alta disponibilidade (especialmente durante processos de implantação) e oferece bem menos recursos.

Com isto conseguimos iniciar diversos serviços de suporte, tais como:

  • O banco de dados
  • Redis
  • Simuladores de serviços cloud, tal como S3 Ninja, Localstack, etc.

Cada um com suas próprias configurações, volumes, etc.

Não conhece Docker Compose?

Minha sugestão é que você primeiro experimente o Docker Compose e depois volte aqui pra continuar. Quer dar os primeiros passos? O canal da Nana pode te ajudar.

Prefere a fonte primária? Toma ela aqui: https://docs.docker.com/compose/

Próximos passos

Meu objetivo aqui foi iniciar este projeto de treinamento em infraestrutura usando o Kubernetes como guia. Quis te passar uma ideia do que é o k8s e esta ideia de orquestração de contêineres.

Daqui a pouco volto mostrando alguns conceitos essenciais por trás do k8s na prática com um tutorial BEM prático pra você ver na prática os ganhos do Kubernetes em uma aplicação... NADA complexa. :)

Até lá!

Mantido por itexto Consultoria