Kubernetes explicado

Entendendo os conceitos do Kubernetes

· 5 minutos de leitura
K8s

O Kubernetes (K8s) é uma plataforma para orquestrar, gerenciar e escalar containers. A Google criou o projeto inicialmente para uso interno, e tornou-o software livre em 2014.

Com o Kubernetes é possível:

  • Escalar aplicações horizontalmente e verticalmente
  • Fazer balanceamento de carga
  • Fazer descoberta de serviços
  • Orquestrar armazenamento
  • Executar rollouts e rollbacks de forma automatizada
  • Gerenciar configurações e chaves
  • E muito mais

O Kubernetes não é um PaaS (Platform as a Service), porém ele provê algumas das funcionalidades, como gerenciamento de deploys, balanceamento de carga, log e monitoração.

Conceitos

Componentes do Kubernetes

Componentes do Kubernetes

Cluster

Quando você instala Kubernetes você tem um cluster.

Um cluster geralmente contém múltiplas máquinas. Para o Control Plane o ideal é alta disponibilidade, e para isso é necessário possuir pelo menos dois master node. Para a execução de suas aplicações, irá depender do tamanho do seu projeto, mas o ideal também é dois worker node, totalizando quatro máquinas.

Em casos mais específicos é possível criar um cluster Kubernetes com apenas uma máquina, ou até mesmo utilizando um Raspberry Pi.

Pod

Um Pod, em resumo, é uma instância da sua aplicação no cluster.

Pod é o menor objeto no modelo de objetos do Kubernetes. Ele encapsula um ou mais containers, armazenamento, redes e tudo o que for necessário para executar uma aplicação.

Control Plane

Kubernetes Control Plane garante que o estado atual do cluster é o estado desejado e definido. Para tal, ele executa uma variedade de tarefas automaticamente, inspecionado o cluster e corrigindo qualquer não conformidade.

O Control Plane consiste em um ou mais Kubernetes Master.

Kubernetes Master

Kubernetes Master, também referido como Master Node, é responsável por manter o cluster no estado desejado, garantindo que todas as aplicações tenham os recursos necessários para sua execução.

No master temos os seguintes componentes:

Kubernetes Node

Kubernetes Node, também referido como Worker Node e Compute Machine, é responsável por executar os Pods e prover todo o ambiente necessário para tal.

No node temos os seguintes componentes:

  • kubelet — Agente que está presente em todo worker node e é responsável por gerenciar os Pods estão rodando, além de se comunicar com o master node
  • kube-proxy — Proxy de rede que mantém regras e permite a comunicação com Pods dentro e fora da rede
  • Container runtime — Software responsável por executar os containers, alguns suportados pelo Kubernetes são o Docker, containerd e o CRI-O

Objetos

No Kubernetes existe uma série de abstrações que representam o estado de todo o sistema. Os objetos são responsáveis por especificar como as aplicações, serviços, volumes de armazenamento, redes, permissões e outros itens irão se comportar no seu cluster.

Alguns exemplos de objetos comumente usados são:

  • Namespace — Separação lógica de aplicações por ambientes
  • Deployment — Define o estado desejado de um Pod, quantidade de réplicas, e mais
  • Service — Expõe sua aplicação como um serviço na rede
  • Ingress — Expões sua aplicação para acesso externo, define rotas, balanceamento de carga e mais
  • Volumes — Abstração do armazenamento de dados da sua aplicação

Esses são só alguns dos objetos, existem vários outros, e alguns possuem várias classes, é impossível cobrir todos nesse artigo.

Kubernetes API

Serviço que disponibiliza as funcionalidades do Kubernetes através de uma API RESTful. É possível interagir diretamente com a API, porém o meio mais comum é através de ferramentas como o kubectl.

kubectl

Ferramenta de linha de comando (CLI) que permite interagir com a API do Kubernetes. É possível usar o kubectl para criar, editar, inspecionar e deletar objetos.

Distribuições

Existem várias distribuições do Kubernetes, cada uma possui algo em particular que talvez se adéque mais a determinados usos.

Para ser considerada uma distribuição compatível com os padrões da CNCF (Cloud Native Computing Foundation), as distribuições devem passar por uma série de critérios para se tornar uma versão certificada. É possível obter uma lista das distribuições certificadas aqui.

Podemos classificar as distribuições em 4 classes para entender um pouco melhor os diferentes tipos de distribuições.

Puras

São as distribuições que não modificam ou que deixam para o usuário a definição de vários aspectos da instalação e configuração.

O Kubernetes da CNCF é o oficial, mas a Canonical também gera suas próprias compilações sem modificações.

Customizadas

São distribuições baseadas na oficial, geralmente entregando uma versão mais fácil de gerenciar ou com funcionalidade não disponível nas versões puras.

A distribuição customizada mais popular é o OpenShift / OKD.

Limitadas

São as distribuições que possuem uso limitado e específico, geralmente são versões que removem algumas funcionalidades da versão oficial para permitir o uso em certos dispositivos, alguns exemplos são:

  • minikube — Kubernetes local
  • MicroK8s — Kubernetes mais leve e de fácil instalação
  • K3s — Kubernetes para IoT e embarcados

Kubernetes as a Service

São as distribuições que são fornecidas por diferentes provedores, geralmente elas integram facilmente com outros produtos e serviços, alguns exemplos são:

Conclusão

Kubernetes é um assunto extenso, porém é relativamente fácil entender o seu funcionamento. Eu diria que se você já é familiarizado com containers, Docker, Docker Swarm e afins, a curva de aprendizado é relativamente moderada.

Minha recomendação de leitura são os livros Cloud Native DevOps With Kubernetes e Kubernetes Up and Running. Confira como conseguir esses livros gratuitamente aqui.

Iremos trazer mais conteúdo relacionado a Kubernetes, então fique ligado em nosso blog.

Gostou? Ficou alguma dúvida? Deixe um comentário.

Referências

Documentação do Kubernetes