Entenda o que é Kubernetes e como ele é útil no desenvolvimento de sistemas

Se você não é da área de tecnologia, provavelmente nunca ouviu falar em Kubernetes. Mas ele é importante e, por isso, resolvemos te contar do que se trata e como ele funciona neste post.

Também chamados de K8s, o Kubernetes é um orquestrador de contêineres criado pelo Google em 2015. Ele facilita o processo de gerenciamento de múltiplos contêineres, bem como seu processo de publicação, scale e load balance das aplicações. 

Embora tenha sido lançado há vários anos, muitas empresas deixam de utilizá-lo e sofrem com arquiteturas legadas. No caso da UX Solutions, ele foi um grande facilitador para melhorar a disponibilidade de nossas aplicações.

O trabalho em containers dentro da TI vem se destacando muito por ser extensível e de código aberto – o que facilita a configuração declarativa e a automação. O Kubernetes tem também um grande ecossistema de crescimento rápido, e seus serviços, suporte e ferramentas estão amplamente disponíveis. Tudo isso faz dele muito interessante no desenvolvimento de sistemas.

Como o Kubernetes é utilizado nos sistemas da UX Solutions

Todas as nossas aplicações web foram migradas para o Azure Kubernetes Services (AKS) no último ano. Isso melhorou drasticamente o nosso UP time, inclusive nos processos de publicações. A mudança mitigou também o risco de falhas na aplicação, já que o Kubernetes detecta anomalias e consegue redistribuir o tráfego automaticamente em todas as instâncias.

Nossas aplicações ficam hospedadas no Kubernetes. Ele é utilizado na entrada da requisição http, geração de certificados https, e balanceamento de tráfego entre as diversas réplicas da aplicação.

Hoje, já utilizamos o Kubernetes no Fusion, nosso sistema voltado para e-commerce que conta com módulos de cálculo e simulação de frete, rastreamento e conciliação. Agora, estamos testando e adaptando o Trux (nosso TMS para embarcadores e transportadoras) para que ele rode também em Kubernetes.

Por dentro da estrutura dos Kubernetes

Os componentes acima correspondem a estrutura necessária para a gerência de um ambiente Kubernetes. São executados em um NODE, que pode ser físico ou virtual, dependendo da estrutura do cluster.
 
O NODE Master é responsável por gerenciar o cluster Kubernetes e suas cargas de trabalho e/ou aplicações que é possível através destes componentes:
 
PODs
 
POD é a menor unidade que pode ser trabalhada no Kubernetes. É possível inserir um ou mais containers dentro de uma POD e ambos irão compartilhar os mesmos recursos disponíveis.
 
Em outras palavras, quando uma POD é criada, ela possui um IP para identificação. Dessa forma, se ela possuir mais de um container, ambos irão utilizar/compartilhar o mesmo IP.
 
Agora, vamos falar sobre os componentes do Kubernetes:
 
Componentes Master (Control Plane)
 
API Server
 
É um componente do NODE Master que expõe a API do Kubernetes, sendo o API Server front-end.
 
É o “cérebro” do cluster, as solicitações passam pela API, bem como a gravação no banco de dados interno do Kubernetes também é feita pela API.
 
ETCD
 
É a solução que o Kubernetes utiliza como banco de dados para armazenar as informações pertinentes ao cluster.
 
O ETCD não é uma solução que foi desenvolvida para o K8s, ele somente utiliza a solução já existente. Todas as informações sobre banco de dados ETCD podem ser encontradas na sua documentação oficial.
 
Scheduler
 
Componente que observa os PODs recém-criados sem nenhum nó atribuído e seleciona um nó para executá-los.
 
Quando você solicita a API para criar um container, ela irá conversar com o Scheduler para saber qual nó está disponível para alocar o container, bem como verificar se não há nenhum requisito de hardware (como memória RAM ou CPU) ou qualquer política.
 
Controller Manager
 
Componente que executa os processos do controlador.
 
Logicamente, cada controlador é um processo separado. Mas para reduzir a complexidade, todos são compilados em um único binário e executados em um único processo. Por exemplo: Replicaset Controller.
 
O controller Replicaset é responsável por garantir que as quantidades de PODs definidas estejam de acordo. Então quando você define que o Replicaset precisará ter 5 Pods, caso algum container caia ou seja destruído, o Replicaset irá forçar a criação de uma nova POD. Quem gerencia esse controlador, no caso, é o Controller Manager que observa os estados dos controladores sendo que alguns deles: Job controller, Deployment, Endpoints etc.
 
