Crear e inspeccionar un Pod

KubernetesBeginner
Practicar Ahora

Introducción

Un Pod es el objeto de carga de trabajo más pequeño que normalmente crearás en Kubernetes. Envuelve uno o más contenedores, les proporciona una identidad de red compartida y permite que Kubernetes los programe en un nodo.

En este laboratorio, crearás un único Pod con una pequeña imagen de contenedor precargada, esperarás a que Kubernetes lo marque como listo (Ready) e inspeccionarás el objeto desde varios ángulos. Utilizarás kubectl get, kubectl describe y kubectl get -o yaml para que los futuros laboratorios de escritura de manifiestos se basen en el estado real del objeto en lugar de en YAML memorizado.

Preparar un espacio de trabajo para el Pod

En este paso, prepararás un espacio de nombres (namespace) dedicado para tu primer Pod y establecerás ese espacio de nombres como el destino predeterminado para tus comandos.

Comienza en /home/labex/project, el espacio de trabajo compartido utilizado a lo largo de la preparación para CKAD.

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

Es posible que el servidor de la API de Kubernetes necesite un breve momento para estar accesible después de que se inicie la máquina virtual. Ejecuta este comando primero. Si informa que el servidor aún no está listo, espera unos segundos y vuelve a ejecutarlo hasta que el nodo esté en estado Ready.

kubectl get nodes --request-timeout=5s

La salida esperada incluye un nodo de plano de control (control-plane) listo:

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

Crea un espacio de nombres llamado ckad-prep-pod. Un espacio de nombres le da a este laboratorio su propio ámbito de objetos, por lo que el Pod que crees no se mezclará con objetos de otros laboratorios.

kubectl create namespace ckad-prep-pod

El comando debería confirmar la creación del espacio de nombres:

namespace/ckad-prep-pod created

Establece el espacio de nombres del contexto actual en ckad-prep-pod. Después de esto, los comandos con ámbito de espacio de nombres, como kubectl get pods, leerán desde este espacio de nombres de forma predeterminada.

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

La salida debería confirmar que el contexto actual fue modificado:

Context "labex-v135" modified.

Verifica que el espacio de nombres actual haya cambiado:

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

Salida esperada:

ckad-prep-pod

Crear el Pod

En este paso, crearás un único Pod con kubectl run y esperarás a que esté listo.

kubectl run puede crear un Pod básico directamente desde la línea de comandos. La opción --image elige la imagen del contenedor, y --restart=Never mantiene esto como un Pod independiente en lugar de crear un controlador de nivel superior.

Este laboratorio utiliza registry.k8s.io/pause:3.10.1, una imagen diminuta que ya está presente en el entorno de Kubernetes preparado. Se mantiene en ejecución sin necesidad de configuración de la aplicación, lo que te permite centrarte en el ciclo de vida del Pod en lugar de en la descarga de imágenes o el comportamiento de la aplicación.

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

El comando debería informar que Kubernetes aceptó el objeto Pod:

pod/sample-pod created

La creación no es lo mismo que la disponibilidad (readiness). Kubernetes aún necesita programar el Pod, iniciar el contenedor y marcar el Pod como listo. Utiliza kubectl wait para esperar a que el Pod alcance la condición Ready.

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

Salida esperada:

pod/sample-pod condition met

Ahora enumera los Pods en el espacio de nombres actual:

kubectl get pods

Deberías ver sample-pod con 1/1 contenedores listos y en estado Running:

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

Inspeccionar la ubicación y los eventos del Pod

En este paso, inspeccionarás dónde se está ejecutando el Pod y leerás el historial de eventos que Kubernetes registró mientras lo iniciaba.

La vista normal de kubectl get pods es compacta. Añade -o wide para ver detalles de programación como el nombre del nodo y la dirección IP del Pod.

kubectl get pod sample-pod -o wide

La salida esperada incluye el nodo y una IP interna del Pod:

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

kubectl describe ofrece una vista legible por humanos del objeto. Incluye metadatos, detalles del contenedor, condiciones y eventos recientes. Para los principiantes, la sección Events es especialmente útil porque muestra lo que hizo Kubernetes después de crear el Pod.

kubectl describe pod sample-pod

Busca este tipo de líneas en la salida:

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

Las edades exactas de los eventos y los mensajes pueden variar, pero la idea importante es estable: Kubernetes programa el Pod, prepara la imagen, crea el contenedor y lo inicia.

Leer los campos del objeto Pod

En este paso, inspeccionarás campos seleccionados del Pod en formato YAML y los conectarás con los conceptos de objetos que viste en el laboratorio anterior.

kubectl get puede imprimir un objeto como YAML con -o yaml. Esta es la representación real del objeto devuelta por el servidor de la API, incluidos los campos que Kubernetes añadió después de la creación. El comando a continuación utiliza sed -n '1,80p' para mostrar solo las primeras 80 líneas, de modo que la salida sea legible.

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

En la salida, busca los campos de nivel superior y la imagen del contenedor:

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

No necesitas memorizar todos los campos generados. Por ahora, céntrate en la estructura básica: apiVersion, kind, metadata, spec y status. Escribirás las partes importantes tú mismo en el próximo laboratorio.

Utiliza una consulta JSONPath dirigida para imprimir solo el campo de la imagen. Las expresiones JSONPath son útiles cuando necesitas un valor preciso de un objeto grande.

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

Salida esperada:

registry.k8s.io/pause:3.10.1

Resumen

Has creado un Pod independiente, has esperado a que Kubernetes lo marcara como listo, has inspeccionado los detalles de programación y eventos, y has leído campos clave del objeto a partir de la salida YAML y JSONPath. Esto te proporciona un Pod concreto para conectar con el siguiente laboratorio, donde escribirás un manifiesto de Pod en lugar de crear el objeto directamente con kubectl run.