Comprender los Pods

KubernetesBeginner
Practicar Ahora

Introducción

En este laboratorio, explorará la unidad desplegable más pequeña de Kubernetes: el Pod.

Un Pod es el objeto que Kubernetes programa en un nodo. Normalmente, en Kubernetes no se ejecuta un contenedor directamente de forma independiente; en su lugar, los contenedores se colocan dentro de Pods.

Un Pod puede contener uno o varios contenedores que comparten el contexto de red y almacenamiento. La mayoría de los ejemplos para principiantes usan un solo contenedor, pero el diseño basado en un entorno compartido es el concepto importante.

Aprenderá a:

  • Definir un Pod mediante un archivo de configuración YAML (el plano).
  • Crear el Pod en el clúster mediante kubectl.
  • Comprobar el estado del Pod para asegurarse de que se está ejecutando.
  • Inspeccionar la configuración detallada y el historial del Pod.

Al finalizar este laboratorio, tendrá un servidor web real ejecutándose dentro de un Pod en su clúster.

Definir el Pod

En este paso, definirá su primer Pod. Kubernetes utiliza el lenguaje YAML. Un archivo YAML es como un plano o una receta que describe exactamente cómo quiere que sea su aplicación.

Un Pod es el objeto más pequeño que Kubernetes programa, pero no es lo mismo que un contenedor. Un contenedor es el proceso de aplicación en ejecución y su imagen del sistema de archivos. Un Pod es la envoltura de Kubernetes alrededor de uno o varios contenedores. Esta envoltura les proporciona una identidad de red compartida, un ciclo de vida compartido y, opcionalmente, almacenamiento compartido.

La definición de un Pod requiere cuatro elementos principales:

  • apiVersion: La versión del lenguaje de Kubernetes que se utiliza.
  • kind: El tipo de objeto que se va a crear (en este caso, un Pod).
  • metadata: La información que identifica el objeto, como su nombre y sus etiquetas.
  • spec: La "especificación", es decir, la parte principal de la receta. Describe los contenedores que se ejecutarán.

Creará un archivo llamado nginx-pod.yaml. Este archivo definirá un Pod llamado nginx-pod que ejecutará un solo contenedor mediante la imagen nginx (un servidor web popular).

Cree el archivo con el editor de texto nano:

nano nginx-pod.yaml

Copie y pegue el siguiente contenido en el archivo. Léalo atentamente para identificar las cuatro secciones mencionadas:

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
    - name: nginx
      image: nginx:latest
      ports:
        - containerPort: 80

Para guardar y salir de nano, pulse Ctrl+X, escriba Y para confirmar el guardado y pulse Enter para escribir el nombre del archivo.

Ya ha escrito su primer plano de Kubernetes. Le indica a Kubernetes: "Quiero un Pod llamado nginx-pod. Dentro de él, ejecute un contenedor mediante la imagen nginx".

Crear el Pod

Ahora que tiene su plano (nginx-pod.yaml), es momento de entregárselo al equipo de construcción: Kubernetes.

Para hacerlo, utilizamos el comando kubectl apply. Este comando indica a Kubernetes: "Este es el estado deseado. Haga que se cumpla".

La expresión estado deseado es una de las ideas centrales de Kubernetes. Usted no indica al sistema cada paso interno que debe realizar. En su lugar, declara el resultado final que desea, y los controladores de Kubernetes siguen trabajando hasta que la realidad coincide con esa declaración.

Ejecute el siguiente comando para crear su Pod:

kubectl apply -f nginx-pod.yaml

Debería ver un mensaje de confirmación:

pod/nginx-pod created

Al ejecutar este comando, envió el plano al servidor de API de Kubernetes (el plano de control). A continuación, el Scheduler encontró un nodo adecuado para su Pod y el Kubelet de ese nodo comenzó a descargar la imagen de Nginx para ejecutarla.

Comprobar el estado

En este paso, comprobará el progreso de su nuevo Pod. Crear un Pod no es instantáneo: se necesita un momento para descargar la imagen del contenedor e iniciar la aplicación.

Es importante recordar lo siguiente: kubectl apply normalmente devuelve el control rápidamente porque solo envía la solicitud. El trabajo real se realiza de forma asíncrona dentro del clúster. Por eso, comprobar el estado es un paso normal después de la creación y no indica que haya algún problema.

Para ver el estado de sus Pods, utilice el comando get:

kubectl get pods

Verá una tabla con sus Pods. Observe la columna STATUS:

NAME        READY   STATUS    RESTARTS   AGE
nginx-pod   1/1     Running   0          15s
  • STATUS: Es el campo más importante.

    • ContainerCreating: El sistema todavía está descargando la imagen o iniciando el contenedor.
    • Running: ¡Correcto! El Pod está activo y en buen estado.
    • Pending: El clúster está intentando determinar dónde colocar el Pod.
    • Error o CrashLoopBackOff: Algo salió mal (por ejemplo, la aplicación se bloqueó).
  • READY: Muestra 1/1, lo que significa que 1 de los 1 contenedores definidos en el Pod está listo para atender tráfico.

Si ve ContainerCreating, espere unos segundos y vuelva a ejecutar kubectl get pods. Cuando aparezca Running, su servidor web Nginx estará activo.

Inspeccionar los detalles

En este paso, aprenderá a "mirar bajo el capó". El comando get proporciona un resumen, pero a veces necesita saber exactamente qué está ocurriendo, especialmente si algo sale mal.

El comando describe proporciona un informe detallado sobre su recurso de Kubernetes.

Para los principiantes, es útil pensar en kubectl get y kubectl describe como dos niveles de observación diferentes. get responde a "¿Cuál es el estado general actual?", mientras que describe responde a "¿Qué ocurrió para llegar hasta aquí?". Ese historial de eventos suele ser la forma más rápida de encontrar la causa raíz.

Ejecute el siguiente comando para inspeccionar nginx-pod:

kubectl describe pod nginx-pod

Este comando muestra una gran cantidad de información. Desplácese hasta el final y busque la sección Events. Allí se muestra, en orden cronológico, lo que ocurrió durante el inicio de su Pod:

Events:
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  ...   default-scheduler  Successfully assigned default/nginx-pod...
  Normal  Pulling    ...   kubelet            Pulling image "nginx:latest"
  Normal  Pulled     ...   kubelet            Successfully pulled image "nginx:latest"...
  Normal  Created    ...   kubelet            Created container nginx
  Normal  Started    ...   kubelet            Started container nginx

Este registro de eventos es el primer lugar que debe consultar para depurar problemas. Si un Pod se queda atascado en Pending o Error, la sección Events normalmente indicará el motivo (por ejemplo, "Insuficient CPU" o "ImagePullBackOff").

Ya ha creado, verificado e inspeccionado su primer Pod de Kubernetes.

Resumen

En este laboratorio, ha comprendido el concepto de Pod, el componente fundamental de Kubernetes.

Ha logrado:

  1. Escribir un plano YAML para un Pod de Nginx.
  2. Implementarlo en el clúster mediante kubectl apply.
  3. Verificar que estaba en estado Running con kubectl get.
  4. Consultar su historial detallado de inicio mediante kubectl describe.

Comprender los Pods es fundamental porque todos los demás conceptos de Kubernetes —Deployments, Services y StatefulSets— tratan, en última instancia, sobre la administración de estos Pods. Ahora está preparado para abordar temas más avanzados.