Por que Kubernetes?

Thiago Moreira
Printi Tech
Published in
7 min readSep 9, 2021

Provavelmente você já deve ter ouvido falar de Kubernetes, ele é uma das principais tecnologias do momento e empresas de todos os tamanhos estão investindo tempo e dinheiro na adoção desta incrível tecnologia, o que gera grandes oportunidades para profissionais que conhecem essa tecnologia. Aqui na Printi, como não poderia ser diferente, nós também temos cargas de trabalho baseadas em containers, boa parte rodando com Kubernetes.

Kube o que?

Kubernetes, k8s, ou ainda kube, é uma plataforma open source que automatiza as operações de containers, o que comumente chamamos de orquestração de containers. Muito eficiente, ele ajuda a gerenciar aplicações baseadas em containers, independente se estão em nuvem pública, privada ou híbrida.

Kelsey Hightower diz que o Kubernetes é incrível porque faz as tarefas que o melhor dos administradores de sistemas poderia fazer, como automação, failover, logging centralizado e monitoração. E ele tem razão, é isso que o torna tão valioso.

Um pouco de história…

Mas você pode se perguntar, de onde veio esse tal de kubernetes?

Um dos grandes pioneiros no desenvolvimento de tecnologia baseada em containers foi o Google e é impossível falarmos de Kubernetes sem antes falarmos de Google. Isso porque foi criado e desenvolvido pelos engenheiros do Google para resolver problema de executar grande número de serviços em larga escala em milhões de servidores. E isso foi viabilizado inicialmente pelo Borg. O Borg foi o antecessor do Kubernetes, influenciando e servindo de base para seu desenvolvimento.

O Kubernetes se tornou Open Source em 2015, quando o Google doou o Projeto para a Cloud Native Computing Fundation.

Quais vantagens tenho em usar Kubernetes?

Até aqui vimos que a vantagem mais latente do Kubernetes é oferecer uma plataforma completa para automatizar completamente as tarefas operacionais concernentes à execução de containers, mas ele possui outras grandes vantagens, segundo a Redhat:

  • Orquestrar containers em vários hosts.
  • Aproveitar melhor o hardware para maximizar os recursos necessários na execução das aplicações corporativas.
  • Controlar e automatizar as implantações e atualizações de aplicações.
  • Montar e adicionar armazenamento para executar aplicações com monitoração de estado.
  • Escalar rapidamente as aplicações em containers e recursos relacionados.
  • Gerenciar serviços de forma declarativa, garantindo que as aplicações sejam executadas sempre da mesma maneira como foram implantadas.
  • Verificar a integridade e autorrecuperação das aplicações com posicionamento, reinício, replicação e escalonamento automáticos.

Estrutura do Kubernetes:

Para que a orquestração seja perfeita, o Kubernetes utiliza vários componentes para determinadas funções e tarefas. Esses componentes rodam em um sistema de cluster, garantindo resiliência e separação de responsabilidades.

A princípio, pode parecer um pouco complexo, mas depois de entender cada componente, as coisas passam a fazer mais sentido.

O Kubernetes funciona em “clusters”, que são estruturas que comportam um conjunto de nós (node), que são máquinas disponíveis para realizar trabalhos. Cada cluster sempre possui um Control Plane (área “administrativa”), que é o conjunto de nós reservados para executar as tarefas de gerenciamento do cluster (normalmente é chamado “Master Node”, representado pelo retângulo branco à esquerda na imagem); e as Compute Machines, que são os nós que realizam os trabalhos desejados (representado pelo conjunto de retângulos brancos empilhados ao centro).E como o Kubernetes trabalha com containers, que são estruturas que rodam a partir de imagens Docker, temos como estruturas complementares: o “Conteiner registry”, que é o controlador de registro e disponibilização de imagens Docker, e o “Persistant storage”, que é a estrutura que armazena, de fato, as imagens Docker (ambas representadas à direita na imagem).

Vamos explicar alguns dos componentes mais comuns para ajudar você a entender melhor o Kubernetes:

Master Nodes e Control Plane

Master ou Master Nodes são membros de um cluster que executam os componentes do plano de controle (Control Plane), o conjunto de Master Nodes forma o Control Plane.

O Control plane é quem executa as tarefas necessárias para que o Kubernetes faça seu trabalho, podemos dizer que ele é o cérebro do cluster, pois gerencia os principais componentes do sistema a fim de garantir que tudo está conforme o planejado. É ele quem escalona containers ou administra services, por exemplo. O Control Plane é constituído por vários outros componentes:

  • kube-apiserver: Trata as requisições de API, é servidor do frontend para o Control Plane.
  • kube-scheduler: Responsável por executar as tarefas de agendamento, ele decide onde executar um Pod recém criado, por exemplo.
  • kube-controller-manager: Responsável por executar os controladores de recursos, como os Deployments, por exemplo.
  • etcd: Conhecido como banco de dados do Kubernetes, é ele quem armazena todas as informações do cluster, como por exemplo os recursos existentes no cluster, além de armazenar o estado do cluster.

Compute Machines (Node)

São os membros do cluster que realizam as tarefas solicitadas e atribuídas, eles executam a carga de trabalho dos usuários. Assim como os Master Nodes, os Nós (ou worker nodes) também possuem alguns componentes, são eles:

  • kubelet: Uma espécie de agente que é executado nos nós. Ele orienta o runtime do container a iniciar suas cargas de trabalho e monitora seus status.
  • kube-proxy: Componente que encaminha as requisições entres os Pods e os nós, baseado no IP e porta da solicitação recebida.
  • kubectl: a ferramenta de configuração da linha de comando do Kubernetes.

Pods, services e deployments

