Kubectl Essencial: Domine a Linha de Comando do Kubernetes
Kubectl Essencial: Domine a Linha de Comando do Kubernetes
O kubectl é a ferramenta oficial de linha de comando para interagir com clusters Kubernetes. Ele permite gerenciar recursos, depurar aplicações, automatizar tarefas e muito mais. Conhecer bem seus comandos e opções é fundamental para quem trabalha com Kubernetes.
Comandos básicos para listar e entender recursos
1. kubectl get
Lista recursos do cluster – pods, serviços, deployments etc.
# Todos os pods no namespace padrão
kubectl get pods
# Pods em todos os namespaces
kubectl get pods --all-namespaces
# Deployments com informações extras
kubectl get deployments -o wide
# Serviços no namespace "dev"
kubectl get svc -n dev
2. kubectl describe
Exibe detalhes completos de um recurso, incluindo eventos recentes, condições e status.
kubectl describe pod nginx-pod
Use describe para investigar falhas; a saída é textual e não indicada para consumo automático.
3. kubectl logs
Mostra os logs dos contêineres dentro de um pod.
# Logs do pod (especifique o container se houver mais de um)
kubectl logs my-pod
kubectl logs my-pod -c my-container
# Seguir logs em tempo real
kubectl logs -f my-pod
4. kubectl explain
Fornece documentação rápida sobre recursos e campos da API Kubernetes.
kubectl explain pods
kubectl explain deployment.spec.template.spec.containers
Criar, aplicar, comparar e deletar recursos
kubectl delete remove recursos.
kubectl delete pod nome-do-pod
kubectl delete -f deployment.yaml
# Forçar exclusão de um pod travado
kubectl delete pod nome-do-pod --grace-period=0 --force
Atenção: Use --force com cautela, pois pode causar perda de dados se utilizado indevidamente.
kubectl diff mostra a diferença entre o estado atual do cluster e um arquivo local.
kubectl diff -f deployment.yaml
Utilize para revisar mudanças antes de aplicar alterações, evitando surpresas.
kubectl apply cria ou atualiza recursos declarativamente, mantendo o estado desejado alinhado ao YAML.
kubectl apply -f deployment.yaml
Recomendado para fluxos de trabalho iterativos onde você quer manter o estado sincronizado com os arquivos de configuração.
kubectl create cria recursos a partir do zero. Se o recurso já existir, o comando falha.
kubectl create -f deployment.yaml
Use este comando quando quiser garantir que está criando um recurso novo sem sobrescrever estado existente.
Formatos de saída, filtragem e namespaces
-o wide – exibe colunas extras (IP, node, restart count, etc.).
kubectl get pods -o wide
Namespaces – por padrão, os comandos operam no namespace default.
kubectl get pods -n meu-namespace
# Definir namespace padrão para o contexto atual
kubectl config set-context --current --namespace=meu-namespace
Labels e selectors – filtram recursos por metadados.
# Pods com label app=frontend
kubectl get pods -l app=frontend
# Pods que NÃO têm a label env=prod
kubectl get pods -l 'env!=prod'
# Seletores combinados
kubectl get pods -l 'app=frontend,env=dev'
Saída estruturada (YAML ou JSON):
kubectl get pods -o yaml # YAML
kubectl get pods -o json # JSON
Debug rápido com exec e port-forward
kubectl port-forward encaminha uma porta local para um pod ou serviço, permitindo acesso a aplicações internas sem expô-las externamente.
# Encaminhar porta 8080 local para a porta 80 do serviço nginx
kubectl port-forward svc/nginx 8080:80
# Ou para um pod específico
kubectl port-forward pod/nome-do-pod 9090:80
kubectl exec executa comandos dentro de um pod.
# Abrir um shell bash
kubectl exec -it nome-do-pod -- /bin/bash
# Executar um comando simples
kubectl exec nome-do-pod -- ls /var/log
Resumo dos comandos e opções essenciais
| Comando / Opção | O que faz | Exemplo |
|---|---|---|
kubectl get | Lista recursos; aceita labels, namespace e formatos | kubectl get pods -n dev -l app=api -o wide |
kubectl describe | Detalha recurso e eventos recentes | kubectl describe svc minha-api |
kubectl logs | Exibe logs dos containers | kubectl logs -f nome-do-pod |
kubectl explain | Documentação da API e campos | kubectl explain deployment.spec |
kubectl create | Cria recursos (erro se já existirem) | kubectl create -f app.yaml |
kubectl apply | Cria ou atualiza recursos declarativamente | kubectl apply -f app.yaml |
kubectl diff | Mostra diferenças entre YAML local e estado atual | kubectl diff -f app.yaml |
kubectl delete | Remove recursos | kubectl delete pod nome |
-o yaml/json | Define formato de saída estruturado | kubectl get svc -o yaml |
-l, --selector | Filtra por labels | kubectl get pods -l tier=backend |
--namespace | Define o namespace alvo | kubectl get pods --namespace=prod |
-o wide | Exibe colunas adicionais na listagem | kubectl get pods -o wide |
kubectl exec | Executa comando ou shell dentro do pod | kubectl exec -it pod -- /bin/bash |
kubectl port-forward | Encaminha portas locais para pods ou serviços | kubectl port-forward svc/minha-api 8080:80 |
Considerações finais
Dominar o kubectl é indispensável para administrar e depurar clusters Kubernetes. A linha de comando expõe o modelo declarativo, permitindo inspeção e modificação rápida do ambiente.
- Prefira
applypara gerenciar recursos; ele mantém o estado desejado sincronizado. - Use labels e namespaces para organizar e filtrar recursos.
- Recorra a
describeelogspara entender o estado e eventos de um recurso. - Aproveite
execeport-forwardpara debugging direto, sem precisar expor serviços externamente.
Com essa base, você está pronto para explorar comandos avançados, automatizar rotinas e integrar Kubernetes ao seu fluxo de trabalho profissional.