Acesse o painel da sua conta

Não tem uma conta? Registrar

Entrar em contato

Visite também nosso site craftxp.com.br

  • img
  • img
  • img
  • img
  • img
  • img

Entre em contato

Kubernetes na Prática: Guia Completo para Orquestração de Contêineres

Kubernetes na Prática: Guia Completo para Orquestração de Contêineres

O que é Kubernetes?

Kubernetes (também conhecido como K8s) é uma plataforma de código aberto para orquestração de contêineres criada pelo Google e hoje mantida pela Cloud Native Computing Foundation (CNCF). Ela automatiza a implantação, o dimensionamento e a operação de aplicações em contêineres, agrupando-os em unidades lógicas para facilitar o gerenciamento e a descoberta.

Diferente de ferramentas como Docker Compose (voltada para ambientes locais) ou Docker Swarm, o Kubernetes foi projetado desde o início para ambientes de produção em grande escala, com suporte nativo a balanceamento de carga, auto-scaling, rollbacks e autorreparação.

Arquitetura do Kubernetes

Um cluster Kubernetes é composto por dois tipos principais de nós:

  • Control Plane (Plano de Controle): Gerencia o cluster. Inclui o API Server (ponto de entrada para toda a comunicação), o etcd (banco de dados chave-valor que armazena todo o estado do cluster), o Scheduler (responsável por alocar Pods aos nós) e o Controller Manager (monitora e garante o estado desejado do cluster).
  • Worker Nodes (Nós de Trabalho): Executam as aplicações. Cada nó contém o Kubelet (agente que se comunica com o API Server), o Kube Proxy (gerencia as regras de rede) e o Container Runtime (Docker, containerd ou CRI-O).
+----------------------------+<br>|      Control Plane         |<br>|  +--------+  +----------+ |<br>|  |  API   |  |  etcd    | |<br>|  | Server |  | (dados)  | |<br>|  +--------+  +----------+ |<br>|  +--------+  +----------+ |<br>|  |Scheduler|  |Controller| |<br>|  |         |  | Manager  | |<br>|  +--------+  +----------+ |<br>+----------------------------+<br>          |<br>+----------------------------+<br>|       Worker Node          |<br>|  +----------+  +--------+ |<br>|  | Kubelet  |  | Kube   | |<br>|  |          |  | Proxy  | |<br>|  +----------+  +--------+ |<br>|  +----------------------+ |<br>|  |     Pods (Apps)      | |<br>|  +----------------------+ |<br>+----------------------------+

Conceitos Fundamentais

Antes de começar a usar Kubernetes, é essencial dominar seus objetos principais:

Pod

O Pod é a menor unidade implantável no Kubernetes. Representa um ou mais contêineres que compartilham rede e armazenamento. Geralmente, recomenda-se um contêiner por Pod, exceto em casos como sidecars (proxies, loggers).

apiVersion: v1<br>kind: Pod<br>metadata:<br>  name: meu-app<br>  labels:<br>    app: frontend<br>spec:<br>  containers:<br>  - name: nginx<br>    image: nginx:1.25<br>    ports:<br>    - containerPort: 80

Deployment

Um Deployment gerencia Pods de forma declarativa. Ele garante que o número desejado de réplicas esteja sempre em execução, suporta rolling updates e rollbacks automáticos.

apiVersion: apps/v1<br>kind: Deployment<br>metadata:<br>  name: meu-app-deployment<br>spec:<br>  replicas: 3<br>  selector:<br>    matchLabels:<br>      app: frontend<br>  template:<br>    metadata:<br>      labels:<br>        app: frontend<br>    spec:<br>      containers:<br>      - name: nginx<br>        image: nginx:1.25<br>        ports:<br>        - containerPort: 80

Service

Os Services expõem Pods para dentro ou fora do cluster. Existem quatro tipos principais:

  • ClusterIP (padrão): Expõe o serviço apenas internamente no cluster. Ideal para comunicação entre microsserviços.
  • NodePort: Expõe em uma porta estática em cada nó do cluster. Útil para desenvolvimento e testes.
  • LoadBalancer: Provisiona um balanceador de carga externo (em nuvens como AWS, GCP, Azure) que distribui tráfego para os Pods.
  • ExternalName: Mapeia um serviço para um nome DNS externo.
apiVersion: v1<br>kind: Service<br>metadata:<br>  name: meu-app-service<br>spec:<br>  selector:<br>    app: frontend<br>  ports:<br>  - protocol: TCP<br>    port: 80<br>    targetPort: 80<br>  type: LoadBalancer

ConfigMap e Secret

Para separar configuração do código, o Kubernetes oferece dois recursos:

  • ConfigMap: Armazena dados de configuração não sensíveis (variáveis de ambiente, arquivos de configuração).
  • Secret: Armazena dados sensíveis (senhas, chaves de API, tokens). Os dados são codificados em base64 e podem ser criptografados em repouso.
apiVersion: v1<br>kind: ConfigMap<br>metadata:<br>  name: app-config<br>data:<br>  DATABASE_URL: postgres://localhost:5432/myapp<br>  LOG_LEVEL: debug<br>---<br>apiVersion: v1<br>kind: Secret<br>metadata:<br>  name: app-secrets<br>type: Opaque<br>data:<br>  DB_PASSWORD: c3VwZXJzZWNyZXQ=  # base64

Instalando e Testando Localmente

Para aprender Kubernetes sem gastar com nuvem, use o Minikube ou Kind (Kubernetes in Docker):

