Interagindo com Pods

KubernetesBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá as técnicas essenciais para interagir com Pods em execução. Essas são habilidades fundamentais de depuração no Kubernetes, porque as cargas de trabalho geralmente são distribuídas e não ficam visíveis diretamente como os processos locais.

Você aprenderá três técnicas poderosas de depuração:

  • Logs: ler o diário da sua aplicação para descobrir o que ela está informando.
  • Exec: entrar no contêiner para inspecioná-lo e executar comandos.
  • Port Forwarding: criar um túnel temporário para acessar sua aplicação a partir do computador local.

Essas habilidades são fundamentais para qualquer engenheiro de DevOps ou desenvolvedor. Ao final deste laboratório, você se sentirá confiante para investigar Pods em execução.

Visualizar logs

Nesta etapa, você aprenderá a inspecionar os logs de um Pod em execução. Pense nos logs como a “voz” da sua aplicação. Quando algo dá errado, os logs normalmente são o primeiro lugar onde você deve procurar pistas.

Internamente, kubectl logs geralmente lê o que o processo principal do contêiner escreveu na saída padrão e na saída de erro padrão. Por isso, muitas aplicações em contêineres são projetadas para registrar informações no terminal, em vez de gravá-las em arquivos locais. No Kubernetes, a saída do terminal é mais fácil de coletar e disponibilizar de forma consistente.

O ambiente iniciará um Pod chamado my-nginx em segundo plano. Primeiro, aguarde até que o Pod seja criado:

until kubectl get pod my-nginx > /dev/null 2>&1; do sleep 2; done

Em seguida, aguarde até que o contêiner esteja pronto:

kubectl wait --for=condition=ready pod/my-nginx --timeout=300s

Agora, confirme que ele está em execução:

kubectl get pods

Você deverá ver my-nginx com o status Running. Se ele ainda não estiver pronto, aguarde um momento e tente novamente.

Quando o Pod estiver em execução, use o comando kubectl logs para ler o que o contêiner escreveu na saída padrão:

kubectl logs my-nginx

Como o Nginx é um servidor web estável, ele pode ficar silencioso e exibir pouca saída inicialmente, ou simplesmente mostrar uma mensagem informando que está pronto para aceitar conexões.

Para acompanhar os logs em tempo real, você pode adicionar a opção -f (follow):

kubectl logs -f my-nginx

O cursor ficará aguardando novas mensagens. Isso é útil para acompanhar o tráfego em tempo real. Pressione Ctrl+C para interromper o acompanhamento dos logs e voltar ao prompt do terminal.

Executar comandos no contêiner

Nesta etapa, você irá além da leitura de logs e executará comandos dentro do Pod. Talvez seja necessário verificar se existe um arquivo de configuração, confirmar se uma ferramenta está instalada ou testar a conectividade de rede de dentro do Pod.

Você pode fazer isso usando o comando kubectl exec. Ele permite executar um comando dentro de um contêiner em execução. É comum usá-lo para abrir um shell interativo e, na prática, entrar no contêiner.

Esta é uma distinção importante: kubectl exec não “move” você para outra máquina como o SSH faz. Ele solicita ao kubelet no nó que inicie um novo processo dentro de um contêiner que já está em execução. Por isso, você verá o sistema de arquivos e o ambiente do contêiner, e não o ambiente do terminal local.

Execute o comando a seguir para abrir um shell bash dentro do Pod my-nginx:

kubectl exec -it my-nginx -- /bin/bash

Vamos entender as opções:

  • -i (Interactive): mantém a entrada aberta para que você possa digitar.
  • -t (TTY): aloca um pseudo-terminal para que ele se comporte como um prompt de comando normal.
  • --: informa ao kubectl que “tudo depois deste ponto é um comando para o contêiner, não para o kubectl”.

Seu prompt deverá mudar para algo semelhante a root@my-nginx:/#. Agora você está dentro do contêiner específico no cluster do Kubernetes.

Liste os arquivos do diretório para confirmar que está em um novo ambiente:

ls -F

Você está vendo os arquivos dentro do contêiner Nginx, completamente separados dos arquivos do seu workspace do LabEx.

Inspecionar o ambiente

Nesta etapa, você inspecionará o ambiente dentro do contêiner. Uma tarefa comum de depuração é verificar qual sistema operacional (SO) o contêiner está executando. Isso ajuda a identificar quais comandos, como apt ou apk, estão disponíveis.

Esta etapa também apresenta uma lição comum sobre contêineres: a imagem do contêiner determina as ferramentas e os arquivos do espaço de usuário disponíveis. Dois Pods podem ser “Linux” e ainda assim serem muito diferentes, porque uma imagem pode ser baseada em Debian, outra em Alpine e outra pode não conter praticamente nenhuma ferramenta de shell.

Enquanto o prompt ainda estiver como root@my-nginx:/#, execute este comando para ler o arquivo de informações da versão do SO:

cat /etc/os-release

Você verá uma saída que identifica a distribuição Linux, provavelmente “Debian GNU/Linux”. Isso ocorre porque a imagem oficial do Nginx é criada sobre uma base Debian.

Quando terminar a exploração, saia do contêiner e volte ao terminal principal. Digite:

exit

Seu prompt voltará para labex:~/project.

Para confirmar que você concluiu esta investigação, crie um arquivo chamado os_version.txt e escreva nele o nome do SO encontrado, por exemplo, “Debian”:

echo "Debian" > ~/project/os_version.txt

Encaminhamento de portas

Nesta etapa, você acessará o Pod do Nginx por meio do encaminhamento de portas. Por padrão, os Pods são isolados. Eles são como casas em um condomínio fechado: podem se comunicar entre si, mas pessoas de fora, como você no terminal local, não conseguem acessá-los facilmente.

Para acessar o servidor web em execução no my-nginx a partir da sua máquina local, podemos criar um “túnel temporário” usando Port Forwarding.

O encaminhamento de portas é um recurso conveniente para depuração, não a forma normal de publicar aplicações em produção. Ele cria um túnel temporário da estação de trabalho atual até um único Pod. Isso é perfeito para inspeções e testes rápidos, porque evita criar um Service completo ou alterar a política de rede externa.

Execute o comando a seguir para encaminhar a porta local 8080 para a porta 80 do Pod:

kubectl port-forward my-nginx 8080:80 &

Observe o & no final! Ele informa ao Linux que o processo deve ser executado em segundo plano. Sem esse caractere, o comando bloquearia o terminal e você não conseguiria digitar mais nada até interrompê-lo.

Você deverá ver uma mensagem semelhante a Forwarding from 127.0.0.1:8080 -> 80.

Agora, você pode acessar a página web do Nginx por esse túnel usando curl:

curl localhost:8080

Você deverá ver o código HTML da página “Welcome to nginx!”. Sucesso! Você alcançou o cluster e trouxe dados de dentro dele por meio do túnel.

Resumo

Neste laboratório, você praticou as três habilidades essenciais para depurar aplicações Kubernetes:

  • Logs: verificar a saída da aplicação com kubectl logs.
  • Exec: entrar no ambiente do contêiner com kubectl exec para inspecionar arquivos e executar comandos.
  • Port Forwarding: acessar serviços internos localmente com kubectl port-forward.

Essas ferramentas são o seu estetoscópio e a sua máquina de raios X. Sempre que encontrar um problema no Kubernetes, estas serão as primeiras ferramentas que você usará para diagnosticar a situação.