DevOps

Kubernetes do Zero: Parte 2 - Instalação e Primeiro Deploy

✍️ Taylson Martinez
12 min read
Kubernetes do Zero: Parte 2 - Instalação e Primeiro Deploy

Aprenda a instalar Kubernetes localmente com Minikube e faça seu primeiro deploy. Comandos kubectl essenciais e hands-on prático.

🌐

Este artigo também está disponível em inglês

Ler em Inglês →

Recap da Parte 1

Na parte anterior, aprendemos:

  • Arquitetura do Kubernetes
  • Conceitos de Pod, Deployment e Service
  • Por que Kubernetes é importante

Agora vamos colocar a mão na massa! 🚀

Opções de Instalação Local

1. Minikube (Recomendado para Iniciantes)

  • Cluster Kubernetes single-node
  • Perfeito para desenvolvimento e aprendizado
  • Funciona em Mac, Windows e Linux

2. Kind (Kubernetes in Docker)

  • Roda Kubernetes em containers Docker
  • Mais leve que Minikube
  • Ótimo para CI/CD

3. Docker Desktop

  • Kubernetes integrado
  • Fácil de usar se você já usa Docker
  • Disponível para Mac e Windows

Vamos usar Minikube nesta série!

Instalando Minikube

macOS

# Instalar via Homebrew
brew install minikube

# Verificar instalação
minikube version

Linux

# Download do binário
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64

# Instalar
sudo install minikube-linux-amd64 /usr/local/bin/minikube

# Verificar
minikube version

Windows

# Via Chocolatey
choco install minikube

# Ou download direto
# https://minikube.sigs.k8s.io/docs/start/

Instalando kubectl

kubectl é a CLI para interagir com Kubernetes.

macOS

brew install kubectl

Linux

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

Windows

choco install kubernetes-cli

Verificar Instalação

kubectl version --client

Iniciando seu Primeiro Cluster

# Iniciar Minikube
minikube start

# Verificar status
minikube status

# Ver informações do cluster
kubectl cluster-info

# Ver nodes
kubectl get nodes

Saída esperada:

NAME       STATUS   ROLES           AGE   VERSION
minikube   Ready    control-plane   1m    v1.28.0

Seu Primeiro Deploy: Hello Kubernetes!

1. Criar um Deployment

# Deploy do nginx
kubectl create deployment hello-k8s --image=nginx:latest

# Verificar deployment
kubectl get deployments

# Ver pods criados
kubectl get pods

2. Expor com Service

# Criar service do tipo NodePort
kubectl expose deployment hello-k8s --type=NodePort --port=80

# Ver services
kubectl get services

# Acessar o service (Minikube)
minikube service hello-k8s

Parabéns! Você acabou de fazer seu primeiro deploy no Kubernetes! 🎉

Comandos kubectl Essenciais

Ver Recursos

# Listar todos os pods
kubectl get pods

# Detalhes de um pod específico
kubectl describe pod <pod-name>

# Ver logs de um pod
kubectl logs <pod-name>

# Ver todos os recursos
kubectl get all

Criar e Deletar

# Criar resource de um arquivo YAML
kubectl apply -f arquivo.yaml

# Deletar resource
kubectl delete deployment hello-k8s

# Deletar tudo
kubectl delete all --all

Debug

# Entrar em um pod (shell interativo)
kubectl exec -it <pod-name> -- /bin/bash

# Port forward (acesso local)
kubectl port-forward <pod-name> 8080:80

# Ver eventos do cluster
kubectl get events

Exemplo Prático: Deploy de Aplicação

Vamos criar um deploy completo usando YAML:

deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: meu-app
  labels:
    app: meu-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: meu-app
  template:
    metadata:
      labels:
        app: meu-app
    spec:
      containers:
      - name: nginx
        image: nginx:1.24
        ports:
        - containerPort: 80
        resources:
          requests:
            memory: "64Mi"
            cpu: "250m"
          limits:
            memory: "128Mi"
            cpu: "500m"

service.yaml

apiVersion: v1
kind: Service
metadata:
  name: meu-app-service
spec:
  type: LoadBalancer
  selector:
    app: meu-app
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

Aplicar Configurações

# Criar deployment
kubectl apply -f deployment.yaml

# Criar service
kubectl apply -f service.yaml

# Verificar
kubectl get all

# Acessar (Minikube)
minikube service meu-app-service

Escalando sua Aplicação

# Escalar para 5 réplicas
kubectl scale deployment meu-app --replicas=5

# Ver pods sendo criados
kubectl get pods --watch

# Voltar para 3 réplicas
kubectl scale deployment meu-app --replicas=3

Atualizando a Aplicação (Rolling Update)

# Atualizar imagem
kubectl set image deployment/meu-app nginx=nginx:1.25

# Verificar rollout
kubectl rollout status deployment/meu-app

# Ver histórico
kubectl rollout history deployment/meu-app

# Fazer rollback
kubectl rollout undo deployment/meu-app

Dashboard do Kubernetes

Minikube vem com um dashboard web:

# Iniciar dashboard
minikube dashboard

Isso abre um navegador com interface gráfica para explorar seu cluster!

Troubleshooting Comum

Problema: Pod em CrashLoopBackOff

# Ver logs
kubectl logs <pod-name>

# Ver eventos
kubectl describe pod <pod-name>

Problema: ImagePullBackOff

# Verificar se a imagem existe
kubectl describe pod <pod-name>

# Procurar por "Events" no output

Problema: Serviço não acessível

# Verificar se service está rodando
kubectl get services

# Testar com port-forward
kubectl port-forward service/meu-app-service 8080:80

Limpeza

Quando terminar de praticar:

# Deletar todos os recursos
kubectl delete deployment meu-app
kubectl delete service meu-app-service

# Parar Minikube
minikube stop

# Deletar cluster (se quiser recomeçar do zero)
minikube delete

Checklist de Aprendizado

Você deve ser capaz de:

  • ✅ Instalar Minikube e kubectl
  • ✅ Iniciar um cluster Kubernetes
  • ✅ Criar Deployments e Services
  • ✅ Ver logs e debugar pods
  • ✅ Escalar aplicações
  • ✅ Fazer rolling updates

Próximos Passos

Na Parte 3 vamos aprender:

  • ConfigMaps e Secrets
  • Persistent Volumes
  • Namespaces
  • Resource Quotas
  • Probes (Liveness e Readiness)

🎯 Exercício: Tente fazer deploy de uma aplicação diferente (como Redis ou PostgreSQL) usando os conceitos que aprendemos!

Vejo você na Parte 3! 🚀