DevOps & Infra

Introdução ao Kubernetes: Orquestrando Containers do Básico ao Essencial

Entenda o que é o Kubernetes, como ele se diferencia do Docker e aprenda a configurar um cluster local para realizar seu primeiro deploy de forma prática e sem jargões.

Marcos Costa
Marcos Costa
13 de julho de 2026 9 min de leitura
Imagem de capa: Logo do Kubernetes orquestrando containers, com fundo de terminal e comandos `kubectl`.

Se você já trabalha com desenvolvimento de software ou está estudando infraestrutura, certamente já ouviu falar de Kubernetes. No entanto, para quem está dando os primeiros passos, a ferramenta pode parecer um monstro de sete cabeças repleto de termos complexos e conceitos abstratos.

Para facilitar o entendimento, imagine uma grande orquestra sinfônica. Cada músico toca um instrumento específico e sabe exatamente o que fazer de forma isolada — esses músicos são os containers (Docker). No entanto, sem coordenação, o resultado final pode ser caótico. O Kubernetes entra nessa analogia como o maestro: ele não toca os instrumentos diretamente, mas garante que cada músico comece no tempo certo, mantenha o ritmo ideal e, caso alguém cometa um erro ou precise parar, coordena a substituição imediatamente sem interromper o espetáculo.

Neste guia de Kubernetes para iniciantes, vamos desmistificar essa tecnologia, entender sua arquitetura básica, diferenciá-la do Docker e colocar a mão na massa com um deploy prático em um ambiente local.


O que é Kubernetes e por que ele se tornou o padrão de mercado?

O Kubernetes (também conhecido pela abreviação K8s, onde o “8” representa as oito letras entre o “K” e o “s”) é uma plataforma open-source de orquestração de containers. Ele foi originalmente desenvolvido pelo Google em 2014, com base em sua experiência interna de mais de uma década gerenciando workloads em escala com sistemas como o Borg, e posteriormente doado à Cloud Native Computing Foundation (CNCF).

O principal objetivo do Kubernetes é automatizar o ciclo de vida das aplicações conteinerizadas. Em vez de gerenciar manualmente onde cada container está rodando, o K8s assume o controle de tarefas críticas como:

  • Implantação (Deployment) automatizada: Define como e quando suas aplicações devem ser publicadas.
  • Escalabilidade horizontal: Aumenta ou diminui o número de containers ativos automaticamente com base no consumo de recursos (como CPU e memória).
  • Autocorreção (Self-healing): Monitora a saúde dos containers. Se um container falhar ou travar, o Kubernetes o reinicia ou o substitui de forma transparente para o usuário final.
  • Descoberta de serviços e balanceamento de carga: Expõe os containers para a rede e distribui o tráfego de forma equilibrada para evitar sobrecarregar instâncias específicas.

Docker vs. Kubernetes: Eles são concorrentes ou complementares?

Uma das dúvidas mais comuns de quem está começando é: “Devo aprender Docker ou Kubernetes?” ou “O Kubernetes substitui o Docker?”.

A resposta direta é: eles não são concorrentes, mas sim tecnologias complementares.

O Docker é focado no empacotamento e isolamento da aplicação. Com ele, você cria uma imagem que contém o código, as dependências e as configurações necessárias para rodar seu sistema de forma idêntica em qualquer máquina. Você pode ler mais sobre como usar o Docker para facilitar o desenvolvimento no dia a dia.

Já o Kubernetes entra em cena quando você precisa gerenciar esses containers em escala, distribuídos por múltiplos servidores (um cluster). Enquanto o Docker roda e controla os containers individualmente em uma única máquina, o Kubernetes coordena o ecossistema completo. Para entender melhor essa dinâmica de infraestrutura, vale a pena ler sobre o que são containers e orquestração e sua importância no movimento DevOps.


Desvendando a Arquitetura: Control Plane e Worker Nodes

Um cluster Kubernetes é composto por um conjunto de máquinas físicas ou virtuais divididas em duas funções principais: o Control Plane (painel de controle) e os Worker Nodes (nós de execução).

