--- title: kubectl Cheat Sheet content_type: concept card: name: reference weight: 30 --- Esta página contém uma lista de comandos `kubectl` e flags frequentemente usados. ## Kubectl Autocomplete ### BASH ```bash source <(kubectl completion bash) # configuração de autocomplete no bash do shell atual, o pacote bash-completion precisa ter sido instalado primeiro. echo "source <(kubectl completion bash)" >> ~/.bashrc # para adicionar o autocomplete permanentemente no seu shell bash. ``` Você também pode usar uma abreviação para o atalho para `kubectl` que também funciona com o auto completar: ```bash alias k=kubectl complete -o default -F __start_kubectl k ``` ### ZSH ```bash source <(kubectl completion zsh) # configuração para usar autocomplete no terminal zsh no shell atual echo '[[ $commands[kubectl] ]] && source <(kubectl completion zsh)' >> ~/.zshrc # adicionar auto completar permanentemente para o seu shell zsh ``` ### Uma nota sobre `--all-namespaces` Acrescentar `--all-namespaces` acontece com bastante frequência, onde você deve estar ciente da abreviação de `--all-namespaces`: ```kubectl -A``` ## Contexto e Configuração do Kubectl Define com qual cluster Kubernetes o `kubectl` se comunica e modifica os detalhes da configuração. Veja a documentação [Autenticando entre clusters com o kubeconfig](/docs/tasks/access-application-cluster/configure-access-multiple-clusters/) para informações detalhadas do arquivo de configuração. ```bash kubectl config view # Mostra configurações do kubeconfig mergeadas # use vários arquivos kubeconfig ao mesmo tempo e visualize a configuração mergeada KUBECONFIG=~/.kube/config:~/.kube/kubconfig2 kubectl config view # obtenha a senha para o usuário e2e kubectl config view -o jsonpath='{.users[?(@.name == "e2e")].user.password}' kubectl config view -o jsonpath='{.users[].name}' # exibe o primeiro usuário kubectl config view -o jsonpath='{.users[*].name}' # obtém uma lista de usuários kubectl config get-contexts # exibe lista de contextos kubectl config current-context # exibe o contexto atual kubectl config use-context my-cluster-name # define o contexto padrão como my-cluster-name kubectl config set-cluster my-cluster-name # define uma entrada de cluster no kubeconfig # configura a URL para um servidor proxy a ser usado para solicitações feitas por este cliente no kubeconfig kubectl config set-cluster my-cluster-name --proxy-url=my-proxy-url # adiciona um novo cluster ao seu kubeconfig que suporte autenticação básica kubectl config set-credentials kubeuser/foo.kubernetes.com --username=kubeuser --password=kubepassword # salva o namespace permanentemente para todos os comandos subsequentes do kubectl nesse contexto kubectl config set-context --current --namespace=ggckad-s2 # define um contexto utilizando um nome de usuário e o namespace kubectl config set-context gce --user=cluster-admin --namespace=foo \ && kubectl config use-context gce kubectl config unset users.foo # exclui usuário foo # alias curto para definir/mostrar contexto/namespace (funciona apenas para bash e shells compatíveis com bash, contexto atual a ser definido antes de usar kn para definir namespace) alias kx='f() { [ "$1" ] && kubectl config use-context $1 || kubectl config current-context ; } ; f' alias kn='f() { [ "$1" ] && kubectl config set-context --current --namespace $1 || kubectl config view --minify | grep namespace | cut -d" " -f6 ; } ; f' ``` ## Kubectl apply `apply` gerencia aplicações através de arquivos que definem os recursos do Kubernetes. Ele cria e atualiza recursos em um cluster através da execução `kubectl apply`. Esta é a maneira recomendada para gerenciar aplicações Kubernetes em ambiente de produção. Veja a [documentação do Kubectl](https://kubectl.docs.kubernetes.io). ## Criando objetos Manifestos Kubernetes podem ser definidos em YAML ou JSON. As extensões de arquivo `.yaml`, `.yml`, e `.json` podem ser usadas. ```bash kubectl apply -f ./my-manifest.yaml # cria recurso(s) kubectl apply -f ./my1.yaml -f ./my2.yaml # cria a partir de vários arquivos kubectl apply -f ./dir # cria recurso(s) em todos os arquivos de manifesto no diretório kubectl apply -f https://git.io/vPieo # cria recurso(s) a partir de URL kubectl create deployment nginx --image=nginx # inicia uma única instância do nginx # cria um Job que exibe "Hello World" kubectl create job hello --image=busybox:1.28 -- echo "Hello World" # cria um CronJob que exibe "Hello World" a cada minuto kubectl create cronjob hello --image=busybox:1.28 --schedule="*/1 * * * *" -- echo "Hello World" kubectl explain pods # obtém a documentação de manifesto do pod # Cria vários objetos YAML a partir de stdin cat < pod.yaml # Gera a especificação para executar o pod nginx e grave-a em um arquivo chamado pod.yaml kubectl attach my-pod -i # Anexa ao contêiner em execução kubectl port-forward my-pod 5000:6000 # Ouça na porta 5000 na máquina local e encaminhe para a porta 6000 no my-pod kubectl exec my-pod -- ls / # Executa comando no pod existente (1 contêiner) kubectl exec --stdin --tty my-pod -- /bin/sh # Acesso de shell interativo a um pod em execução (apenas 1 contêiner) kubectl exec my-pod -c my-container -- ls / # Executa comando no pod existente (pod com vários contêineres) kubectl top pod POD_NAME --containers # Mostra métricas para um determinado pod e seus contêineres kubectl top pod POD_NAME --sort-by=cpu # Mostra métricas para um determinado pod e classificá-lo por 'cpu' ou 'memória' ``` ## Copiando arquivos e diretórios de e para contêineres ```bash kubectl cp /tmp/foo_dir my-pod:/tmp/bar_dir # Copia o diretório local /tmp/foo_dir para /tmp/bar_dir em um pod remoto no namespace atual kubectl cp /tmp/foo my-pod:/tmp/bar -c my-container # Copia o arquivo local /tmp/foo para /tmp/bar em um pod remoto em um contêiner específico kubectl cp /tmp/foo my-namespace/my-pod:/tmp/bar # Copia o arquivo local /tmp/foo para /tmp/bar em um pod remoto no namespace my-namespace kubectl cp my-namespace/my-pod:/tmp/foo /tmp/bar # Copia /tmp/foo de um pod remoto para /tmp/bar localmente ``` {{< note >}} `kubectl cp` requer que o binário 'tar' esteja presente em sua imagem de contêiner. Se 'tar' não estiver presente, `kubectl cp` falhará. Para casos de uso avançado, como links simbólicos, expansão curinga ou preservação do modo de arquivo, considere usar `kubectl exec`. {{< /note >}} ```bash tar cf - /tmp/foo | kubectl exec -i -n my-namespace my-pod -- tar xf - -C /tmp/bar # Copia o arquivo local /tmp/foo para /tmp/bar em um pod remoto no namespace my-namespace kubectl exec -n my-namespace my-pod -- tar cf - /tmp/foo | tar xf - -C /tmp/bar # Copia /tmp/foo de um pod remoto para /tmp/bar localmente ``` ## Interagindo com implantações e serviços ```bash kubectl logs deploy/my-deployment # despeja logs de pod para uma implantação (caso de contêiner único) kubectl logs deploy/my-deployment -c my-container # despeja logs de pod para uma implantação (caso de vários contêineres) kubectl port-forward svc/my-service 5000 # escuta na porta local 5000 e encaminhe para a porta 5000 no back-end do serviço kubectl port-forward svc/my-service 5000:my-service-port # escuta na porta local 5000 e encaminhe para a porta de destino do serviço com o nome kubectl port-forward deploy/my-deployment 5000:6000 # escuta na porta local 5000 e encaminhe para a porta 6000 em um pod criado por kubectl exec deploy/my-deployment -- ls # executa o comando no primeiro pod e primeiro contêiner na implantação (casos de um ou vários contêineres) ``` ## Interagindo com Nós e Cluster ```bash kubectl cordon my-node # Marca o nó my-node como não agendável kubectl drain my-node # Drena o nó my-node na preparação para manutenção kubectl uncordon my-node # Marca nó my-node como agendável kubectl top node my-node # Mostra métricas para um determinado nó kubectl cluster-info # Exibe endereços da master e serviços kubectl cluster-info dump # Despeja o estado atual do cluster no stdout kubectl cluster-info dump --output-directory=/path/to/cluster-state # Despeja o estado atual do cluster em /path/to/cluster-state # Veja os taints existentes nos nós atuais. kubectl get nodes -o='custom-columns=NodeName:.metadata.name,TaintKey:.spec.taints[*].key,TaintValue:.spec.taints[*].value,TaintEffect:.spec.taints[*].effect' # Se uma `taint` com essa chave e efeito já existir, seu valor será substituído conforme especificado. kubectl taint nodes foo dedicated=special-user:NoSchedule ``` ### Tipos de Recursos Lista todos os tipos de recursos suportados junto com seus nomes abreviados, [grupo de API](/docs/concepts/overview/kubernetes-api/#api-groups-and-versioning), sejam eles [namespaced](/docs/concepts/overview/working-with-objects/namespaces) e [Kind](/docs/concepts/overview/working-with-objects/kubernetes-objects): ```bash kubectl api-resources ``` Outras operações para explorar os recursos da API: ```bash kubectl api-resources --namespaced=true # Todos os recursos com namespace kubectl api-resources --namespaced=false # Todos os recursos sem namespace kubectl api-resources -o name # Todos os recursos com saída simples (apenas o nome do recurso) kubectl api-resources -o wide # Todos os recursos com saída expandida (também conhecida como "ampla") kubectl api-resources --verbs=list,get # Todos os recursos que suportam os verbos de API "list" e "get" kubectl api-resources --api-group=extensions # Todos os recursos no grupo de API "extensions" ``` ### Formatação de saída Para enviar detalhes para a janela do terminal em um formato específico, adicione a flag `-o` (ou `--output`) para um comando `kubectl` suportado. Formato de saída | Descrição --------------| ----------- `-o=custom-columns=` | Exibe uma tabela usando uma lista separada por vírgula de colunas personalizadas `-o=custom-columns-file=` | Exibe uma tabela usando o modelo de colunas personalizadas no arquivo `` `-o=json` | Saída de um objeto de API formatado em JSON `-o=jsonpath=