Saltar al contenido principal

Pods

Los pods son una unidad de ejecución de uno o varios contenedores que comparten la misma red y almacenamiento. Es el objeto más básico que puedes ejecutar en Kubernetes y el que nos permite ejecutar un contenedor. Vamos a ver cómo crear, gestionar y eliminar pods.

Dentro vídeo: https://youtu.be/D1YjrFoqg4Q

Pods

Características de los pods

  1. Uno o varios contenedores:

    En la mayoría de los casos, un pod contiene un solo contenedor (como un servicio web).

    También puede contener varios contenedores que necesitan comunicarse estrechamente (por ejemplo, el contenedor de una app y otro que le ayuda a recopilar logs).

  2. Compartición de recursos:

    Todos los contenedores dentro de un pod comparten la misma dirección IP y pueden comunicarse entre sí mediante localhost.

    También pueden compartir volúmenes de almacenamiento persistente.

  3. Ciclo de vida y gestión:

    Kubernetes no gestiona pods individuales de forma directa en producción, sino que usa objetos como Deployments, ReplicaSets o DaemonSets para gestionarlos automáticamente, que veremos en los siguientes capítulos.

Crear un pod con kubectl

Ya hemos visto brevemente cómo crear pods con manifiestos. Algunos objetos de Kubernetes se pueden crear desde el propio CLI de kubectl. Por ejemplo, creamos un nuevo pod especificando el nombre que le queremos asignar y la imagen que utilizaremos:

kubectl run <nom_pod> --image=<imagen>

Por ejemplo, para crear un pod con la imagen de nginx:

kubectl run nginx --image=nginx

Truco de examen: kubectl run también nos sirve para generar el manifiesto de un pod sin crearlo, con kubectl run nginx --image=nginx --dry-run=client -o yaml > pod.yaml. Es mucho más rápido que escribir el YAML desde cero y se usa constantemente en los exámenes de certificación.

Crear un pod con un manifiesto

Para crear un pod con un manifiesto, creamos un archivo con extensión .yaml y lo aplicamos con kubectl apply -f <archivo>.

apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx

Esta sería la forma más básica de crear un pod. En este caso, creamos un pod con un contenedor de nginx.

Modificar un pod

Podemos modificar un pod con el comando kubectl edit pod <nom_pod>. Esto nos abrirá el manifiesto del pod en un editor de texto. Podemos modificarlo y guardarlo para que se apliquen los cambios.

kubectl edit pod nginx

También podríamos modificar el manifiesto directamente y aplicarlo con kubectl apply -f <archivo>. Kubernetes reconocerá que ya existe un pod con ese nombre y lo modificará para cumplir con los nuevos atributos.

apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx:alpine

En este caso, hemos cambiado la imagen de nginx por la versión alpine. Kubernetes se encargará de parar el contenedor actual y crear uno nuevo con la nueva imagen.

Ten en cuenta que solo algunos campos de un pod son modificables en caliente (la imagen, por ejemplo). Para cambios más profundos, como variables de entorno o volúmenes, tendremos que eliminar y recrear el pod (otro motivo por el que en producción se usan Deployments).

Ver un pod

Tenemos varias formas de consultar un pod. Podemos listar todos los pods, listar un pod concreto, ver su descripción, obtener su manifiesto, etc. Por ejemplo:

kubectl get pods # Listar todos los pods del namespace actual
kubectl get pods -o wide # Listar los pods en una tabla más amplia
kubectl get pods <nom_pod> # Listar el pod especificado
kubectl describe pods <nom_pod> # Describir el pod (eventos, estado, etc.)
kubectl get pods <nom_pod> -o yaml # Nos devuelve todo el manifiesto del pod

Ver logs de un pod

kubectl logs <nom_pod>

Ejecutar un comando en un pod

kubectl exec <nom_pod> -- ls

También podemos abrir una shell interactiva dentro del contenedor:

kubectl exec -it <nom_pod> -- sh

Eliminar un pod

kubectl delete pod nginx

Problemas de los pods

Los pods no saben restaurarse ni replicarse a sí mismos: necesitan algo que gestione estos procesos por ellos. Para eso se utilizan otros tipos de objetos, como los ReplicaSets y Deployments que veremos en los próximos capítulos.


Volver al índice