+-----------------------------------------------------------------+
|                          CONTROL PLANE                          |
|  +------------------+  +----------+  +-----------------------+  |
|  | kube-apiserver   |  |   etcd   |  | kube-controller-mgr   |  |
|  +------------------+  +----------+  +-----------------------+  |
|  |  kube-scheduler  |                                           |
|  +------------------+                                           |
+--------------------------------+--------------------------------+
                                 |
        +------------------------+------------------------+
        |                                                 |
+-------v-------------------------+     +-----------------v---------------+
|           WORKER NODE 1         |     |           WORKER NODE 2         |
|  +----------+  +-------------+  |     |  +----------+  +-------------+  |
|  | kubelet  |  | kube-proxy  |  |     |  | kubelet  |  | kube-proxy  |  |
|  +----------+  +-------------+  |     |  +----------+  +-------------+  |
|  |      Container Runtime       |  |     |  |      Container Runtime       |  |
|  +------------------------------+  |     |  +------------------------------+  |
+---------------------------------+     +---------------------------------+

1. Control Plane (O Cérebro)

Responsável por tomar decisões globais sobre o cluster (como agendamento de aplicações) e detectar/responder a eventos. Seus principais componentes são:

  • kube-apiserver: A porta de entrada do cluster. É a API REST que recebe todos os comandos externos (vindos do terminal ou de ferramentas de CI/CD).
  • etcd: Um banco de dados chave-valor altamente disponível que armazena todas as configurações e o estado atual do cluster.
  • kube-scheduler: Analisa os requisitos de recursos de uma nova aplicação e decide em qual nó de execução ela deve rodar.
  • kube-controller-manager: Executa os processos de controle que garantem que o estado real do cluster corresponda ao estado desejado (por exemplo, garantir que o número correto de réplicas de uma aplicação esteja ativo).

2. Worker Nodes (Os Músculos)

Máquinas que realmente executam as aplicações. Cada nó possui:

  • kubelet: Um agente que roda no nó e garante que os containers estejam ativos e saudáveis, seguindo as instruções enviadas pelo Control Plane.
  • kube-proxy: Gerencia as regras de rede do nó, permitindo a comunicação entre os containers e o mundo externo.
  • Container Runtime: O software responsável por rodar os containers (como o containerd ou o próprio Docker Engine).

Os Três Pilares Fundamentais: Pods, Deployments e Services

Para interagir com o Kubernetes, você precisa entender os objetos básicos que compõem o ecossistema:

Pods

É a menor unidade de execução no Kubernetes. Você não roda um container diretamente no cluster; você roda um Pod. Um Pod pode conter um ou mais containers que compartilham o mesmo espaço de rede, endereço IP e volumes de armazenamento. Geralmente, adota-se a prática de um container por Pod, exceto em padrões específicos (como sidecars).

Deployments

É um objeto declarativo que define o estado desejado da sua aplicação. No Deployment, você especifica qual imagem de container usar, quantas réplicas do Pod devem rodar simultaneamente e como o Kubernetes deve realizar atualizações de versão (como rolling updates, que atualizam a aplicação sem gerar indisponibilidade).

Services

Como os Pods são efêmeros (podem morrer e ser recriados com IPs diferentes a qualquer momento), você precisa de uma forma estável de acessá-los. O Service funciona como um ponto de entrada fixo (com IP e DNS próprios) que distribui as requisições entre os Pods ativos correspondentes.


Guia Prático: Configurando seu Primeiro Cluster Local com Minikube

Para estudar Kubernetes sem gastar com provedores de nuvem, a melhor alternativa é rodar um cluster local. Duas ferramentas populares para isso são o Minikube e o Kind (Kubernetes in Docker).

Neste guia, utilizaremos o Minikube, que cria uma máquina virtual ou utiliza o Docker local para simular um nó do Kubernetes de forma simples.

Pré-requisitos

  1. Ter o Docker instalado e rodando na sua máquina.
  2. Instalar o kubectl (a ferramenta de linha de comando oficial para interagir com o Kubernetes).

Passo 1: Instalar o Minikube

Siga as instruções de instalação para o seu sistema operacional na documentação oficial do Minikube.

Passo 2: Iniciar o Cluster Local

Com o Docker ativo, abra o terminal e execute o comando:

minikube start

Esse comando fará o download da imagem do Kubernetes e configurará um cluster de nó único no seu computador. Para verificar se a comunicação está funcionando, liste os nós ativos:

