Criar e Inspecionar um Pod

KubernetesBeginner
Pratique Agora

Introdução

Um Pod é o menor objeto de carga de trabalho que você normalmente cria no Kubernetes. Ele encapsula um ou mais containers, fornece a eles uma identidade de rede compartilhada e permite que o Kubernetes os agende em um nó.

Neste laboratório, você criará um único Pod com uma pequena imagem de container pré-carregada, aguardará o Kubernetes deixá-lo pronto e inspecionará o objeto sob vários ângulos. Você usará kubectl get, kubectl describe e kubectl get -o yaml para que os laboratórios futuros de escrita de manifestos sejam baseados no estado real do objeto, em vez de apenas memorizar YAML.

Preparar um Espaço de Trabalho para o Pod

Nesta etapa, você preparará um namespace dedicado para o seu primeiro Pod e tornará esse namespace o destino padrão para seus comandos.

Comece em /home/labex/project, o espaço de trabalho compartilhado usado durante toda a preparação para o CKAD.

mkdir -p /home/labex/project
cd /home/labex/project

O servidor da API do Kubernetes pode precisar de um breve momento para ficar acessível após a inicialização da VM. Execute este comando primeiro. Se ele informar que o servidor ainda não está pronto, aguarde alguns segundos e execute-o novamente até que o nó esteja Ready.

kubectl get nodes --request-timeout=5s

A saída esperada inclui um nó de plano de controle (control-plane) pronto:

NAME         STATUS   ROLES           AGE   VERSION
labex-v135   Ready    control-plane   ...   v1.35...

Crie um namespace chamado ckad-prep-pod. Um namespace dá a este laboratório seu próprio escopo de objeto, para que o Pod que você criar não se misture com objetos de outros laboratórios.

kubectl create namespace ckad-prep-pod

O comando deve confirmar a criação do namespace:

namespace/ckad-prep-pod created

Defina o namespace do contexto atual como ckad-prep-pod. Após isso, comandos que dependem de namespace, como kubectl get pods, lerão deste namespace por padrão.

kubectl config set-context --current --namespace=ckad-prep-pod

A saída deve confirmar que o contexto atual foi modificado:

Context "labex-v135" modified.

Verifique se o namespace atual foi alterado:

kubectl config view --minify --output 'jsonpath={..namespace}'; echo

Saída esperada:

ckad-prep-pod

Criar o Pod

Nesta etapa, você criará um único Pod com kubectl run e aguardará até que ele esteja pronto.

O kubectl run pode criar um Pod básico diretamente da linha de comando. A opção --image escolhe a imagem do container, e --restart=Never mantém este Pod como um objeto independente, em vez de criar um controlador de nível superior.

Este laboratório usa registry.k8s.io/pause:3.10.1, uma imagem minúscula que já está presente no ambiente Kubernetes preparado. Ela permanece em execução sem precisar de configuração de aplicação, o que permite que você se concentre no ciclo de vida do Pod em vez de pulls de imagem ou comportamento da aplicação.

kubectl run sample-pod --image=registry.k8s.io/pause:3.10.1 --restart=Never

O comando deve informar que o Kubernetes aceitou o objeto Pod:

pod/sample-pod created

Criação não é o mesmo que prontidão (readiness). O Kubernetes ainda precisa agendar o Pod, iniciar o container e marcar o Pod como pronto. Use kubectl wait para aguardar a condição Ready do Pod.

kubectl wait --for=condition=Ready pod/sample-pod --timeout=60s

Saída esperada:

pod/sample-pod condition met

Agora, liste os Pods no namespace atual:

kubectl get pods

Você deve ver o sample-pod com 1/1 containers prontos e status Running:

NAME      READY   STATUS    RESTARTS   AGE
sample-pod   1/1     Running   0          ...

Inspecionar o Posicionamento e Eventos do Pod

Nesta etapa, você inspecionará onde o Pod está sendo executado e lerá o histórico de eventos que o Kubernetes registrou durante a inicialização.

A visualização comum kubectl get pods é compacta. Adicione -o wide para ver detalhes de agendamento, como o nome do nó e o endereço IP do Pod.

kubectl get pod sample-pod -o wide

A saída esperada inclui o nó e um IP interno do Pod:

NAME      READY   STATUS    RESTARTS   AGE   IP           NODE
sample-pod   1/1     Running   0          ...   ...        labex-v135

O kubectl describe fornece uma visualização legível do objeto. Ele inclui metadados, detalhes do container, condições e eventos recentes. Para iniciantes, a seção Events é especialmente útil porque mostra o que o Kubernetes fez após você criar o Pod.

kubectl describe pod sample-pod

Procure por linhas como estas na saída:

Name:             sample-pod
Namespace:        ckad-prep-pod
Status:           Running
Containers:
  sample-pod:
    Image:        registry.k8s.io/pause:3.10.1
Conditions:
  Type                        Status
  Ready                       True
Events:
  Type    Reason     Age   From               Message
  Normal  Scheduled  ...   default-scheduler  Successfully assigned ...
  Normal  Pulled     ...   kubelet            Container image "registry.k8s.io/pause:3.10.1" already present ...
  Normal  Created    ...   kubelet            Created container ...
  Normal  Started    ...   kubelet            Started container ...

As idades exatas dos eventos e as mensagens podem variar, mas a ideia central é estável: o Kubernetes agenda o Pod, prepara a imagem, cria o container e o inicia.

Ler os Campos do Objeto Pod

Nesta etapa, você inspecionará campos selecionados do Pod em formato YAML e os conectará aos conceitos de objetos que você viu no laboratório anterior.

O kubectl get pode imprimir um objeto como YAML usando -o yaml. Esta é a representação real do objeto retornada pelo servidor da API, incluindo campos que o Kubernetes adicionou após a criação. O comando abaixo usa sed -n '1,80p' para mostrar apenas as primeiras 80 linhas, mantendo a saída legível.

kubectl get pod sample-pod -o yaml | sed -n '1,80p'

Na saída, procure pelos campos de nível superior e pela imagem do container:

apiVersion: v1
kind: Pod
metadata:
  name: sample-pod
  namespace: ckad-prep-pod
spec:
  containers:
  - image: registry.k8s.io/pause:3.10.1
    name: sample-pod
...
status:
...

Você não precisa memorizar todos os campos gerados. Por enquanto, concentre-se na estrutura básica: apiVersion, kind, metadata, spec e status. Você escreverá as partes importantes por conta própria no próximo laboratório.

Use uma consulta JSONPath direcionada para imprimir apenas o campo da imagem. Expressões JSONPath são úteis quando você precisa de um valor preciso de um objeto grande.

kubectl get pod sample-pod -o jsonpath='{.spec.containers[0].image}'; echo

Saída esperada:

registry.k8s.io/pause:3.10.1

Resumo

Você criou um Pod independente, aguardou o Kubernetes marcá-lo como pronto, inspecionou detalhes de agendamento e eventos, e leu campos-chave do objeto a partir da saída YAML e JSONPath. Isso lhe dá um Pod concreto para conectar com o próximo laboratório, onde você escreverá um manifesto de Pod em vez de criar o objeto diretamente com kubectl run.