Skip to main content

Welcome to a Grasp lesson

Create a free account to keep studying and create your own study path.

Lesson 63

Interacting with Kubernetes using kubectl

Recommended resources

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.

Kubernetes Kubectl Interaction Flow
Este diagrama ilustra o fluxo de comunicação: você executa um comando `kubectl`, que envia uma requisição HTTP/REST para o API Server. O API Server então valida a requisição, interage com o `etcd` (o banco de dados do cluster) e coordena com os outros componentes para atender à sua solicitação.

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:

  1. Clusters: Define os clusters com os quais você pode se conectar, especificando o endereço do API Server e o certificado de autoridade.
  2. Users: Define as credenciais de autenticação (por exemplo, certificados de cliente ou tokens).
  3. 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.

  1. 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.

  1. 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 do kubectl do 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 kubeconfig armazena as informações de conexão e os contextos do cluster.
  • kubectl get lista recursos e fornece uma visão geral de alto nível.
  • kubectl describe oferece uma visão detalhada de um recurso, sendo essencial para a depuração, especialmente a seção Events.
  • kubectl logs permite visualizar a saída de sua aplicação.
  • kubectl exec permite 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.