CURSOS / TECNOLOGIA / KUBERNETES: ARQUITETURA E ORQUESTRAÇÃO REAL (ETAPA 2 DE 4)
← Voltar aos cursos
CURSO PRÁTICO · ETAPA 2 DE 4 · V1.32

Cargas de Trabalho (Workloads) e Rede Básica

Domine a unidade atômica do Kubernetes (Pods com init containers e sidecars nativos), isole ambientes com Namespaces, gerencie atualizações sem downtime via Deployments e exponha tudo com Services estáveis.

Ilustração editorial de Pods em um Namespace controlados por Deployment e conectados a um Service
6 Oficinas PráticasCobrindo os Capítulos 4, 5, 6 e 7 de The Kubernetes Book (v1.32).
Simulador de RolloutCalcule maxSurge, maxUnavailable e lotes de troca ao vivo.
Manifestos ReaisYAML declarativo e comandos kubectl prontos para copiar.

Jornada do Curso (4 Etapas)

Você está na Etapa 2: Cargas de Trabalho (Workloads) e Rede Básica.

Oficinas de Workloads e Rede

Capítulos 4, 5, 6 e 7 · K8s v1.32
Diagrama ilustrativo de tráfego entrando por um Service e sendo balanceado entre Pods durante um rolling update
Um Service mantém um IP virtual e nome DNS fixos enquanto o Deployment substitui Pods antigos por novos em lotes controlados.
OFICINA 01 · CAPÍTULO 4

Anatomia de um Pod: Multi-Contêiner, Init & Sidecars

No Kubernetes, você não agenda contêineres avulsos: a menor unidade agendável é o Pod. Um Pod cria um ambiente compartilhado (mesmo IP, rede localhost, volumes e memória) para um ou mais contêineres que precisam viver e morrer juntos.

  • metadata.name como hostname: o nome do Pod no YAML vira automaticamente o hostname compartilhado pelos contêineres dentro dele.
  • initContainers comuns: rodam em sequência antes dos contêineres principais e precisam terminar com sucesso (ex.: aguardar uma API externa responder ou clonar um repositório).
  • Sidecars nativos (restartPolicy: Always): definidos dentro de initContainers com restartPolicy: Always; iniciam antes do app principal e permanecem vivos em paralelo durante toda a vida do Pod (ideal para proxies de service mesh ou coletores de logs).
Terminal · Inspecionar, ver logs e abrir shell em um Pod
kubectl get pods -o wide
kubectl describe pod hello-pod
kubectl logs hello-pod
kubectl exec -it hello-pod -- sh
OFICINA 02 · CAPÍTULO 4

Probes de Saúde, Requests & Limits

Para que o Scheduler posicione seus Pods sem sufocar nós e o kubelet saiba se a aplicação realmente está saudável, você configura resources e probes diretamente no spec do contêiner.

Recursos e Probes no ciclo de vida do Pod
Configuração Quem Lê / Aplica Comportamento Real
resources.requests Scheduler + kubelet Valores mínimos garantidos (ex.: cpu: 0.5, memory: 256Mi). Se nenhum nó tiver esse saldo, o Pod fica em Pending.
resources.limits kubelet + Runtime Teto máximo permitido (ex.: cpu: 1.0, memory: 512Mi). Estouro de CPU sofre throttling; estouro de RAM pode gerar OOMKilled.
startupProbe kubelet Segura as outras probes enquanto uma app pesada termina de iniciar.
readinessProbe kubelet → EndpointSlice Define se o Pod está pronto para receber tráfego do Service (remove sem reiniciar se falhar).
livenessProbe kubelet Detecta travamentos (deadlocks) e reinicia o contêiner automaticamente.
Regra de ouro: sempre defina requests e readinessProbe em produção. Sem readinessProbe, um Service pode enviar requisições HTTP para um Pod que ainda está carregando dependências.
OFICINA 03 · CAPÍTULO 5

Clusters Virtuais com Namespaces

Namespaces dividem um cluster físico em múltiplos clusters virtuais lógicos (soft isolation), evitando colisões de nomes entre times ou ambientes (dev, staging). Já clusters separados oferecem hard isolation ao custo de maior sobrecarga operacional.

Os 4 Namespaces pré-criados em todo cluster Kubernetes
Namespace Finalidade
default Destino padrão quando nenhum Namespace é informado no YAML ou comando.
kube-system Abriga componentes internos do sistema (DNS do cluster, metrics server, CNI).
kube-public Recursos legíveis por todos os usuários (mesmo sem autenticação).
kube-node-lease Armazena objetos Lease usados para heartbeats dos nós do cluster.
Terminal · Listar Namespaces, recursos namespaced e fixar Namespace no contexto
kubectl get ns
kubectl api-resources --namespaced=true
kubectl create namespace shield
kubectl config set-context --current --namespace shield
kubectl config set-context --current --namespace default
OFICINA 04 · CAPÍTULO 6

Deployments, ReplicaSets & Rolling Updates

Na prática, você raramente cria um Pod avulso. Você cria um Deployment, que cria e gerencia um ReplicaSet, que por sua vez mantém o número desejado de Pods idênticos usando seletores de Labels.

