Comandos úteis e mais usados no Kubernetes
Sabemos que o Kubernetes é uma ferramenta muito utilizada para rodar aplicações em diversas escalas, com esse uso tão comum é essencial que saibamos lidar com ele, então vou listar alguns comandos que considero importante para uso durante o desenvolvimento de aplicações, testes e afins.
Para que seus comandos funcionem de forma correta, você precisa já ter configurado o contexto e namespace do seu cluster no seu terminal. Levando em consideração que você já tenha o seu arquivo kubeConfig, para configurar ou trocar de contexto/namespace, você pode usar o seguinte comando:
kubectl config set-context <SEU-CONTEXTO> --namespace <SEU-NAMESPACE>
Pods
O pod é a menor unidade do Kubernetes, é dentro dele que temos os contêineres, segue abaixo alguns comandos:
# Listar os pods
kubectl get pods
# Listagem com mais detalhes
kubectl get pods -o wide
# Criar um YAML do pod descrito
kubectl get pod <NOME-POD> -o yaml > pod.yaml
# Informações detalhadas de um determinado pod
kubectl describe <NOME-POD>
# Executar um comando dentro do container do pod
kubectl exec -it <NOME-POD> -c <NOME-CONTAINER> -- <COMANDO>
## O nome do container pode ser suprimido caso só exista um dentro do pod
### Exemplo:
kubectl exec -it nginx -- sh
#Copiar conteúdo para dentro do Pod ou para o seu computador
kubectl cp <SOURCE> <DESTINATION>
kubectl cp ~/meu/caminho/local <NOME-POD>:/src/app -c <NOME-CONTAINER> --v=4
Deployments
O deployment é o que controla o Replica Set que por sua vez controla os pods, vamos ver alguns comandos:
# Lista os deployments
kubectl get deployments
# Lista os deployments com mais detalhes
kubectl get deployments -o wide
# Criar um YAML do deployments descrito
kubectl get deployment <NOME-DEPLOY> -o yaml > deploy.yaml
# Informações detalhadas de um determinado deployment
kubectl describe <NOME-DEPLOY>
# Durante uma atualização use esse comando para acompanhar o andamento
kubectl rollout status deployment <NOME-DEPLOY>
# Pausar deployment, útil quando você tem pipelines que controlam o processo e não quer que seja atualizado por alguma motivo
kubectl rollout pause deployment <NOME-DEPLOY>
# Remover do pause
kubectl rollout resume deployment <NOME-DEPLOY>
Services
O Service nada mais é uma forma de você expor a sua aplicação, existem 3 tipos de services:
- ClusterIP: Cria um serviço (IP) que só funciona dentro do cluster
- NodePort: Expõe uma porta dos seus nodes para expor o serviço
- LoadBalancer: Cria um LoadBalancer
Alguns comandos:
# Lista os services
kubectl get services
# Lista os services com mais detalhes
kubectl get services -o wide
# Criar um YAML do services descrito
kubectl get services <NOME-SERVICE> -o yaml > deploy.yaml
# Informações detalhadas de um determinado service
kubectl describe <NOME-SERVICE>
# Cria um service
kubectl expose <RECURSO> <NOME-RECURSO> --port <PORTA> --type=<TIPO>
## Exemplo
kubectl expose deployment nginx --port 80 --type=NodePort
Avulsos
# Simular um comando
kubectl <COMANDO> --dry-run=client
# Simular o comando e ter uma saída em YAML
kubectl <COMANDO> --dry-run=client -o yaml > spec.yaml
# Aplicar um arquivo com um ou mais manifestos
kubectl apply -f caminho/do/arquivo.yaml
# Aplicar um arquivo de kustomize
kubectl apply -k caminho/da/pasta
# Mostras as versões de API disponíveis no cluster
kubectl api-versions
# Realizar um port-forward
kubectl port-forward <RECURSO>/<NOME-RECURSO>
## Exemplos:
kubectl port-forward services/nginx-svc 8000:80
kubectl port-forward pods/nginx 8000:80
kubectl port-forward deployments/nginx 8000:80
# Lista os contextos
kubectl config get-contexts
Para facilitar sua vida, caso você não goste do terminal, existe uma “IDE” para o Kubernetes, o nome dela é OpenLens.
O link do projeto no GitHub está aqui.