====== GUIA DE REFERÊNCIA RÁPIDA KUBERNETES - COMANDOS ESSENCIAIS ======
Este guia de referência rápida (Cheat Sheet) compila os comandos Kubernetes mais utilizados, organizados por funcionalidade, para otimizar o desenvolvimento e a administração de ambientes conteinerizados em clusters Kubernetes.
===== 1. GERENCIAMENTO DE RECURSOS BÁSICOS =====
==== 1.1. CONFIGURAÇÃO E CONTEXTOS ====
# Verificar a versão do cliente kubectl
kubectl version --client
# Exibir informações do cluster
kubectl cluster-info
# Listar todos os contextos disponíveis
kubectl config get-contexts
# Obter o contexto atual
kubectl config current-context
# Alternar para um contexto específico
kubectl config use-context
# Exibir a configuração completa do kubeconfig
kubectl config view
# Definir o namespace padrão para o contexto atual
kubectl config set-context --current --namespace=
# Criar um novo contexto
kubectl config set-context --cluster= --user=
==== 1.2. NAMESPACES ====
# Listar todos os namespaces
kubectl get namespaces
kubectl get ns
# Criar um novo namespace
kubectl create namespace
# Deletar um namespace (e todos os recursos dentro dele)
kubectl delete namespace
# Exibir informações detalhadas sobre um namespace
kubectl describe namespace
# Definir um namespace como padrão para todos os comandos
kubectl config set-context --current --namespace=
# Listar recursos em um namespace específico
kubectl get pods --namespace=
kubectl get pods -n
==== 1.3. PODS ====
# Listar todos os pods no namespace padrão
kubectl get pods
# Listar todos os pods em todos os namespaces
kubectl get pods --all-namespaces
kubectl get pods -A
# Listar pods com informações detalhadas (IP, Node, etc.)
kubectl get pods -o wide
# Exibir informações detalhadas sobre um pod específico
kubectl describe pod
# Visualizar logs de um pod
kubectl logs
# Seguir logs em tempo real (similar a 'tail -f')
kubectl logs -f
# Visualizar logs de um container específico em um pod multi-container
kubectl logs -c
# Acessar um terminal interativo dentro de um pod
kubectl exec -it -- /bin/bash
# Executar um comando específico em um pod
kubectl exec --
# Copiar arquivos do pod para o host
kubectl cp :
# Copiar arquivos do host para o pod
kubectl cp :
# Criar um pod a partir de uma imagem Docker
kubectl run --image=:
# Deletar um pod
kubectl delete pod
# Deletar múltiplos pods
kubectl delete pods
# Deletar todos os pods em um namespace
kubectl delete pods --all
# Exibir eventos de um pod
kubectl describe pod | grep -A 10 Events
==== 1.4. DEPLOYMENTS ====
# Listar todos os deployments
kubectl get deployments
kubectl get deploy
# Exibir informações detalhadas sobre um deployment
kubectl describe deployment
# Criar um deployment a partir de uma imagem
kubectl create deployment --image=:
# Escalar um deployment (aumentar/diminuir réplicas)
kubectl scale deployment --replicas=
# Atualizar a imagem de um deployment (rolling update)
kubectl set image deployment/ =:
# Verificar o status do rollout (atualização)
kubectl rollout status deployment/
# Visualizar o histórico de rollouts
kubectl rollout history deployment/
# Reverter para a versão anterior do deployment
kubectl rollout undo deployment/
# Reverter para uma revisão específica
kubectl rollout undo deployment/ --to-revision=
# Pausar um rollout
kubectl rollout pause deployment/
# Retomar um rollout pausado
kubectl rollout resume deployment/
# Deletar um deployment
kubectl delete deployment
# Editar um deployment (abre editor de texto)
kubectl edit deployment
==== 1.5. SERVICES ====
# Listar todos os services
kubectl get services
kubectl get svc
# Exibir informações detalhadas sobre um service
kubectl describe service
# Criar um service do tipo ClusterIP (padrão, acesso interno)
kubectl expose deployment --type=ClusterIP --port=80 --target-port=8080
# Criar um service do tipo NodePort (acesso externo via porta do node)
kubectl expose deployment --type=NodePort --port=80 --target-port=8080
# Criar um service do tipo LoadBalancer (acesso externo com IP balanceado)
kubectl expose deployment --type=LoadBalancer --port=80 --target-port=8080
# Deletar um service
kubectl delete service
# Obter o IP externo de um LoadBalancer service
kubectl get service -o jsonpath='{.status.loadBalancer.ingress[0].ip}'
# Listar endpoints de um service (pods que o service roteia tráfego)
kubectl get endpoints
==== 1.6. CONFIGMAPS E SECRETS ====
# Listar todos os ConfigMaps
kubectl get configmaps
kubectl get cm
# Criar um ConfigMap a partir de um arquivo
kubectl create configmap --from-file=
# Criar um ConfigMap a partir de um diretório
kubectl create configmap --from-file=
# Criar um ConfigMap a partir de pares chave-valor
kubectl create configmap --from-literal=chave1=valor1 --from-literal=chave2=valor2
# Exibir o conteúdo de um ConfigMap
kubectl get configmap -o yaml
# Deletar um ConfigMap
kubectl delete configmap
# Listar todos os Secrets
kubectl get secrets
# Criar um Secret genérico
kubectl create secret generic --from-literal=username=user --from-literal=password=pass
# Criar um Secret a partir de um arquivo
kubectl create secret generic --from-file=
# Criar um Secret do tipo docker-registry (para autenticação em registries privados)
kubectl create secret docker-registry --docker-server= --docker-username= --docker-password=
# Exibir o conteúdo de um Secret (codificado em base64)
kubectl get secret -o yaml
# Decodificar um valor base64 de um Secret
kubectl get secret -o jsonpath='{.data.chave}' | base64 --decode
# Deletar um Secret
kubectl delete secret
==== 1.7. VOLUMES E PERSISTENT VOLUMES ====
# Listar todos os Persistent Volumes
kubectl get persistentvolumes
kubectl get pv
# Listar todos os Persistent Volume Claims
kubectl get persistentvolumeclaims
kubectl get pvc
# Exibir informações detalhadas sobre um PV
kubectl describe pv
# Exibir informações detalhadas sobre um PVC
kubectl describe pvc
# Criar um PVC a partir de um manifesto YAML
kubectl apply -f
# Deletar um PVC
kubectl delete pvc
# Deletar um PV
kubectl delete pv
# Listar Storage Classes disponíveis
kubectl get storageclasses
kubectl get sc
==== 1.8. INGRESS ====
# Listar todos os Ingress
kubectl get ingress
# Exibir informações detalhadas sobre um Ingress
kubectl describe ingress
# Criar um Ingress a partir de um manifesto YAML
kubectl apply -f
# Deletar um Ingress
kubectl delete ingress
# Obter o IP ou hostname do Ingress
kubectl get ingress -o jsonpath='{.status.loadBalancer.ingress[0].ip}'
===== 2. LIMPEZA E REMOÇÃO EM LOTE =====
==== 2.1. LIMPEZA GERAL ====
# Deletar todos os recursos em um namespace
kubectl delete all --all -n
# Deletar todos os pods em um namespace
kubectl delete pods --all -n
# Deletar todos os deployments em um namespace
kubectl delete deployments --all -n
# Deletar todos os services em um namespace
kubectl delete services --all -n
# Deletar todos os ConfigMaps em um namespace
kubectl delete configmaps --all -n
# Deletar todos os Secrets em um namespace
kubectl delete secrets --all -n
# Deletar todos os PVCs em um namespace
kubectl delete pvc --all -n
# Deletar recursos por label
kubectl delete pods -l app=myapp
# Deletar recursos por tipo e label
kubectl delete deployment,service -l app=myapp
==== 2.2. ANÁLISE DE USO DE RECURSOS ====
# Exibir o uso de CPU e memória dos pods
kubectl top pods
# Exibir o uso de CPU e memória dos nodes
kubectl top nodes
# Exibir o uso detalhado de recursos em todos os namespaces
kubectl top pods --all-namespaces
# Exibir o uso de recursos de um pod específico
kubectl top pod
===== 3. DICAS AVANÇADAS E DEBUG =====
==== 3.1. APLICAR MANIFESTOS YAML ====
# Aplicar um manifesto YAML (criar ou atualizar)
kubectl apply -f
# Aplicar todos os manifestos em um diretório
kubectl apply -f
# Aplicar um manifesto com validação prévia (dry-run)
kubectl apply -f --dry-run=client
# Aplicar e visualizar as mudanças que serão feitas
kubectl apply -f --dry-run=server
# Deletar recursos definidos em um manifesto
kubectl delete -f
# Exibir o manifesto de um recurso em formato YAML
kubectl get -o yaml
# Exibir o manifesto de um recurso em formato JSON
kubectl get -o json
# Editar um recurso diretamente
kubectl edit
# Aplicar um patch (modificação parcial) a um recurso
kubectl patch -p '{"spec":{"replicas":3}}'
==== 3.2. LABELS E SELETORES ====
# Listar recursos com um label específico
kubectl get pods -l app=myapp
# Listar recursos com múltiplos labels
kubectl get pods -l app=myapp,tier=frontend
# Listar recursos que NÃO possuem um label
kubectl get pods -l '!app'
# Adicionar um label a um pod
kubectl label pod app=myapp
# Remover um label de um pod
kubectl label pod app-
# Adicionar um label a todos os pods com um seletor
kubectl label pods -l app=oldname app=newname --overwrite
# Exibir labels de um recurso
kubectl get pods --show-labels
==== 3.3. PORT FORWARDING ====
# Encaminhar uma porta local para um pod
kubectl port-forward pod/ 8080:8080
# Encaminhar uma porta local para um service
kubectl port-forward service/ 8080:80
# Encaminhar uma porta local para um deployment
kubectl port-forward deployment/ 8080:8080
# Encaminhar em background
kubectl port-forward pod/ 8080:8080 &
==== 3.4. ROLLOUTS E ATUALIZAÇÕES ====
# Verificar o status de um rollout
kubectl rollout status deployment/
# Visualizar o histórico de revisões
kubectl rollout history deployment/
# Visualizar detalhes de uma revisão específica
kubectl rollout history deployment/ --revision=
# Reverter para a versão anterior
kubectl rollout undo deployment/
# Reverter para uma revisão específica
kubectl rollout undo deployment/ --to-revision=
# Pausar um rollout
kubectl rollout pause deployment/
# Retomar um rollout pausado
kubectl rollout resume deployment/
# Reiniciar um deployment (mata todos os pods e cria novos)
kubectl rollout restart deployment/
==== 3.5. DEBUGGING E TROUBLESHOOTING ====
# Descrever um recurso (informações detalhadas e eventos)
kubectl describe
# Visualizar eventos do cluster
kubectl get events
# Visualizar eventos de um namespace específico
kubectl get events -n
# Visualizar eventos ordenados por timestamp
kubectl get events --sort-by='.lastTimestamp'
# Verificar a saúde de um node
kubectl describe node
# Listar todos os nodes
kubectl get nodes
# Exibir informações detalhadas de um node
kubectl describe node
# Verificar os logs do kubelet em um node (requer acesso SSH)
journalctl -u kubelet -n 100
# Executar um comando de debug em um pod
kubectl debug pod/ -it --image=busybox
# Criar um pod de debug efêmero
kubectl run -it --rm debug --image=busybox --restart=Never -- sh
# Verificar a capacidade de um node
kubectl describe node | grep -A 5 "Allocated resources"
==== 3.6. RECURSOS CUSTOMIZADOS (CRD) ====
# Listar todos os Custom Resource Definitions
kubectl get crd
# Exibir informações sobre um CRD
kubectl describe crd
# Listar recursos customizados de um tipo específico
kubectl get
# Deletar um recurso customizado
kubectl delete
==== 3.7. RBAC (Role-Based Access Control) ====
# Listar todas as Roles
kubectl get roles
# Listar todas as ClusterRoles
kubectl get clusterroles
# Exibir informações sobre uma Role
kubectl describe role
# Listar todas as RoleBindings
kubectl get rolebindings
# Listar todas as ClusterRoleBindings
kubectl get clusterrolebindings
# Criar uma Role a partir de um manifesto
kubectl apply -f
# Criar uma RoleBinding
kubectl create rolebinding --clusterrole= --serviceaccount=:
# Verificar permissões de um usuário
kubectl auth can-i get pods --as=
# Verificar permissões de uma service account
kubectl auth can-i get pods --as=system:serviceaccount::
==== 3.8. MONITORAMENTO E MÉTRICAS ====
# Exibir uso de recursos dos pods
kubectl top pods
# Exibir uso de recursos dos nodes
kubectl top nodes
# Exibir uso detalhado de recursos
kubectl top pods --all-namespaces --containers
# Obter informações de um pod em formato JSON
kubectl get pod -o json
# Exibir apenas o status de um pod
kubectl get pod -o jsonpath='{.status.phase}'
# Exibir o IP de um pod
kubectl get pod -o jsonpath='{.status.podIP}'
# Exibir o node em que um pod está rodando
kubectl get pod -o jsonpath='{.spec.nodeName}'
==== 3.9. FERRAMENTAS COMPLEMENTARES ====
# Instalar o Helm (gerenciador de pacotes para Kubernetes)
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# Adicionar um repositório Helm
helm repo add
# Listar repositórios Helm
helm repo list
# Buscar um chart no repositório
helm search repo
# Instalar um chart Helm
helm install
# Listar releases Helm instalados
helm list
# Atualizar um release Helm
helm upgrade
# Desinstalar um release Helm
helm uninstall
# Instalar o Kustomize (ferramenta de customização de manifestos)
curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | bash
# Aplicar um Kustomization
kubectl apply -k
==== 3.10. NETWORK POLICIES ====
# Listar todas as Network Policies
kubectl get networkpolicies
# Exibir informações sobre uma Network Policy
kubectl describe networkpolicy
# Criar uma Network Policy a partir de um manifesto
kubectl apply -f
# Deletar uma Network Policy
kubectl delete networkpolicy
===== 4. DICAS IMPORTANTES E ALIASES =====
==== 4.1. DICAS IMPORTANTES ====
1. **Sempre use namespaces**: Organize seus recursos em namespaces para melhor isolamento e gerenciamento.
2. **Use labels e seletores**: Labels facilitam a organização e seleção de recursos.
3. **Implemente resource requests e limits**: Defina requisitos de CPU e memória para evitar problemas de scheduling.
4. **Use Health Checks**: Configure liveness probes e readiness probes para melhor confiabilidade.
5. **Versione seus manifestos**: Mantenha seus arquivos YAML em controle de versão (Git).
6. **Use ConfigMaps e Secrets**: Separe configuração de código.
7. **Implemente RBAC**: Restrinja permissões usando Roles e RoleBindings.
8. **Monitore seus recursos**: Use `kubectl top` e ferramentas de monitoramento para acompanhar o uso de recursos.
==== 4.2. ALIASES AVANÇADOS (ADICIONAR AO ~/.bashrc) ====
# Listar pods com mais detalhes
alias kgp='kubectl get pods'
alias kgpa='kubectl get pods --all-namespaces'
alias kgpw='kubectl get pods -o wide'
# Listar deployments
alias kgd='kubectl get deployments'
alias kgda='kubectl get deployments --all-namespaces'
# Listar services
alias kgs='kubectl get services'
alias kgsa='kubectl get services --all-namespaces'
# Descrever recursos
alias kdp='kubectl describe pod'
alias kdd='kubectl describe deployment'
alias kds='kubectl describe service'
# Logs
alias kl='kubectl logs'
alias klf='kubectl logs -f'
# Executar comando em um pod
alias kex='kubectl exec -it'
# Aplicar manifesto
alias ka='kubectl apply -f'
# Deletar recurso
alias kdel='kubectl delete'
# Port forwarding
alias kpf='kubectl port-forward'
# Editar recurso
alias ke='kubectl edit'
# Rollout
alias kr='kubectl rollout'
# Contexto
alias kcc='kubectl config current-context'
alias kcu='kubectl config use-context'
# Namespace
alias kn='kubectl config set-context --current --namespace'
alias kgn='kubectl get namespaces'
# Listar todos os recursos
alias kga='kubectl get all'
# Obter informações do cluster
alias kci='kubectl cluster-info'
# Verificar versão
alias kv='kubectl version --client'
===== 5. EXEMPLOS PRÁTICOS =====
==== 5.1. EXEMPLO: DEPLOYMENT COM NGINX ====
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
resources:
requests:
memory: "64Mi"
cpu: "100m"
limits:
memory: "128Mi"
cpu: "500m"
livenessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 15
periodSeconds: 20
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 5
periodSeconds: 10
==== 5.2. EXEMPLO: SERVICE PARA EXPOR O DEPLOYMENT ====
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
==== 5.3. EXEMPLO: CONFIGMAP ====
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
database_url: "postgresql://db:5432/myapp"
debug_mode: "false"
log_level: "info"
==== 5.4. EXEMPLO: SECRET ====
apiVersion: v1
kind: Secret
metadata:
name: app-secrets
type: Opaque
stringData:
database_user: "admin"
database_password: "securepassword123"
==== 5.5. EXEMPLO: PERSISTENT VOLUME E PERSISTENT VOLUME CLAIM ====
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-storage
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-storage
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
==== 5.6. EXEMPLO: INGRESS ====
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
spec:
ingressClassName: nginx
rules:
- host: myapp.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-service
port:
number: 80
==== 5.7. EXEMPLO: STATEFULSET ====
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
spec:
serviceName: mysql
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.7
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: password
volumeMounts:
- name: mysql-storage
mountPath: /var/lib/mysql
volumeClaimTemplates:
- metadata:
name: mysql-storage
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 10Gi
==== 5.8. EXEMPLO: DAEMONSET ====
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-exporter
spec:
selector:
matchLabels:
app: node-exporter
template:
metadata:
labels:
app: node-exporter
spec:
containers:
- name: node-exporter
image: prom/node-exporter:latest
ports:
- containerPort: 9100
volumeMounts:
- name: proc
mountPath: /host/proc
readOnly: true
- name: sys
mountPath: /host/sys
readOnly: true
volumes:
- name: proc
hostPath:
path: /proc
- name: sys
hostPath:
path: /sys
==== 5.9. EXEMPLO: JOB ====
apiVersion: batch/v1
kind: Job
metadata:
name: backup-job
spec:
template:
spec:
containers:
- name: backup
image: backup-image:latest
command: ["bash", "-c", "backup-script.sh"]
restartPolicy: Never
backoffLimit: 3
==== 5.10. EXEMPLO: CRONJOB ====
apiVersion: batch/v1
kind: CronJob
metadata:
name: daily-backup
spec:
schedule: "0 2 * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: backup
image: backup-image:latest
command: ["bash", "-c", "backup-script.sh"]
restartPolicy: OnFailure
===== 6. SCRIPTS ÚTEIS =====
=== Script: Listar todos os recursos do cluster ===
#!/bin/bash
# Lista todos os recursos do cluster de forma organizada
echo "=== NODES ==="
kubectl get nodes
echo -e "\n=== NAMESPACES ==="
kubectl get namespaces
echo -e "\n=== PODS (todos os namespaces) ==="
kubectl get pods -A
echo -e "\n=== DEPLOYMENTS ==="
kubectl get deployments -A
echo -e "\n=== SERVICES ==="
kubectl get services -A
echo -e "\n=== INGRESS ==="
kubectl get ingress -A
echo -e "\n=== PERSISTENT VOLUMES ==="
kubectl get pv
echo -e "\n=== PERSISTENT VOLUME CLAIMS ==="
kubectl get pvc -A
echo -e "\n=== CONFIGMAPS ==="
kubectl get configmaps -A
echo -e "\n=== SECRETS ==="
kubectl get secrets -A
=== Script: Deletar todos os recursos em um namespace ===
#!/bin/bash
# Deleta todos os recursos em um namespace específico
NAMESPACE=${1:-default}
echo "Deletando todos os recursos no namespace: $NAMESPACE"
kubectl delete all --all -n $NAMESPACE
kubectl delete configmaps --all -n $NAMESPACE
kubectl delete secrets --all -n $NAMESPACE
kubectl delete pvc --all -n $NAMESPACE
echo "Limpeza concluída!"
=== Script: Monitorar recursos em tempo real ===
#!/bin/bash
# Monitora o uso de recursos dos pods em tempo real
echo "Monitorando uso de recursos (Ctrl+C para sair)..."
watch -n 2 'kubectl top pods --all-namespaces'
===== 7. TROUBLESHOOTING COMUM =====
==== Problema: Pod não inicia ====
# 1. Verificar o status do pod
kubectl describe pod
# 2. Verificar os logs
kubectl logs
# 3. Verificar eventos
kubectl get events --sort-by='.lastTimestamp'
# 4. Verificar se a imagem existe
kubectl get pod -o jsonpath='{.spec.containers[0].image}'
# 5. Verificar recursos disponíveis no node
kubectl describe node
==== Problema: Pod em estado CrashLoopBackOff ====
# 1. Verificar logs anteriores
kubectl logs --previous
# 2. Descrever o pod para ver eventos
kubectl describe pod
# 3. Verificar o comando de inicialização
kubectl get pod -o yaml | grep -A 5 "command:"
# 4. Testar a imagem localmente
docker run -it : /bin/bash
==== Problema: Service não consegue alcançar o pod ====
# 1. Verificar se o service existe
kubectl get service
# 2. Verificar os endpoints
kubectl get endpoints
# 3. Verificar os labels do pod e do service
kubectl get pod --show-labels
kubectl get service -o yaml | grep -A 5 "selector:"
# 4. Testar conectividade dentro do cluster
kubectl run -it --rm debug --image=busybox --restart=Never -- wget -O- http://