Como Pods são objetos imutáveis, você nunca "edita" um Pod em execução para atualizar uma imagem: ao alterar o template do Deployment, o controller sobe um novo ReplicaSet com os Pods novos e desliga os antigos de forma controlada:

  • spec.minReadySeconds: tempo de espera (ex.: 10 segundos) após cada Pod ficar pronto antes de avançar, ajudando a detectar falhas cedo.
  • maxUnavailable: quantos Pods podem ficar abaixo do desejado durante a troca.
  • maxSurge: quantos Pods extras podem subir acima do desejado durante a troca.
  • VPA vs. HPA: o Deployment escala horizontalmente (número de réplicas); o Vertical Pod Autoscaler (VPA) ajusta CPU/RAM e não vem instalado por padrão.
Terminal · Escalar, acompanhar rollout e fazer rollback
kubectl scale deploy hello-deploy --replicas 5
kubectl rollout status deployment hello-deploy
kubectl rollout history deployment hello-deploy
kubectl rollout undo deployment hello-deploy
OFICINA 05 · CAPÍTULO 7

Services, Labels & EndpointSlices

Pods são efêmeros e trocam de IP toda vez que são recriados. Por isso, nunca conecte clientes diretamente ao IP de um Pod. O Service (escrito com S maiúsculo por ser um recurso da API) oferece um nome DNS e um IP virtual (ClusterIP) permanentes.

Para saber quais Pods recebem tráfego, o Service usa um selector de Labels (ex.: app: web). Apenas Pods saudáveis que possuam todas as Labels do seletor entram no objeto EndpointSlice associado ao Service.

Tipos de Service e políticas de tráfego
Tipo / Campo Alcance / Função Quando Usar
ClusterIP (padrão) IP e DNS acessíveis apenas dentro do cluster Comunicação interna entre microsserviços (ex.: API → Banco/Cache).
NodePort Abre uma porta alta (30000–32767) em todos os nós Testes rápidos ou integração com balanceadores externos manuais.
LoadBalancer Provisiona um Load Balancer na nuvem com IP externo Exposição direta na internet em clusters gerenciados (AWS, GCP, LKE).
sessionAffinity None (padrão) ou ClientIP ClientIP força stickiness, mas é considerado anti-padrão em apps stateless.
externalTrafficPolicy Cluster (padrão) ou Local Local evita saltos extras entre nós e preserva o IP de origem do cliente.
OFICINA 06 · CAPÍTULOS 6 E 7

Laboratório Guiado: Subindo Deployment + Service

Aplique o manifesto declarativo abaixo em um arquivo app-stack.yml para subir um Deployment com rolling update controlado e um Service vinculado por Labels.

Manifesto YAML · app-stack.yml (Deployment + Service ClusterIP)
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
spec:
  replicas: 3
  minReadySeconds: 10
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1
  selector:
    matchLabels:
      app: web-app
  template:
    metadata:
      labels:
        app: web-app
    spec:
      containers:
      - name: web
        image: nginx:1.27-alpine
        ports:
        - containerPort: 80
        resources:
          requests:
            cpu: "100m"
            memory: "64Mi"
          limits:
            cpu: "250m"
            memory: "128Mi"
---
apiVersion: v1
kind: Service
metadata:
  name: web-svc
spec:
  type: ClusterIP
  selector:
    app: web-app
  ports:
  - port: 80
    targetPort: 80
Terminal · Aplicar, inspecionar EndpointSlices e limpar
kubectl apply -f app-stack.yml
kubectl get deploy,rs,pods,svc,endpointslices
kubectl describe svc web-svc
kubectl delete -f app-stack.yml
LABORATÓRIO INTERATIVO · CAPÍTULO 6

Simulador de Rolling Update & Capacidade

Ajuste replicas, maxSurge, maxUnavailable e minReadySeconds para ver quantos Pods são trocados por lote durante uma atualização.

Teto / Piso de Pods 11 máx / 9 mín
Pods Trocados por Lote 2 Pods/lote
Tempo Mínimo de Rollout ~50s (5 lotes)
Com 10 réplicas, maxSurge: 1 (até 11) e maxUnavailable: 1 (mínimo 9), o delta é de 2 Pods atualizados por ciclo com espera de 10s entre lotes.
VERIFICAÇÃO DE DOMÍNIO · 4 QUESTÕES

Teste Rápido da Etapa 2

Valide os conceitos dos Capítulos 4, 5, 6 e 7 antes de seguir para Configuração e Storage.

1. Qual a diferença prática entre resources.requests e resources.limits em um Pod?

2. Em qual Namespace padrão rodam componentes internos do sistema como o DNS do cluster e o metrics server?

3. Um Deployment tem 10 réplicas, maxSurge: 1 e maxUnavailable: 1. Quantos Pods podem ser atualizados simultaneamente?

4. Qual tipo de Service é o padrão e expõe um IP virtual + nome DNS acessíveis apenas de dentro do cluster?

CONCLUSÃO DA ETAPA 2

Checklist de Prontidão & Exportação

Marque cada marco concluído; seu progresso fica salvo no navegador.

PRÓXIMA PARADA · ETAPA 3 DE 4

Configuração, Armazenamento e Roteamento

Avance para os Capítulos 8, 10, 11, 12 e 13: Ingress, Service Discovery via CoreDNS, Volumes persistentes, ConfigMaps, Secrets e StatefulSets.

Ir para Etapa 3 →