Olá! Bem-vindo de volta ao nosso módulo sobre Fundamentos do Kubernetes.
Na lição anterior, você aprendeu sobre os "substantivos" do Kubernetes — os objetos como Pod, Deployment e Service, que definem o estado desejado de uma aplicação. Hoje, vamos nos concentrar nos "verbos" e aprender como nos comunicarmos com o cluster para gerenciar e observar esses objetos.
Nossa ferramenta para isso é o kubectl, a interface de linha de comando (CLI) essencial para qualquer pessoa que trabalhe com Kubernetes. Para um desenvolvedor, o kubectl é o seu canivete suíço para inspecionar logs da sua API .NET, depurar problemas de conectividade e verificar o estado de suas implantações.
O objetivo desta lição é: Usar o kubectl para interagir com um cluster Kubernetes e inspecionar seus recursos.
Vamos explorar como o kubectl funciona, configurar seu ambiente e dominar os comandos essenciais para observar o que está acontecendo dentro do seu cluster.
Como o kubectl Funciona?
Antes de usar a ferramenta, é crucial entender como ela opera, alinhado com sua preferência por conceitos mais profundos. O kubectl não faz mágica; ele é um cliente que se comunica com o API Server do Kubernetes, o portão de entrada para o Control Plane.
.webp)
Para que essa comunicação aconteça, o kubectl precisa de um arquivo de configuração especial.
O Arquivo kubeconfig
O kubectl localiza as informações do cluster e as credenciais do usuário em um arquivo de configuração chamado kubeconfig. Este arquivo, geralmente localizado em ~/.kube/config, contém três seções principais:
- Clusters: Define os clusters com os quais você pode se conectar, especificando o endereço do API Server e o certificado de autoridade.
- Users: Define as credenciais de autenticação (por exemplo, certificados de cliente ou tokens).
- Contexts: Combina um cluster, um usuário e um namespace padrão, criando um "contexto" de trabalho.
Você pode ter vários contextos em um único arquivo kubeconfig, permitindo que você alterne facilmente entre diferentes clusters (por exemplo, desenvolvimento local, staging e produção) com o mesmo kubectl.
Demystifying kubeconfig file | kubeconfig file explained
Para entender a estrutura e a utilidade do arquivo kubeconfig, assista a este vídeo do canal Techworld with Rajendra. Ele desmistifica como o kubectl sabe com qual cluster falar.
Assista do início até 05:35. Concentre-se em entender as três seções principais do arquivo (clusters, users, contexts) e como um context mapeia um usuário a um cluster.
Preparando o Ambiente
Para praticar os comandos, você precisa de kubectl instalado e um cluster Kubernetes para interagir.
- Instale o
kubectl: Siga as instruções para o seu sistema operacional. Uma maneira fácil é usar um gerenciador de pacotes.
Installation - The guide to kubectl I never had.
A página 'The guide to kubectl I never had.' fornece comandos de instalação simples para Linux, macOS e Windows.
Vá para a seção 'Installation' e execute o comando correspondente ao seu sistema operacional. Depois, verifique a instalação com kubectl version --client.
- Inicie um Cluster Local: Para desenvolvimento local, ferramentas como Minikube ou o Kubernetes integrado ao Docker Desktop são excelentes. Se você tem o Docker Desktop, pode habilitar o Kubernetes em
Settings > Kubernetes > Enable Kubernetes. Caso contrário, o Minikube é uma ótima alternativa (minikube start).
Após iniciar seu cluster local, o kubeconfig será atualizado automaticamente com o novo contexto.
Comandos Essenciais para Inspeção
A sintaxe do kubectl segue um padrão: kubectl <verbo> <recurso> [nome-do-recurso] [flags]. Vamos explorar os verbos mais importantes para inspeção.
Para ter algo para inspecionar, primeiro vamos criar um Deployment Nginx de forma imperativa. Execute este comando no seu terminal:
kubectl create deployment nginx-deployment --image=nginx
Este comando instrui o Kubernetes a criar um objeto Deployment chamado nginx-deployment, que por sua vez criará um Pod executando a imagem nginx.
Agora, vamos inspecionar o que criamos.
kubectl get: Listando Recursos
O comando get é usado para listar um ou mais recursos.
# Verifique se os nós do seu cluster estão prontos
kubectl get nodes
# Liste todos os pods no namespace padrão
kubectl get pods
# Use o flag -o wide para obter mais informações, como o IP do Pod e o nó onde está sendo executado
kubectl get pods -o wide
# Liste os deployments
kubectl get deployments
# Liste todos os objetos principais criados
kubectl get all
O kubectl get oferece uma visão geral do estado atual dos seus recursos. Você verá que o Deployment criou um ReplicaSet, que por sua vez criou um Pod.
kubectl describe: Obtendo Detalhes Aprofundados
Enquanto get fornece um resumo, describe oferece uma visão detalhada e humanamente legível de um recurso específico. É sua principal ferramenta para diagnosticar problemas.
Primeiro, obtenha o nome exato do seu Pod com kubectl get pods. Em seguida, substitua <nome-do-seu-pod> no comando abaixo:
# Descreva o Pod para ver detalhes como status, IP, eventos e contêineres
kubectl describe pod <nome-do-seu-pod>
Role para baixo até a seção Events. Esta é uma das partes mais importantes da saída do describe. Ela mostra uma cronologia do que o Kubernetes fez com o objeto, como Pulled (imagem baixada), Created (contêiner criado) e Started (contêiner iniciado). Se um Pod não iniciar, a seção de eventos geralmente lhe dirá o porquê (por exemplo, ImagePullBackOff ou recursos insuficientes).
kubectl logs: Visualizando Saída da Aplicação
Para ver os logs gerados pela aplicação dentro de um contêiner, usamos o comando logs.
# Mostra os logs do contêiner no Pod
kubectl logs <nome-do-seu-pod>
# Siga os logs em tempo real (semelhante a tail -f)
kubectl logs -f <nome-do-seu-pod>
Isso é fundamental para depurar suas APIs .NET em execução no cluster, permitindo que você veja a saída do stdout como se estivesse executando localmente.
kubectl exec: Executando Comandos Dentro de um Contêiner
Às vezes, você precisa de um shell interativo dentro de um contêiner para verificar o sistema de arquivos, testar a conectividade de rede ou executar ferramentas de diagnóstico.
# Inicia um shell interativo (bash) dentro do Pod
kubectl exec -it <nome-do-seu-pod> -- bash
- O flag
-i(stdin) mantém a entrada padrão aberta. - O flag
-t(tty) aloca um pseudo-terminal. --separa os argumentos dokubectldo comando que você deseja executar dentro do contêiner.
Uma vez dentro do contêiner, você pode executar comandos como ls, ps aux, ou cat para inspecionar o ambiente. Digite exit para sair.
Kubectl Basic Commands - Create and Debug Pod in a Minikube cluster | Kubernetes Tutorial 18
Este vídeo prático da TechWorld with Nana demonstra a maioria dos comandos que acabamos de discutir, desde a criação até a inspeção e exclusão de recursos.
Assista aos trechos 00:16-03:05, 07:03-09:17 e 09:17-10:13. Preste atenção em como os comandos get, describe, logs e exec são usados para inspecionar e depurar os Deployments de Nginx e MongoDB.
Teste seu entendimento!
Você implantou sua API .NET, mas os Pods estão no estado ImagePullBackOff. Você suspeita que o nome ou a tag da imagem no seu Deployment está incorreto.
Qual comando kubectl você usaria para obter informações detalhadas sobre o Pod e encontrar a mensagem de erro específica na seção de eventos?
Show answer
Você usaria kubectl describe pod <nome-do-pod>. A seção Events na saída deste comando mostraria mensagens de erro como "Failed to pull image..." ou "image not found", confirmando o problema e fornecendo detalhes.
Gerenciando Contextos e Limpeza
Agora que você sabe como inspecionar recursos, vamos ver como gerenciar seus contextos e limpar nosso ambiente.
# Listar todos os contextos disponíveis no seu kubeconfig
kubectl config get-contexts
# Ver o contexto atual
kubectl config current-context
# Para alternar para um contexto diferente (ex: o do Docker Desktop)
kubectl config use-context docker-desktop
# Quando terminar, delete o deployment que criamos
kubectl delete deployment nginx-deployment
Depois de excluir o Deployment, você pode verificar com kubectl get all que todos os recursos associados (ReplicaSet, Pod) também foram removidos.
Conclusão
Nesta lição, você deu seus primeiros passos práticos com o Kubernetes, aprendendo a usar o kubectl para se comunicar com um cluster. Você agora está equipado com as ferramentas de inspeção mais críticas para entender o estado de suas aplicações.
Principais Pontos:
kubectlé a CLI para interagir com o API Server do Kubernetes.- O arquivo
kubeconfigarmazena as informações de conexão e os contextos do cluster. kubectl getlista recursos e fornece uma visão geral de alto nível.kubectl describeoferece uma visão detalhada de um recurso, sendo essencial para a depuração, especialmente a seçãoEvents.kubectl logspermite visualizar a saída de sua aplicação.kubectl execpermite que você execute comandos dentro de um contêiner em execução para investigação interativa.
Próxima Lição:
Até agora, criamos nosso Deployment usando um comando imperativo. Embora seja rápido, a prática recomendada no Kubernetes é trabalhar de forma declarativa. Na próxima lição, "Author and apply a basic Kubernetes Deployment manifest to deploy a containerized application", você aprenderá a definir o estado desejado de sua aplicação usando arquivos YAML, o que permite controle de versão, repetibilidade e uma abordagem de Infraestrutura como Código.