O Kubernetes facilita a representação do estado das aplicações, para isso, ele trabalha com uma abstração chamada de Object, que representa esse estado de parte das aplicações. Normalmente, definimos esses objetos através de arquivos yaml, que podem ser executados através da ferramenta de linha de comando kubectl.

Nesses objetos podemos definir algumas especificações. No caso dos Pods, podemos especificar que queremos usar uma determinada imagem para nossa aplicação. Nos Services, podemos informar que a aplicação deverá responder em uma determinada porta. Já no objeto Deployment, podemos informar a quantidade de recursos que queremos para nosso pod, como memória e cpu. E assim funciona com cada um dos objetos.

Alguns desses Objetos são:

pod: Menor unidade de um cluster, os Pods são objetos que representam grupos de containers, ou seja, eles encapsulam os containers e quando fazemos um deploy de uma aplicação no kubernetes, estamos basicamente criando pods.

services: Os Services permitem que as aplicações recebam tráfegos, é o objeto responsável pela forma como queremos expor as aplicações para internet.

deployment: Gerencia o estado desejado das aplicações e se encarrega de transformar o estado atual no estado desejado, caso eles sejam diferentes.

Existem muitos outros componentes, você pode aprender mais sobre eles na documentação oficial do Kubernetes em https://kubernetes.io/

Obtendo o Kubernetes

Nesse momento, você pode pensar: Humm, tudo bem, acho que estou gostando desse tal de kubernetes, mas por onde começo?

Bem, para responder a esta perguntar, é importante observarmos que hoje temos várias opções para rodarmos Kubernetes. Podemos separar essas opções em 3 formas:

1- Serviço Local:

Se você é iniciante nesse mundo de Kubernetes e quer dar os primeiros passos, é uma ótima ideia começar pelo seu ambiente local. Temos hoje várias alternativas interessantes para rodar Kubernetes diretamente da sua sua máquina. Entretanto, é bom ter em mente que estas ferramentas não são recomendadas para ambientes produtivos, utilize-as apenas como laboratórios para dar seus primeiros passos em um cluster Kubernetes.

  • MiniKube: Com foco em facilitar o aprendizado e desenvolvimento para Kubernetes, O Minikube é uma das ferramentas mais aclamadas pela comunidade. Em poucos passos você já tem um ambiente Kubernetes rodando na sua máquina. Possui suporte para Linux, MacOs e Windows.

Para usar o MiniKube, você pode seguir a documentação oficial aqui.

  • Docker Desktop: Outra grande opção (e minha preferida) é o Docker Desktop. Talvez seja a maneira mais rápida de rodar o Kubernetes em seu ambiente local. Assim como o Minikube, o Docker Desktop também conta com suporte para Linux, Windows e MacOS, embora sua utilização se dê mais por usuários Windows/MacOs.

Para usar o Docker Desktop, você pode seguir a documentação oficial aqui.

  • Play With Kubernetes: Se você não tiver a fim de rodar o kubernetes na sua própria maquina, há uma opção interessante. O Play With Kubernetes te garante acesso a um cluster por 4 horas.

Você pode acessar o Play With Kubernetes aqui.

2- Instaladores Kubernetes

Aqui estamos falando de kubernetes auto-hospedados. São ferramentas que oferecem a possibilidade de configurar e executar o Kubernetes por conta própria. Algumas destas ferramentas são: Kops, Kubespay, Rancher, Kubeadm, entre outras.

3- Serviços gerenciados Kubernetes:

Obviamente, administrar toda essa estrutura não é uma tarefa fácil, por isso grandes players do mercado de nuvem pública estão investindo grande esforço para oferecer Kubernetes como serviços e aqui queremos listar as principais plataformas.

  • EKS: O Amazon Elastic Kubernetes Service (Amazon EKS) é um serviço totalmente gerenciado, ele descarta a necessidade de instalar e operar o Control Plane, o que facilita muito a vida dos administradores de cluster kubernetes. É uma boa ideia utilizá-lo caso você já possua uma infraestrutura na AWS.
  • AKS: Similar ao EKS, o Azure Kubernetes Service (AKS) também é um serviço totalmente gerenciado, e com ele você pode criar clusters pela interface web ou até mesmo usando a ferramenta de linha de comando proprietária (az).
  • GKE: Considerado por muitos o melhor serviço de Kubernetes gerenciado, o Google Kubernetes Engine oferece clusters totalmente gerenciados, sem overhead de configuração ou manutenção. Assim como os demais concorrentes, se você utiliza infraestrutura GCP(Google Cloud Platform), faz muito sentido experimentar o GKE.

Por onde começar?

Se você é um usuário novo de Kubernetes e quer aprender mais sobre a ferramenta, recomendamos que você comece pelo serviço local. O Docker Desktop e o MiniKube são ótimos para começar a dar os primeiros passos. Mas lembre-se que estas ferramentas não são recomendadas para ambientes de produção, portanto, limite-se a utiliza-las somente para aprendizado e teste local.

Agora para rodar Kubernetes em produção temos a opção de auto-hospedado, que, como já mencionamos, é você quem deverá fazer o gerenciamento do cluster. E a opção de Kubernetes gerenciado, onde temos vários serviços consolidados no mercado.

Particularmente, gosto muito do serviço gerenciado, e trarei uma abordagem realista sobre isso nos próximos artigos desta série sobre Kubernetes.

Conclusão:

Iniciamos nossa série de artigos sobre Kubernetes mostrando um pouco da história e dos conceitos por trás dessa incrível ferramenta. Falamos sobre algumas vantagens e os principais componentes de um Cluster Kubernetes. Vimos algumas opções disponíveis como serviços gerenciados, auto-hospedado e algumas opções para rodar o Kubernetes localmente. No próximo artigo, falaremos um pouco dos desafios enfrentados aqui a Printi, e como o Kubernetes se tornou uma opção relevante para nós.

--

--