Skip to main content

Welcome to a Grasp lesson

Create a free account to keep studying and create your own study path.

Lesson 61

Kubernetes Fundamentals: Orchestration and Architecture

Recommended resources

Olá! Seja bem-vindo ao nosso novo módulo.

Até agora, focamos em como o .NET Aspire e o Docker nos ajudam a orquestrar o desenvolvimento de aplicações distribuídas localmente. Você aprendeu a conteinerizar serviços, gerenciá-los com o AppHost e garantir que sejam observáveis. Agora, vamos dar o próximo passo e mover nosso foco do desenvolvimento local para a orquestração em escala de produção.

Nesta lição, iniciaremos nossa jornada no Kubernetes, o sistema que se tornou o padrão da indústria para implantar, escalar e gerenciar aplicações em contêineres.

O objetivo de hoje é: Explicar o papel do Kubernetes como um orquestrador de contêineres e seus principais componentes (Control Plane, Worker Nodes).

Vamos descobrir por que simplesmente usar "docker run" não é suficiente para ambientes de produção e como a arquitetura do Kubernetes resolve os desafios complexos de executar aplicações distribuídas de forma confiável.

Por que precisamos de algo além do Docker?

Você já sabe como criar e executar contêineres com Docker. Para aplicações com múltiplos serviços, o Docker Compose (e, de forma mais abstrata, o .NET Aspire) nos ajuda a definir e executar esses serviços juntos. Mas o que acontece quando um contêiner falha no meio da noite? Como garantimos que nossa aplicação possa lidar com um aumento súbito de tráfego? E se a máquina virtual que hospeda nossos contêineres cair?

Executar contêineres diretamente com Docker em produção deixa essas questões em aberto, levando a problemas como:

  • Downtime: Se um contêiner ou host falha, a aplicação fica indisponível até que alguém intervenha manualmente.
  • Falta de Auto-recuperação (Self-Healing): Não há um mecanismo automático para reiniciar contêineres que falharam.
  • Escalabilidade Manual: Para lidar com mais carga, você precisaria iniciar manualmente mais contêineres e configurar um load balancer.
  • Alta Disponibilidade Complexa: Distribuir réplicas de seus contêineres em múltiplas máquinas para evitar um ponto único de falha requer uma configuração manual complexa.

É aqui que entra um orquestrador de contêineres. O Kubernetes automatiza a implantação, o escalonamento e o gerenciamento de aplicações em contêineres, resolvendo esses problemas de forma robusta.

Para uma excelente explicação sobre os problemas que o Kubernetes resolve, assista ao início deste vídeo. Ele estabelece a base para tudo o que aprenderemos a seguir.

TUDO O QUE VOCÊ PRECISA SABER PARA COMEÇAR COM KUBERNETES

O vídeo 'TUDO O QUE VOCÊ PRECISA SABER PARA COMEÇAR COM KUBERNETES' do canal Mateus Muller começa explicando exatamente por que o Docker por si só não é suficiente para produção e como o Kubernetes preenche essa lacuna.

Assista ao trecho de 01:17 a 08:22. Concentre-se em entender os conceitos de alta disponibilidade (high availability), auto-recuperação (self-healing) e auto-escalonamento (auto-scaling) que o Kubernetes oferece.


A Arquitetura do Kubernetes: Uma Visão Geral

O Kubernetes opera sobre um conjunto de máquinas (físicas ou virtuais) que formam um cluster. Em um nível mais alto, um cluster Kubernetes é dividido em duas partes principais:

  1. O Control Plane (Plano de Controle): O "cérebro" do cluster. Ele toma decisões globais sobre o cluster (como agendar contêineres), além de detectar e responder a eventos do cluster (por exemplo, iniciar um novo contêiner quando a réplica de um serviço falha).
  2. Os Worker Nodes (Nós de Trabalho): As "mãos na massa" do cluster. São as máquinas que efetivamente executam suas aplicações em contêineres.

Essa separação é fundamental: o Control Plane gerencia o estado desejado do cluster, e os Worker Nodes trabalham para tornar esse estado uma realidade.

Kubernetes Cluster Architecture Overview
Um diagrama de alto nível da arquitetura do Kubernetes. As requisições para gerenciar o cluster são enviadas ao Control Plane (através do API Server), que por sua vez instrui os Worker Nodes sobre quais cargas de trabalho (Pods) executar.

Para uma introdução mais detalhada, com analogias úteis que conectam esses conceitos ao que você já sabe sobre Docker, o artigo a seguir é um excelente ponto de partida.

Understanding the Control Plane and Worker Nodes

O artigo 'Understanding the Control Plane and Worker Nodes' da plataforma dev.to faz um ótimo trabalho ao comparar os componentes do Kubernetes com ferramentas do Docker que você já conhece.

Leia a introdução e a seção 'The Control Plane: The Mastermind'. Preste atenção nas analogias, como comparar o Control Plane a um 'Docker Compose on steroids' e o API Server à CLI do Docker.

Agora, vamos detalhar os componentes específicos que vivem em cada uma dessas partes. O vídeo a seguir oferece uma visão geral clara e bem visualizada de toda a arquitetura.

Kubernetes Architecture explained | Kubernetes Tutorial 15

O vídeo 'Kubernetes Architecture explained' do canal TechWorld with Nana é uma referência clássica para entender a arquitetura do Kubernetes. Vamos usá-lo para explorar os componentes do Control Plane e dos Worker Nodes.

Assista à introdução (00:00 - 01:12) para ter uma visão geral do que será abordado.


Dentro do Control Plane

