Básico do kubectl
Informações do Cluster
kubectl cluster-info kubectl get nodes kubectl config current-context kubectl config use-context my-cluster
Comandos Essenciais
kubectl get <resource>Listar recursos
kubectl describe <resource> <name>Informações detalhadas do recurso
kubectl create -f file.yamlCriar recurso a partir de arquivo
kubectl apply -f file.yamlCriar ou atualizar recurso
kubectl delete -f file.yamlExcluir recurso a partir de arquivo
kubectl edit <resource> <name>Editar recurso no local
kubectl api-resourcesListar todos os tipos de recurso
Formatos de Saída
-o wideColunas extras (IP, nó)
-o yamlSaída YAML completa
-o jsonSaída JSON completa
-o jsonpath='{.spec}'Extrair campos específicos
--sort-by=.metadata.nameOrdenar saída por campo
Pods
Operações com Pods
kubectl get pods kubectl get pods -A # all namespaces kubectl run nginx --image=nginx # quick pod kubectl delete pod nginx
YAML de Pod
apiVersion: v1 kind: Pod metadata: name: myapp labels: { app: myapp } spec: containers: - name: app image: nginx:1.27 ports: - containerPort: 80
Valores de Status de Pod
RunningTodos os containers iniciados
PendingAguardando agendamento ou pull da imagem
CrashLoopBackOffContainer fica quebrando e reiniciando
ImagePullBackOffNão é possível fazer pull da imagem do container
CompletedExecutou até a conclusão (Jobs)
Deployments
YAML de Deployment
apiVersion: apps/v1 kind: Deployment metadata: name: web spec: replicas: 3 selector: matchLabels: { app: web } template: metadata: labels: { app: web } spec: containers: - name: web image: nginx:1.27 ports: - containerPort: 80
Comandos de Deployment
kubectl get deployListar deployments
kubectl scale deploy web --replicas=5Escalar réplicas
kubectl set image deploy/web web=nginx:1.28Atualizar imagem (rolling)
kubectl rollout status deploy/webMonitorar progresso do rollout
kubectl rollout undo deploy/webReverter para revisão anterior
kubectl rollout history deploy/webVer histórico de revisões
Services
Tipos de Service
ClusterIPSomente interno (padrão)
NodePortExpõe no IP de cada nó em porta estática
LoadBalancerLoad balancer externo (nuvem)
ExternalNameAlias DNS para serviço externo
YAML de Service
apiVersion: v1 kind: Service metadata: name: web-svc spec: type: ClusterIP selector: { app: web } ports: - port: 80 targetPort: 80
Expose Rápido
kubectl expose deploy web --port=80 --type=ClusterIP kubectl expose deploy web --port=80 --type=NodePort kubectl get svc
ConfigMaps e Secrets
ConfigMap
kubectl create configmap app-cfg \ --from-literal=DB_HOST=db.example.com \ --from-file=config.ini
Secret
kubectl create secret generic db-creds \ --from-literal=username=admin \ --from-literal=password=s3cret
Usando em Pods
# As environment variables envFrom: - configMapRef: { name: app-cfg } - secretRef: { name: db-creds } # As volume mount volumes: - name: cfg configMap: { name: app-cfg }
Comandos
kubectl get cmListar ConfigMaps
kubectl get secretListar Secrets
kubectl describe cm app-cfgExibir dados do ConfigMap
kubectl get secret db-creds -o yamlExibir Secret (codificado em base64)
Namespaces
Comandos de Namespace
kubectl get nsListar namespaces
kubectl create ns stagingCriar namespace
kubectl delete ns stagingExcluir namespace e todos os recursos
kubectl get pods -n stagingListar pods no namespace
kubectl get pods -AListar pods em todos os namespaces
Definir Namespace Padrão
kubectl config set-context --current \ --namespace=staging
Volumes
PersistentVolumeClaim
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: data-pvc spec: accessModes: [ReadWriteOnce] resources: requests: { storage: 10Gi }
Montar em Pod
volumes: - name: data persistentVolumeClaim: claimName: data-pvc containers: - volumeMounts: - name: data mountPath: /app/data
Tipos de Volume
emptyDirDiretório temporário, excluído com o pod
hostPathMonta caminho do sistema de arquivos do host
persistentVolumeClaimArmazenamento persistente (PVC)
configMapMonta ConfigMap como arquivos
secretMonta Secret como arquivos
Ingress
YAML de Ingress
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: web-ingress spec: rules: - host: app.example.com http: paths: - path: / pathType: Prefix backend: service: name: web-svc port: { number: 80 }
Notas sobre Ingress
Ingress ControllerNecessário (nginx-ingress, traefik, etc.)
pathType: PrefixCorresponde ao prefixo da URL
pathType: ExactCorresponde ao caminho exato da URL
TLSAdicione seção tls: com nome do secret
Depuração
Comandos de Diagnóstico
kubectl logs <pod>stdout/stderr do container
kubectl logs <pod> -c <ctr>Logs de container específico
kubectl logs <pod> --previousLogs de container que falhou
kubectl describe pod <pod>Eventos, condições, status
kubectl exec -it <pod> -- shShell no container
kubectl port-forward <pod> 8080:80Encaminhar porta local para o pod
kubectl top podsUso de CPU/memória (metrics-server)
kubectl get events --sort-by=.lastTimestampLinha do tempo de eventos do cluster
Pod de Depuração
kubectl run debug --rm -it --image=busybox -- sh # or attach ephemeral container kubectl debug -it --image=busybox
Padrões Comuns
Labels e Seletores
kubectl get pods -l app=web kubectl get pods -l 'env in (prod,staging)' kubectl label pod myapp env=prod
Limites de Recursos
resources: requests: { cpu: 100m, memory: 128Mi } limits: { cpu: 500m, memory: 256Mi }
Liveness e Readiness
livenessProbe: httpGet: { path: /healthz, port: 8080 } initialDelaySeconds: 5 periodSeconds: 10 readinessProbe: httpGet: { path: /ready, port: 8080 }
Receitas Rápidas
Dry runkubectl apply -f file.yaml --dry-run=client
Gerar YAMLkubectl create deploy web --image=nginx --dry-run=client -o yaml
Watchkubectl get pods -w
Copiar arquivoskubectl cp file.txt pod:/tmp/
Reiniciar deploykubectl rollout restart deploy/web