Orquestração de Containers - Introdução ao Kubernetes

17 min leitura | 2025.12.09

O que é Orquestração de Containers

Orquestração de containers é uma tecnologia que automatiza o posicionamento, escalonamento, networking e gerenciamento de disponibilidade de múltiplos containers. É um mecanismo essencial para operar um grande número de containers em ambiente de produção.

Por que é necessário: Com poucos containers, é possível gerenciar manualmente, mas com centenas ou milhares de containers, torna-se necessário um sistema que automatize o posicionamento, detecção de falhas e escalonamento.

Problemas que a Orquestração Resolve

ProblemaSolução
Posicionamento de containersDecisão automática de em qual nó executar
EscalonamentoAjuste automático do número de containers conforme a carga
Recuperação de falhasReinício automático quando um container falha
Balanceamento de cargaDistribuição de tráfego entre múltiplos containers
Service discoveryConfiguração automática de comunicação entre containers
Rolling updateAtualização de aplicações sem downtime

Arquitetura Básica do Kubernetes

flowchart TB
    subgraph CP["Control Plane"]
        API["API Server"]
        SCH["Scheduler"]
        CM["Controller Manager"]
        ETCD["etcd"]
    end

    subgraph W1["Worker Node 1"]
        K1["kubelet"]
        KP1["kube-proxy"]
        P1A["Pod"]
        P1B["Pod"]
    end

    subgraph W2["Worker Node 2"]
        K2["kubelet"]
        KP2["kube-proxy"]
        P2A["Pod"]
        P2B["Pod"]
    end

    subgraph W3["Worker Node 3"]
        K3["kubelet"]
        KP3["kube-proxy"]
        P3A["Pod"]
        P3B["Pod"]
    end

    CP --> W1
    CP --> W2
    CP --> W3

Control Plane

  • API Server: Ponto de entrada para todas as operações no cluster
  • Scheduler: Decide em qual nó cada Pod será executado
  • Controller Manager: Conjunto de controllers que mantêm o estado desejado
  • etcd: KVS distribuído que armazena o estado do cluster

Worker Node

  • kubelet: Gerencia os Pods no nó
  • kube-proxy: Proxy de rede e balanceamento de carga

Recursos Principais

Pod

A menor unidade de deploy do Kubernetes. Agrupa um ou mais containers.

apiVersion: v1
kind: Pod
metadata:
  name: my-app
  labels:
    app: web
spec:
  containers:
    - name: app
      image: nginx:1.25
      ports:
        - containerPort: 80
      resources:
        requests:
          memory: "64Mi"
          cpu: "250m"
        limits:
          memory: "128Mi"
          cpu: "500m"

Deployment

Gerencia réplicas de Pods e rolling updates.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
        - name: web
          image: my-app:1.0.0
          ports:
            - containerPort: 8080
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0

Service

Fornece acesso de rede estável aos Pods.

apiVersion: v1
kind: Service
metadata:
  name: web-service
spec:
  selector:
    app: web
  ports:
    - port: 80
      targetPort: 8080
  type: ClusterIP

Tipos de Service

TipoDescricao
ClusterIPAcessivel apenas de dentro do cluster
NodePortExposto externamente na porta de cada no
LoadBalancerExposto externamente integrando com LB de cloud
ExternalNameAlias para servico externo

ConfigMap / Secret

Gerencia configurações e informações sensíveis.

# ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  DATABASE_HOST: "db.example.com"
  LOG_LEVEL: "info"

---
# Secret
apiVersion: v1
kind: Secret
metadata:
  name: app-secrets
type: Opaque
data:
  DATABASE_PASSWORD: cGFzc3dvcmQxMjM=  # codificado em base64
# Uso no Pod
spec:
  containers:
    - name: app
      envFrom:
        - configMapRef:
            name: app-config
        - secretRef:
            name: app-secrets

Escalonamento

Escalonamento Manual

kubectl scale deployment web-deployment --replicas=5

Escalonamento Automático (HPA)

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: web-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: web-deployment
  minReplicas: 2
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 70

Rolling Update

flowchart LR
    subgraph Before["Antes da atualizacao"]
        B1["v1"]
        B2["v1"]
        B3["v1"]
    end

    subgraph During["Durante a atualizacao"]
        direction TB
        D1["v1 v1 v1 v2 ← Nova versao adicionada"]
        D2["v1 v1 v2 v2 ← Versao antiga removida"]
        D3["v1 v2 v2 v2"]
        D1 --> D2 --> D3
    end

    subgraph After["Apos atualizacao"]
        A1["v2"]
        A2["v2"]
        A3["v2"]
    end

    Before --> During --> After
# Atualizar imagem
kubectl set image deployment/web-deployment web=my-app:2.0.0

# Verificar status da atualizacao
kubectl rollout status deployment/web-deployment

# Rollback
kubectl rollout undo deployment/web-deployment

Health Check

spec:
  containers:
    - name: app
      livenessProbe:
        httpGet:
          path: /healthz
          port: 8080
        initialDelaySeconds: 10
        periodSeconds: 5
      readinessProbe:
        httpGet:
          path: /ready
          port: 8080
        initialDelaySeconds: 5
        periodSeconds: 3
  • livenessProbe: Em caso de falha, reinicia o container
  • readinessProbe: Em caso de falha, remove do Service

Resumo

Kubernetes é uma plataforma poderosa que automatiza a operação de aplicações containerizadas. Compreendendo os recursos básicos como Pod, Deployment e Service, e combinando-os adequadamente, é possível construir sistemas escaláveis e altamente disponíveis.

← Voltar para a lista