Kubernetes: meu cheat sheet pessoal

Jan 16, 2020 4 min leitura
Atenção: esse post foi escrito há algum tempo e pode necessitar atualizações, ok?

Se sua infraestrutura é composta por um cluster Kubernetes, você provavelmente tem um conjunto de comandos em mãos para tarefas comuns. A documentação do Google fornece um cheat sheet útil que você deve dar uma olhada. Porém, neste post irei compartilhar alguns comandos que uso / tenho usado.

Comandos Gcloud

  • Obter credenciais: gcloud container clusters get-credentials <CLUSTER-NAME> --zone <ZONE> --project <PROJECT-ID>
  • Obter imagens que você fez upload: gcloud container images list-tags gcr.io/<project-id>/<image-name> [--limit <N>]
  • Obter a última imagem do registry: gcloud container images list-tags gcr.io/<project-id>/<image-name> --limit 1 | tail -1 | awk '{print $2}'

Comandos Básicos

  • Verifique o contexto atual (melhor usar kubectx): kubectl config current-context
  • Você iniciou algum job? Melhor verificar: kubectl get jobs,pods [-n <NAMESPACE> | --all-namespaces | -o wide]
  • Quantos nós no cluster? kubectl get nodes [-o wide]
  • Liste os recursos: kubectl get all,svc,deploy,configmaps,secrets,ingress,hpa [-n <NAMESPACE> | --all-namespaces]
  • Quais namespaces seu cluster tem? kubectl get namespaces
  • Exporte um deployment (útil para debugar o yaml): kubectl get deploy <NAME> -o yaml --export
  • Obtenha o Managed Certificate: kubectl describe managedcertificate [-n <NAMESPACE>]
  • Faça encaminhamento de porta: kubectl port-forward [-n <NAMESPACE>] svc/<SERVICE-NAME> <LOCAL-PORT>:<REMOTE-PORT>
  • Suspenda um CronJob: kubectl patch cronjobs <cronjob-name> -p '{"spec" : {"suspend" : true }}' [-n <NAMESPACE>]
  • Crie um job a partir de um Cronjob: kubectl create job --from=cronjob/<YOUR-CRONJOB-NAME> <GIVE-A-NAME>

Dica: prefixes seus comandos com watch para ficar de olho no output. Por exemplo, se você fez deploy de uma nova imagem, verifique o progresso com o comando watch kubectl get pods [-n namespace].

Deploy

  • Liste todos os deployments: kubectl get deployments --all-namespaces
  • Criar ou deletar um deploy é fácil: kubectl [apply|delete] -f <FOLDER-OR-FILE>
  • Escale: kubectl scale deploy <DEPLOY-NAME> [-n <NAMESPACE>] --replicas=<N>
  • Faça rollback de um deploy: kubectl rollout undo deployment/<DEPLOY-NAME> [-n <NAMESPACE>]
  • Delete evicted pods: kubectl [-n <NAMESPACE>] delete pods --field-selector=status.phase=Failed
  • Delete todos os pods: kubectl delete --all pods [-n <NAMESPACE>]
  • Restart nos pods: kubectl rollout restart deployment <DEPLOY-NAME> [-n <NAMESPACE>]

Dicas:_

  1. Nunca use Evite usar o comando scale deploy pois você vai acabar criando uma diferença entre os arquivos yaml files e o que está aplicado no cluster, tornando uma bagunça descobrir o que está correto. Tudo bem usar em um cenário de emergência mas lembre-se de sempre atualizar o arquivo yaml ou os arquivos de HPA. No cenário normal, mantenha seus arquivos yaml atualizados e aplique-os para mudar o estado do cluster.
  2. Configurando --replicas=0 é uma boa forma de parar o serviço por um período de tempo uma vez que você não deleta o deployment (mas releia a dica anterior).

Solução de problemas

  • Tenha uma visão geral dos deployments: kubectl describe deploy <DEPLOY-NAME> [-n <NAMESPACE>]
  • Tenha uma visão geral do pod: kubectl describe pod <POD-NAME> [-n <NAMESPACE>]
  • Verifique os logs: kubectl logs -f <POD-NAME> [-n <NAMESPACE>] [--tail=<N>]
  • Verifique os logs de um container anterior: kubectl logs <POD-NAME> -c <CONTAINER-NAME> --previous
  • Verifique os logs de todos os containers que possuem uma label: kubectl logs -f -l <KEY>=<VALUE> --all-containers
  • Obtenha uma shell interativo: kubectl exec -it <POD-NAME> [-n <NAMESPACE>] -- /bin/bash
  • Faça o dump de um recurso para um arquivo yaml: `kubectl get -o yaml > .yaml
  • Obtenha as métricas de memória e cpu memory: ** Todos os nós: kubectl top nodes ** Um nó: kubectl top node <NODE-NAME> ** Pod: kubectl top pod <POD-NAME> [-n <NAMESPACE>]
  • Escalonamento / Migração

    • Marque um nó não-escalável: kubectl cordon <NODE-NAME>
    • Marque um nó escalável: kubectl uncordon <NODE-NAME>

    Helm

    • Solucione o erro devido a versões incompatíveis de client: helm init --upgrade
    • Liste os deployments do Helm: helm ls
    • Delete um deploy do helm: helm delete <NAME> --purge
    • Instale um chart: helm install <CHART-NAME> --name <YOUR-DEPLOY-NAME> -f <YAML-FILE> [--namespace <NAMESPACE>]
    • Atualize um chart: helm upgrade <NAME> <CHART> -f <YAML-FILE>

    Isso é tudo, pessoal! À medida que eu utilizar mais comandos eu atualizo este post.

    • Tags:
    • kubernetes
    • devops
    • cheat
    • sheet
    • commands
    • k8s