# Instalar Minikube no Linux<br>curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64<br>sudo install minikube-linux-amd64 /usr/local/bin/minikube<br><br># Iniciar cluster local<br>minikube start --driver=docker<br><br># Verificar nós<br>kubectl get nodes<br><br># Alternativa: Kind (mais rápido para CI)<br>kind create cluster --name meu-cluster

Comandos Essenciais do kubectl

O kubectl é a ferramenta de linha de comando para interagir com o Kubernetes. Aqui estão os comandos que você usará no dia a dia:

# Ver recursos do cluster<br>kubectl get pods<br>kubectl get deployments<br>kubectl get services<br>kubectl get nodes<br>kubectl get namespaces<br><br># Logs e debug<br>kubectl logs meu-pod<br>kubectl describe pod meu-pod<br>kubectl exec -it meu-pod -- /bin/sh<br>kubectl port-forward svc/meu-app-service 8080:80<br><br># Aplicar e deletar recursos<br>kubectl apply -f deployment.yaml<br>kubectl delete -f deployment.yaml<br>kubectl delete pod meu-pod # O Deployment recria automaticamente

Auto Scaling: HPA e VPA

Um dos recursos mais poderosos do Kubernetes é o escalonamento automático:

  • Horizontal Pod Autoscaler (HPA): Aumenta ou diminui o número de réplicas com base em métricas como CPU e memória.
  • Vertical Pod Autoscaler (VPA): Ajusta os limites de recursos (CPU/memória) dos contêineres automaticamente.
  • Cluster Autoscaler: Adiciona ou remove nós do cluster conforme a demanda.
apiVersion: autoscaling/v2<br>kind: HorizontalPodAutoscaler<br>metadata:<br>  name: meu-app-hpa<br>spec:<br>  scaleTargetRef:<br>    apiVersion: apps/v1<br>    kind: Deployment<br>    name: meu-app-deployment<br>  minReplicas: 2<br>  maxReplicas: 10<br>  metrics:<br>  - type: Resource<br>    resource:<br>      name: cpu<br>      target:<br>        type: Utilization<br>        averageUtilization: 70

Helm: O Gerenciador de Pacotes do Kubernetes

Helm simplifica a instalação e o gerenciamento de aplicações complexas no Kubernetes. Com charts pré-configurados, você pode instalar stacks completas (como WordPress, Prometheus, NGINX Ingress) com um único comando:

# Adicionar repositório<br>helm repo add bitnami https://charts.bitnami.com/bitnami<br><br># Instalar um chart<br>helm install meu-wordpress bitnami/wordpress<br><br># Listar releases<br>helm list<br><br># Criar seu próprio chart<br>helm create meu-chart

Monitoramento com Prometheus e Grafana

Para clusters em produção, o monitoramento é essencial. O stack padrão é Prometheus (coleta de métricas) + Grafana (visualização) + kube-state-metrics (métricas dos objetos Kubernetes):

# Instalar kube-prometheus-stack com Helm<br>helm repo add prometheus-community https://prometheus-community.github.io/helm-charts<br>helm install prometheus prometheus-community/kube-prometheus-stack<br><br># Acessar o Grafana<br>kubectl port-forward svc/prometheus-grafana 3000:80<br># Acesse http://localhost:3000 — user: admin, senha: prom-operator

Boas Práticas para Produção

  1. Defina Resource Limits: Sempre configure requests e limits de CPU/memória para evitar que um Pod consuma todos os recursos do nó.
  2. Use Namespaces: Separe ambientes (dev, staging, prod) e equipes com namespaces. Aplique ResourceQuotas para evitar uso abusivo.
  3. Configure Probes: Use livenessProbe (saúde do contêiner), readinessProbe (pronto para receber tráfego) e startupProbe (aplicações lentas na inicialização).
  4. Adote GitOps: Ferramentas como ArgoCD ou Flux sincronizam o estado do cluster com um repositório Git, garantindo que o cluster reflita exatamente o que está versionado.
  5. RBAC (Role-Based Access Control): Nunca use a conta admin para tarefas rotineiras. Crie Roles e RoleBindings específicos para cada equipe ou serviço.
  6. Network Policies: Isole workloads com políticas de rede que definem quais Pods podem se comunicar entre si.
apiVersion: v1<br>kind: ResourceQuota<br>metadata:<br>  name: dev-quota<br>  namespace: dev<br>spec:<br>  hard:<br>    requests.cpu: 4<br>    requests.memory: 8Gi<br>    limits.cpu: 8<br>    limits.memory: 16Gi<br>    persistentvolumeclaims: 5

Kubernetes no Mundo Real

Kubernetes é a espinha dorsal da infraestrutura moderna. Empresas como Spotify (mais de 3.000 microsserviços em K8s), Airbnb (migração completa para K8s em 2021), Adidas (e-commerce global em clusters multi-região) e Pokémon GO (escalonamento automático para milhões de jogadores simultâneos) confiam no Kubernetes para operar em escala global.

Conclusão

Kubernetes transformou a maneira como implantamos e gerenciamos software. Embora a curva de aprendizado seja íngreme — especialmente para quem vem de ambientes tradicionais — os benefícios em escalabilidade, resiliência e automação são inegáveis.

Para continuar seus estudos:

  1. Pratique com o Killercoda (laboratórios interativos gratuitos)
  2. Estude para a certificação CKAD (Certified Kubernetes Application Developer)
  3. Explore o ecossistema: Service Mesh (Istio/Linkerd), Serverless (Knative) e CI/CD (ArgoCD, Tekton)

O ecossistema Kubernetes só cresce. Dominá-lo hoje é um investimento que se paga na carreira de qualquer profissional DevOps.

Craft XP
Craft XP