Neste laboratório, você explorará e depurará aplicações Kubernetes. Você iniciará um cluster Kubernetes local usando Minikube, implantará uma aplicação de exemplo e aprenderá várias técnicas de depuração, como inspecionar a configuração da aplicação, visualizar logs, executar comandos dentro de pods e examinar eventos do cluster. Essas habilidades são essenciais para desenvolver e solucionar problemas em aplicações baseadas em Kubernetes.
Este é um Lab Guiado, que fornece instruções passo a passo para ajudá-lo a aprender e praticar. Siga as instruções cuidadosamente para completar cada etapa e ganhar experiência prática. Dados históricos mostram que este é um laboratório de nível iniciante com uma taxa de conclusão de 92%. Recebeu uma taxa de avaliações positivas de 98% dos estudantes.
Iniciar o Cluster Kubernetes
Nesta etapa, você aprenderá como iniciar e verificar um cluster Kubernetes local usando Minikube. Este é um primeiro passo essencial para desenvolver e testar aplicações Kubernetes em sua máquina local.
Primeiro, inicie o cluster Minikube:
minikube start
Exemplo de saída:
😄 minikube v1.29.0 on Ubuntu 22.04
✨ Automatically selected the docker driver
📌 Using Docker driver with root permissions
🔥 Creating kubernetes in kubernetes cluster
🔄 Restarting existing kubernetes cluster
🐳 Preparing Kubernetes v1.26.1 on Docker 20.10.23 ...
🚀 Launching Kubernetes ...
🌟 Enabling addons: storage-provisioner, default-storageclass
🏄 Done! kubectl is now configured to use "minikube" cluster and "default" namespace
Agora, verifique o status do cluster usando múltiplos comandos:
minikube status
kubectl get nodes
Exemplo de saída:
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
NAME STATUS ROLES AGE VERSION
minikube Ready control-plane 1m v1.26.1
Esses comandos confirmam que:
Minikube está rodando com sucesso
Um cluster Kubernetes local foi criado
O cluster está pronto para uso
Você tem um cluster de nó único com capacidades de plano de controle
Vamos verificar o contexto do cluster para garantir que você está conectado ao cluster correto:
kubectl config current-context
Exemplo de saída:
minikube
Isso verifica que kubectl está configurado para usar o cluster Minikube.
Implantar uma Aplicação de Exemplo
Nesta etapa, você aprenderá como criar e implantar uma aplicação Kubernetes simples usando manifestos YAML. Criaremos tanto um Pod quanto um Deployment para demonstrar diferentes maneiras de implantar aplicações.
Primeiro, crie um diretório para seus manifestos Kubernetes:
mkdir -p ~/project/k8s-manifests
cd ~/project/k8s-manifests
pod/nginx-pod created
deployment.apps/nginx-deployment created
Verifique os recursos criados:
kubectl get pods
kubectl get deployments
Exemplo de saída:
NAME READY STATUS RESTARTS AGE
nginx-pod 1/1 Running 0 1m
nginx-deployment-xxx-yyy 1/1 Running 0 1m
nginx-deployment-xxx-zzz 1/1 Running 0 1m
nginx-deployment-xxx-www 1/1 Running 0 1m
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 3/3 3 3 1m
Aguarde o deployment criar as réplicas. A coluna READY deve mostrar 3/3 quando todas as réplicas estiverem prontas.
Principais diferenças entre Pod e Deployment:
Pod: Instância única de uma aplicação
Deployment: Gerencia múltiplas réplicas e fornece auto-cura
Verificar a Configuração da Aplicação
Nesta etapa, você aprenderá como inspecionar e recuperar os detalhes de configuração de Deployments e Pods Kubernetes usando vários comandos kubectl. Entender como examinar as configurações de recursos é crucial para solucionar problemas e entender a configuração da sua aplicação.
Primeiro, vamos recuperar a configuração YAML do Pod que criamos na etapa anterior:
Você também pode usar a saída JSON para formatos mais legíveis por máquina:
kubectl get pod nginx-pod -o json
Coisas importantes para procurar ao inspecionar configurações:
Metadados do recurso (nome, rótulos, namespace)
Imagem e portas do container
Contagem de réplicas (para Deployments)
Status e condições do recurso
Visualizar Logs de uma Aplicação
Nesta etapa, você aprenderá como visualizar e inspecionar logs para Pods Kubernetes usando kubectl logs. Visualizar logs é crucial para entender o comportamento da aplicação, depurar problemas e monitorar o desempenho da aplicação.
Primeiro, liste os Pods disponíveis para garantir que você está trabalhando com os recursos corretos:
kubectl get pods
Exemplo de saída:
NAME READY STATUS RESTARTS AGE
nginx-pod 1/1 Running 0 20m
nginx-deployment-xxx-yyy 1/1 Running 0 20m
nginx-deployment-xxx-zzz 1/1 Running 0 20m
nginx-deployment-xxx-www 1/1 Running 0 20m
Visualize os logs para um Pod específico:
## Visualize os logs para o nginx-pod
kubectl logs nginx-pod
Exemplo de saída:
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
...
2023/xx/xx [notice] xxxx#x: signal process started
Visualize os logs para os Pods de um Deployment:
## Visualize os logs para um pod específico no deployment
POD_NAME=$(kubectl get pods -l app=nginx | grep nginx-deployment | head -n 1 | awk '{print $1}')
kubectl logs $POD_NAME
Explore opções adicionais de visualização de logs:
## Visualize as últimas 50 linhas dos logs
kubectl logs nginx-pod --tail=50
## Acompanhe os logs em tempo real
kubectl logs -f nginx-pod
Exemplo de acompanhamento de logs:
[real-time log output will be displayed]
Saia da visualização de logs em tempo real pressionando Ctrl + C.
Para Pods com múltiplos containers, especifique o nome do container:
## Se um Pod tiver múltiplos containers
kubectl logs nginx-pod -c nginx
Principais técnicas de visualização de logs:
Visualizar todo o histórico de logs
Limitar as linhas de log
Acompanhar os logs em tempo real
Especificar o container em Pods com múltiplos containers
Debug usando kubectl exec
Nesta etapa, você aprenderá como usar kubectl exec para executar comandos dentro de um Pod Kubernetes, o que é essencial para depurar e investigar ambientes de container.
Primeiro, verifique os Pods disponíveis:
kubectl get pods
Exemplo de saída:
NAME READY STATUS RESTARTS AGE
nginx-pod 1/1 Running 0 30m
nginx-deployment-xxx-yyy 1/1 Running 0 30m
nginx-deployment-xxx-zzz 1/1 Running 0 30m
nginx-deployment-xxx-www 1/1 Running 0 30m
Execute um shell interativo no nginx-pod:
kubectl exec -it nginx-pod -- /bin/bash
Exemplos de interações dentro do Pod:
## Verifique a configuração do nginx
cat /etc/nginx/nginx.conf
## Verifique os pacotes instalados
apt update && apt list --installed
## Saia do shell do pod
exit
Certifique-se de usar exit no shell interativo para retornar ao prompt do shell.
Execute comandos específicos sem entrar em um shell interativo:
## Verifique a versão do nginx
kubectl exec nginx-pod -- nginx -v
## Liste os arquivos na raiz web
kubectl exec nginx-pod -- ls /usr/share/nginx/html
Para Pods de Deployment, selecione um Pod específico:
## Obtenha o nome de um Pod do deployment
POD_NAME=$(kubectl get pods -l app=nginx | grep nginx-deployment | head -n 1 | awk '{print $1}')
## Execute comandos no Pod do deployment
kubectl exec -it $POD_NAME -- /bin/bash
Principais técnicas de kubectl exec:
Executar shells interativos
Executar comandos específicos
Investigar os detalhes internos do Pod
Depurar configurações de container
Usar kubectl describe para solução de problemas
Nesta etapa, você aprenderá como usar kubectl describe para diagnosticar e solucionar problemas de recursos Kubernetes, fornecendo informações detalhadas sobre os status de Pod, Deployment e componentes do cluster.
Primeiro, vamos criar um deployment problemático para demonstrar a depuração:
cd ~/project/k8s-manifests
nano problematic-deployment.yaml
Agora, use kubectl describe para investigar o deployment:
kubectl describe deployment debug-deployment
Exemplo de saída:
Name: debug-deployment
Namespace: default
CreationTimestamp: [timestamp]
Labels: <none>
Annotations: deployment.kubernetes.io/revision: 1
Selector: app=debug
Replicas: 2 desired | 0 available | 2 total | 2 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Conditions:
Type Status Reason
---- ------ ------
Available False MinimumReplicasUnavailable
Progressing False ProgressDeadlineExceeded
OldReplicaSets: <none>
NewReplicaSet: debug-deployment-xxx (2/2 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedCreate 1m deployment-controller Failed to create pod
Normal ScalingReplicaSet 1m deployment-controller Scaled up replica set
Descreva os Pods para obter mais detalhes:
kubectl describe pods -l app=debug
Exemplo de saída:
Name: debug-deployment-xxx-yyy
Namespace: default
Priority: 0
Node: minikube/172.17.0.2
Start Time: [timestamp]
Labels: app=debug
Annotations: <none>
Status: Pending
Conditions:
Type Status
Initialized True
Ready False
PodScheduled True
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedCreatePodSandBox 1m kubelet Failed to create pod sandbox
Warning Failed 1m kubelet Failed to pull image
Descreva os recursos do nó:
kubectl describe nodes minikube
Principais técnicas de solução de problemas:
Identificar o status do deployment e do pod
Visualizar mensagens de erro detalhadas
Entender por que os recursos não estão sendo executados
Verificar as condições do nó e do cluster
Examinar Eventos do Cluster (kubectl get events) para Pistas e Linhas do Tempo
Nesta etapa, você aprenderá como usar kubectl get events para investigar eventos em todo o cluster, entender as atividades do sistema e diagnosticar problemas em seu ambiente Kubernetes.
Primeiro, visualize todos os eventos do cluster:
kubectl get events
Exemplo de saída:
LAST SEEN TYPE REASON OBJECT MESSAGE
10m Warning FailedCreate deployment/debug-deployment Failed to create pod
5m Normal Scheduled pod/nginx-pod Successfully assigned default/nginx-pod to minikube
3m Normal Pulled pod/nginx-deployment-xxx-yyy Container image "nginx:latest" already present on machine
Filtre eventos por namespace:
kubectl get events -n default
Use opções de visualização de eventos mais detalhadas:
## Watch events in real-time
kubectl get events -w
## Get events sorted by timestamp
kubectl get events --sort-by='.metadata.creationTimestamp'
Crie um cenário personalizado de geração de eventos:
cd ~/project/k8s-manifests
nano event-test-deployment.yaml
kubectl apply -f event-test-deployment.yaml
kubectl get events
Filtragem avançada de eventos:
## Filter by event type
kubectl get events --field-selector type=Warning
## Filter by specific resource
kubectl get events --field-selector involvedObject.kind=Deployment
Principais técnicas de exame de eventos:
Visualizar eventos em todo o cluster
Filtrar eventos por namespace
Observação de eventos em tempo real
Identificar eventos de aviso e erro
Resumo
Neste laboratório, você aprendeu como iniciar e verificar um cluster Kubernetes local usando o Minikube, que é um primeiro passo essencial para desenvolver e testar aplicações Kubernetes em sua máquina local. Você também aprendeu como criar e implantar uma aplicação Kubernetes simples usando manifestos YAML, incluindo tanto um Pod quanto um Deployment. Adicionalmente, você explorou vários comandos para inspecionar a configuração, visualizar logs, depurar e solucionar problemas da aplicação, obtendo uma melhor compreensão de como gerenciar e monitorar aplicações Kubernetes.