kubectl get nodes

O retorno esperado deve mostrar um nó com o status Ready.


Mão na Massa: Criando seu Primeiro Deploy com YAML

No Kubernetes, definimos nossa infraestrutura de forma declarativa usando arquivos YAML. Vamos criar um arquivo chamado nginx-app.yaml para subir um servidor web Nginx simples e expô-lo na rede.

Crie o arquivo nginx-app.yaml com o seguinte conteúdo:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.25
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: NodePort

Aplicando as configurações no cluster

Para enviar essa declaração ao Kubernetes, execute:

kubectl apply -f nginx-app.yaml

Verificando o status dos recursos

Para verificar se os Pods foram criados e estão rodando, use:

kubectl get pods

Você deverá ver duas réplicas do Nginx listadas. Para ver o Service criado:

kubectl get services

Acessando a aplicação localmente

Como estamos rodando o Kubernetes dentro do Minikube, precisamos de um comando auxiliar para abrir a porta do serviço no nosso navegador:

minikube service nginx-service

Comandos essenciais de Troubleshooting (Resolução de Problemas)

Se algo der errado ou se você quiser investigar o comportamento dos seus Pods, utilize estes dois comandos fundamentais:

  1. Ver os logs do container:
    kubectl logs <nome-do-pod>
  2. Ver detalhes técnicos e eventos do Pod (útil para diagnosticar falhas de inicialização):
    kubectl describe pod <nome-do-pod>

Pé no Chão: Quando o Kubernetes é Essencial e Quando é Overkill?

Embora o Kubernetes seja uma ferramenta extremamente poderosa e adotada por grandes corporações globais, ele traz consigo uma curva de aprendizado acentuada e uma complexidade operacional significativa.

Quando vale a pena usar?

  • Sistemas distribuídos complexos: Se sua aplicação é composta por dezenas de microsserviços que precisam se comunicar de forma dinâmica.
  • Necessidade de alta disponibilidade extrema: Se o seu negócio não pode tolerar segundos de indisponibilidade e exige escalabilidade automática rápida.
  • Times de plataforma dedicados: Se a empresa possui profissionais focados em DevOps e engenharia de confiabilidade (SRE) para manter e atualizar os clusters.

Quando é um exagero (Overkill)?

  • Projetos simples ou MVPs: Se você está validando uma ideia ou rodando um monólito simples, um servidor VPS comum com Docker Compose resolve o problema com uma fração do custo e do esforço.
  • Equipes pequenas sem braço de infraestrutura: Gerenciar um cluster Kubernetes consome tempo de desenvolvimento que poderia ser focado em entregar novas funcionalidades de produto.
  • Aplicações estáticas ou de baixo tráfego: Soluções de PaaS (Platform as a Service) ou Serverless costumam ser muito mais eficientes e baratas nesses cenários.

Para equipes que buscam automação sem a complexidade do K8s, uma excelente alternativa intermediária é focar em automação de esteiras de entrega. Você pode aprender como implementar CI/CD com GitHub Actions e Docker de forma simples para agilizar seus deploys sem a necessidade de manter um cluster completo.


Perguntas Frequentes (FAQ)

O Kubernetes substitui o Docker?

Não. Eles são tecnologias complementares. O Docker cria e roda os containers individualmente, enquanto o Kubernetes coordena e gerencia múltiplos containers rodando em diferentes servidores (cluster).

Qual a diferença prática entre Minikube e Kind?

O Minikube roda o Kubernetes dentro de uma máquina virtual local ou container, sendo muito robusto para simular um ambiente real. O Kind (Kubernetes in Docker) roda os nós do cluster diretamente como containers Docker, sendo extremamente rápido para inicialização e testes rápidos de CI/CD.

Vale a pena usar Kubernetes para pequenos projetos ou startups?

Geralmente não no início. O Kubernetes adiciona uma camada significativa de complexidade operacional e custos de gerenciamento. Para times pequenos ou MVPs, soluções de PaaS ou instâncias simples com Docker costumam ser mais eficientes até que a escala exija orquestração complexa.


Referências

Marcos Costa

Sobre Marcos Costa

Desenvolvedor backend com foco em arquitetura de software, automação e produtos digitais.

Ver mais artigos