====== 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://