O Control Plane pode ser executado em uma ou mais máquinas (para alta disponibilidade) e é composto por vários processos distintos que trabalham juntos.

Kubernetes Architecture explained | Kubernetes Tutorial 15

Vamos agora mergulhar nos detalhes do Control Plane com o vídeo da TechWorld with Nana.

Assista à seção que detalha os componentes do Control Plane (04:23 - 10:32). Tente identificar a responsabilidade de cada um dos quatro componentes principais.

Aqui está um resumo das responsabilidades de cada componente do Control Plane:

  • API Server (kube-apiserver):

    • Função: O ponto de entrada central para todo o cluster. É a única maneira de interagir com o estado do cluster, seja através da linha de comando (kubectl), de um painel de controle ou de automações.
    • Analogia: Pense nele como o porteiro e o recepcionista do cluster. Ele valida e processa todas as requisições de leitura e escrita.
  • etcd:

    • Função: O banco de dados do cluster. É um armazenamento de chave-valor consistente e de alta disponibilidade onde todos os dados do cluster são guardados (o "estado" do cluster).
    • Analogia: É a "memória" ou o "cérebro" do cluster. Ele armazena o estado desejado (o que você pediu para ser executado) e o estado atual (o que está realmente em execução).
  • Scheduler (kube-scheduler):

    • Função: Responsável por decidir em qual Worker Node um novo contêiner (ou, mais precisamente, um Pod, que veremos na próxima lição) deve ser executado.
    • Analogia: É o "gerente de logística". Ele observa os contêineres que precisam ser alocados e, com base nos recursos disponíveis (CPU, memória) e outras restrições, escolhe o melhor nó para eles.
  • Controller Manager (kube-controller-manager):

    • Função: Executa processos de controle que observam o estado do cluster através do API Server e trabalham para levar o estado atual em direção ao estado desejado.
    • Analogia: É o "supervisor proativo". Se você declarou que precisa de 3 réplicas de um serviço, mas apenas 2 estão em execução, o Controller Manager detecta isso e pede ao Scheduler para iniciar mais uma. Ele é a essência do "self-healing".
Teste seu entendimento!

Imagine que você executa um comando para escalar sua aplicação de 3 para 5 réplicas. Qual componente do Control Plane recebe primeiramente essa requisição, qual componente armazena essa nova configuração, e qual componente age para criar as duas novas réplicas?

Show answer
  1. O API Server recebe a requisição de escalonamento.
  2. O API Server valida a requisição e atualiza o estado desejado no etcd, registrando que agora 5 réplicas são necessárias.
  3. O Controller Manager (especificamente o ReplicaSet controller) detecta a diferença entre o estado desejado (5 réplicas) e o estado atual (3 réplicas) e inicia o processo para criar duas novas réplicas, solicitando ao Scheduler que encontre nós para elas.

Dentro de um Worker Node

Cada Worker Node é uma máquina que executa as aplicações e é gerenciada pelo Control Plane. Para isso, cada nó executa alguns processos essenciais.

Kubernetes Architecture explained | Kubernetes Tutorial 15

Agora, vamos ver os componentes que permitem que um Worker Node execute seu trabalho, novamente com o vídeo da TechWorld with Nana.

Assista à seção sobre os Worker Nodes (01:12 - 04:23). Foque nos três processos que devem estar instalados em cada nó.

Os principais componentes de um Worker Node são:

  • Kubelet:

    • Função: É o agente do Kubernetes que roda em cada nó. Ele se comunica com o API Server e é responsável por garantir que os contêineres descritos nas especificações de trabalho (PodSpecs) estejam em execução e saudáveis naquele nó.
    • Analogia: É o "capitão" do navio (o nó). Ele recebe ordens do almirantado (Control Plane) e garante que a tripulação (contêineres) execute as tarefas.
  • Kube-proxy:

    • Função: Um proxy de rede que roda em cada nó e mantém as regras de rede. Ele permite a comunicação de rede com seus contêineres de dentro e de fora do cluster, implementando o conceito de Services do Kubernetes.
    • Analogia: É o "controlador de tráfego" ou "encanador" de rede do nó, roteando o tráfego para os contêineres corretos.
  • Container Runtime:

    • Função: O software responsável por executar os contêineres. O Kubernetes é flexível e suporta vários runtimes.
    • Exemplos: containerd (o mais comum hoje), CRI-O. Embora o Docker possa ser usado, o Kubernetes moderno geralmente interage diretamente com o containerd, que é o runtime de contêiner dentro do próprio Docker.

Conclusão

Nesta lição, demos o primeiro passo fundamental para entender o Kubernetes. Vimos que ele é muito mais do que um simples executor de contêineres; é um sofisticado sistema de orquestração projetado para automação e resiliência.

Principais Pontos:

  • Kubernetes resolve os problemas de disponibilidade, escalabilidade e auto-recuperação que não são abordados nativamente pelo Docker.
  • A arquitetura é dividida em um Control Plane (o cérebro) e Worker Nodes (a força de trabalho).
  • O Control Plane gerencia o estado do cluster através de seus componentes: API Server (gateway), etcd (memória), Scheduler (alocador) e Controller Manager (regulador de estado).
  • Os Worker Nodes executam as aplicações usando o Kubelet (agente), Kube-proxy (rede) e um Container Runtime (executor).

Próxima Lição:
Agora que entendemos a arquitetura e os "bastidores" do Kubernetes, na próxima lição vamos começar a interagir com o cluster. Você aprenderá sobre os objetos fundamentais com os quais trabalhamos no Kubernetes — Pod, Deployment e Service — e usará a ferramenta de linha de comando kubectl para inspecionar um cluster e seus recursos.