Componentes Node
 
Os componentes a seguir são executados em todos os NODES.
 
Kubelet
 
O Cubelet é um agente que é executado em cada NODE. Ele garante que os containers estão sendo executados através das PODs. Também fornece uma comunicação entre todos os NODEs que compõem o seu cluster, tendo o estado e saúde de cada NODE.
 
Kube-proxy
 
kube-proxy é um proxy de rede executado em cada nó do cluster, implementando parte do conceito de serviço Kubernetes.
 
O kube-proxy mantém regras de rede em nós. Essas regras de rede permitem a comunicação de rede com seus PODs a partir de sessões de rede dentro ou fora do cluster.
 
Container Runtime
 
No caso se trata da aplicação que irá executar os containers para nós. Pode ser o Docker, containerd, cri-o, podman etc.
 
Addons
 
Funcionam como um plugin, utilizando recursos do Kubernetes para implementar soluções adicionais ao cluster.
 
DNS
 
Enquanto outros ADDONs não são obrigatórios, todo cluster Kubernetes requer uma solução de DNS, dessa forma facilita o alcance e registros dos serviços.
 
 Utilização de K8s para apis de alta disponibilidade
  
Para as aplicações que necessitam de alta disponibilidade, são criadas várias réplicas da mesma aplicação. Assim, o  K8s consegue fazer o balanço das requisições em nossas apis de forma automática, entre elas. Com isso, se uma delas ficar sobrecarregada ou indisponível, o tráfego é redirecionado para as demais instâncias e uma nova é criada automaticamente. Aquela que apresentou falha é encerrada.
  
Além de garantir alta disponibilidade, redundância e melhor controle de versão, o Kubernetes também reduz o custo de infraestrutura em aproximadamente 40%.
 
O Kubernetes é considerado uma das melhores infraestruturas para load balance em contêineres. 
 
Com ele funcionando em conjunto com nosso processo de DevOps, podemos dizer que esta é uma combinação perfeita. 
 
Benefícios do Kubernetes
 
Os maiores ganhos estão no gerenciamento que ele faz da saúde das aplicações. Por exemplo, no início, quando o cálculo de frete estava em outra arquitetura, toda vez que precisava atualizar os dados do cache, era preciso que uma pessoa parasse para fazer o processo manualmente. Isso levava, em média 40 minutos, e esse processo se repetia de quatro a cinco vezes por dia (e às vezes mais!).
 
Com o Kubernetes, esse processo foi automatizado: além de levar menos de cinco minutos ele não apresenta risco de falhas humanas.
 
Outro ponto importante é que o scale horizontal é muito mais simples e rápido também. Na Black Friday de 2021, subimos uma supermáquina com aproximadamente 100 réplicas da aplicação para aguentar o alto volume de requisições, e foi muito simples e tranquilo fazer esse processo – o que poderia levar horas ou mesmo dias em arquiteturas mais antigas.

Como muda a forma de trabalho utilizando Kubernetes?
Ao implementarmos o Kubernetes, foi preciso implementar também processos de DevOps. Assim, criamos pipelines automatizados de compilação (continuous integration) da aplicação e processos de publicação automática (continuous delivery) – o que mudou drasticamente o processo de trabalho.
A mudança é porque quando um desenvolvedor finaliza um código, ele cria um pullrequest (PR) para nossa ferramenta de controle de versão (Git), na qual o código passa por uma análise (code review). Se aprovado, o código é compilado e cria uma nova versão da aplicação.
Essa versão, por sua vez, passa por um fluxo de publicações (Dev, Homolog, StageProduction e por fim Production). Se esse processo fosse manual, levaria horas de um desenvolvedor para subir, testar, validar e promover as versões entre os vários ambientes que possuímos. Porém, no Kubernetes + Azure DevOps leva apenas alguns segundos.
 
Mas este é um assunto para outro post 😉
Picture of Willians Dantas

Willians Dantas

Com foco em melhoria de processos e redução de custos, hoje acumula mais de 15 anos de experiência em e-commerce, sempre mergulhando em novos desafios que este universo permite. Especialista em PDCA e Gestão de Indicadores, acumula em suas expertises o desenvolvimento do aspecto de receita e custo de um e-commerce voltado sempre a consumo de frete entrega/reversa, além de soluções inovadoras para TMS.
Inscreva-se em nosso blog

Acesse, em primeira mão, nossos principais posts diretamente em seu email.

Posts Relacionados