GitHub EN PT

K8s em Exemplos: kubectl Básico

kubectl é a ferramenta de linha de comando para Kubernetes. Estes são os comandos que você usará diariamente. A maioria segue o padrão kubectl [verbo] [recurso] [nome].

terminal

Liste recursos. Funciona com qualquer tipo de recurso: pods, services, deployments, nodes, configmaps, secrets, etc.

$ kubectl get pods
$ kubectl get svc
$ kubectl get deploy
$ kubectl get nodes
$ kubectl get all          # pods, services, deployments, replicasets
terminal

Flags comuns: -o wide mostra mais colunas, -o yaml mostra o spec completo, -w observa mudanças, -A mostra todos os namespaces.

$ kubectl get pods -o wide           # mostra node, IP
$ kubectl get pods -o yaml           # saída YAML completa
$ kubectl get pods -w                # observa mudanças
$ kubectl get pods -A                # todos os namespaces
$ kubectl get pods -l app=nginx      # filtra por label
terminal

Mostra informações detalhadas sobre um recurso. Inclui eventos, que são essenciais para debugar por que algo não está funcionando.

$ kubectl describe pod my-pod
Name:         my-pod
Namespace:    default
Node:         kind-worker/172.18.0.3
Status:       Running
IP:           10.244.1.5
...
Events:
  Type    Reason     Age   Message
  Normal  Scheduled  10s   Successfully assigned
  Normal  Pulled     8s    Container image pulled
  Normal  Started    7s    Started container
terminal

apply cria ou atualiza recursos de um arquivo. delete os remove. Estes são os comandos que você usará para fazer deploy.

$ kubectl apply -f deployment.yaml   # criar ou atualizar
$ kubectl apply -f ./manifests/      # aplicar todos os arquivos do diretório
$ kubectl delete -f deployment.yaml  # deletar recursos do arquivo
$ kubectl delete pod my-pod          # deletar por nome
$ kubectl delete pods --all          # deletar todos os pods no namespace
terminal

Veja logs do container. Adicione -f para stream em tempo real (como tail -f). Use —previous para ver logs de um container que crashou.

$ kubectl logs my-pod                # mostra logs
$ kubectl logs my-pod -f             # stream de logs
$ kubectl logs my-pod --previous     # logs do container que crashou
$ kubectl logs my-pod -c nginx       # container específico no pod
$ kubectl logs -l app=nginx          # logs de todos os pods com o label
terminal

Execute comandos dentro de um container. Use -it para um shell interativo. Essencial para debugging.

$ kubectl exec my-pod -- ls /app           # executar comando
$ kubectl exec my-pod -it -- sh            # shell interativo
$ kubectl exec my-pod -it -- /bin/bash     # bash se disponível
$ kubectl exec my-pod -c nginx -it -- sh   # container específico
terminal

Encaminha uma porta local para um pod ou service. Útil para testar sem expor services externamente.

$ kubectl port-forward pod/my-pod 8080:80      # encaminhar para pod
$ kubectl port-forward svc/my-svc 8080:80      # encaminhar para service
$ kubectl port-forward deploy/my-app 8080:80   # encaminhar para deployment
terminal

Forma rápida de rodar um pod sem escrever YAML. Bom para debugging. Adicione —rm -it para um pod temporário que é deletado ao sair.

$ kubectl run nginx --image=nginx                    # criar pod
$ kubectl run debug --image=alpine --rm -it -- sh    # pod temporário de debug
$ kubectl run curl --image=curlimages/curl --rm -it -- curl my-svc
terminal

Gerencie contextos de cluster. Um contexto combina cluster, usuário e namespace. Troque entre clusters com use-context.

$ kubectl config get-contexts           # listar contextos
$ kubectl config current-context        # mostrar atual
$ kubectl config use-context my-cluster # trocar contexto
$ kubectl config set-context --current --namespace=dev  # definir ns padrão
terminal

Quando algo não está funcionando: verifique status do pod, leia eventos, verifique logs.

# 1. Verifique status do pod
$ kubectl get pods

# 2. Se não estiver Running, verifique eventos
$ kubectl describe pod my-pod | grep -A 20 Events

# 3. Se estiver Running mas não funcionando, verifique logs
$ kubectl logs my-pod

# 4. Se logs não ajudarem, entre no shell
$ kubectl exec my-pod -it -- sh

Índice | Use as setas do teclado para navegar