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.


