Obtendo mais do Kubectl
Tags: kubernetes, kubectl, k8s, cluster
Published: 2023-06-24 18:36:46

Que tal se aprofundar um pouco mais no kubectl e tirar mais benefícios dessa ferramenta? vamos conhecer alguns comandos que podem te ajudar a ganhar tempo, trazer conhecimento sobre seu cluster e recursos, depurar e análisar pods e etc.

---

## **ADMINISTRANDO**
**o kub te explica:** o comando explain fornece informações sobre os recursos do kub. Caso você esteja com dúvida na composição de um recurso como um deployment, role e etc, você pode usa-lo para ter um norte, veja o exemplo abaixo:
`kubectl explain roles`
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/69furco2fez4docs3ora.png)


&nbsp;
**será que pode?** Este comando pode ser útil para administradores do cluster, pois permite verificar se um usuário ou grupo tem permissão para executar uma determinada ação.
`kubectl auth can-i delete deploy`
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yusz9j9yuji5s7sx4t4f.png)

_você pode ser ainda mais específico e perguntar se uma determinada service account tem permissão:_
`kubectl auth can-i list pods -n default  --as system:serviceaccount:default:default`
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/izyo9p3qx8g7t9qo0k1x.png)

&nbsp;
**quero uma lista do que tem:** este comando pode ajudar a descobrir os tipos de recursos que podem ser criados no cluster.
`kubectl api-resources`
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bfzw9wzyhh7p6eizlxde.png)

&nbsp;
**hmm contextos:** quando se trabalha com vários clusters é interessante você usar o comando get-contexts para obter dados de todos os clusters configurados e saber em qual cluster você está 'logado'.
`kubectl config get-contexts`
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mbrqtymelm5wlan7bt1d.png)

_para alternar para outro contexto use o comando:_
``kubectl config use-context [nome do contexto]``

&nbsp;
**me fale sobre você kub:** para obter alguns dados sobre o seu cluster, você pode usar o comando abaixo:
`kubectl cluster-info`
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1ydue364v3hctshuyz0n.png)

&nbsp;
**quero um arquivinho:** em determinados momentos pode ser necessário obter o manifesto de um recurso já criado no cluster, seja por não ter mais o manifesto em algum lugar ou por simplesmente querer estuda-lo. É possível fazer isso exportando-o com a flag -o e especificando seu formato, no exemplo abaixo estou extraindo o manifesto do meu deployment que está no cluster para a minha máquina no formato yaml com o nome novo_deploy.yaml:
`kubectl get deploy nginx-deployment -o yaml > novo_deploy.yaml`

&nbsp;
**quero recursos por labels:** as labels são muito úteis no kub e podemos usa-las para filtrar os recursos que queremos ver, um exemplo disso é obter uma lista de pods por labels:
`kubectl get pods -l app=nginx`
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3a1w74gcmfesmyqkgb94.png)

---

# **DEPURANDO**
**me dê logs rapaz:** para visualizar as logs de um pod usamos o comando logs + [nome do pod] + [namespace], confira abaixo:
`kubectl logs nginx-deployment-8cf88777f-l8s2g -n default`
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zw1t5oj6s1linh0pq3n1.png)

_caso queira ver diretamente as logs do container, basta adicionar a flag -c seguido do nome do container._

para consultar e acompanhar as logs do pod basta adicionar a flag -f (--follow):
`kubectl logs -f nginx-deployment-8cf88777f-l8s2g -n default`

&nbsp;
**o que está acontecendo?** o comando get events vai te dar uma visão por namespace dos eventos que estão ocorrendo no cluster.
`kubectl get events -n kube-system`
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6x1f2tlrhf7ewes5t5ho.png)

você pode filtrar os eventos para visualizar por exemplo apenas informações de um determinado recurso.
`kubectl get events -n default --field-selector involvedObject.name=nginx-deployment-8cf88777f-l8s2g`
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cl7f5trtkb0j9ftgjglf.png)

&nbsp;
**descreve ai pra mim:** para analisar as configurações de um recurso criado no cluster você pode usar o comando describe, além disso, no final dos dados retornados por este comando é possível verificar o status/eventos relacionados ao recurso.
`kubectl describe pod nginx-deployment-8cf88777f-l8s2g -n default`
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/47xkmsl7o0znut1rpddg.png)

&nbsp;
**'entra no pod':** o comando exec --it permite executar comandos dentro de um pod ou container. Para executa-lo use kubectl exec --it [nome do pod] + [comando], veja:
`kubectl exec -i -t nginx-deployment-8cf88777f-l8s2g -- /bin/bash`
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p2fmowh5bqaa82aoonxc.png)

> para acessar o container ao invés do pod basta incluir a flag -c e o nome do container na frente:
`kubectl exec -i -t nginx-deployment-8cf88777f-l8s2g -c nginx-container -- /bin/bash`
_use 'exit' para sair do pod_

&nbsp;
**mais e mais infos:** a flag -o wide expande as informações da listagem de um determinado recurso, pode ser usado com pods, nodes, deployments, services e etc, e pode ser util para rapidamente detectar alguma anomalia como por exemplo ips incorretos.
`kubectl get pods -o wide`
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dto0rsumfltkmx1buz1k.png)

---

## **BÔNUS**
**reiniciando deployments:** _kubectl rollout restart deployment [nome do deployment] -n [namespace]_
**desfazendo um deployment:** _kubectl rollout undo deployment [nome do deployment]_
**aumentando o número de replicas:** _kubectl scale --replicas=3 replicaset [nome do replicaset] -n [namespace]_

---

## **CONCLUSÃO**
Neste artigo abordei de forma simples alguns comandos pouco conhecidos da ferramenta kubectl que podem ajudar na administração de um cluster kubernetes. Utilizei o minikube para montar um cluster local e fiz o deploy de um servidor nginx para demonstrar os comandos. Abaixo os links onde você pode obter os recursos utilizados e documentações para conhecer mais comandos e mais variações:

- [Minikube](https://minikube.sigs.k8s.io/docs/start/)
- [Imagem Nginx](https://hub.docker.com/_/nginx)
- [Kubectl](https://kubernetes.io/docs/tasks/tools/)
- [Kubectl cheat sheet](https://kubernetes.io/docs/reference/kubectl/cheatsheet/)

&nbsp;
Espero que o artigo tenha sido útil para você! 😛