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
Série: Kubernetes do Zero
Parte 2 de 2
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! 🚀