Kubernetes: Pods

Pod, contenedores, container runtimes, etc... Más sobre Kubernetes

Nuestro objetivo final es implementar nuestra aplicación en  forma de contenedores, dispuestos en un conjunto de nodos que están configurados para trabajar como un cluster. Los contenedores no se implementan directamente sobre los nodos, estos están encapsulados dentro objetos de Kubernetes llamados Pods. Un Pod es una instancia única de una aplicación.

Un Pod es la únidad más pequeña que se puede crear en Kubernetes y su caso más simple que podemos encontrar en Kubernetes es un solo nodo como cluster con una sola instancia ejecutandose como contenedor en un Pod.

¿Qué ocurre si muchos usuarios acceden a nuestra aplicación? Necesitaremos aumentar el número de instancias que tenemos y compartir la carga entre ellas. Pero, ¿Dónde se ubican esas nuevas instancias? Se crean en un nuevo Pod junto con la instancia de la misma aplicación. De esta forma tendremos dos instancias de la misma aplicación ejecutándose en Pods separados en el mismo nodo. ¿Qué ocurre si nuestro nodo no tiene capacidad para servir a más usuarios? Siempre se puede implementar el Pod de nuestra aplicación en nuevo nodo. Se puede agregar un nuevo nodo para ampliar la capacidad física del cluster.

Se puede agregar un nuevo nodo para ampliar la capacidad física del cluster.

Los Pods por regla general tienen una relación 1:1 con los contenedores que ejecutan la aplicación para poder escalar creando nuevos Pods o desescalar eliminado Pods, pero no se agregan contenedores adicionales a un Pod ya existente para hacer el escalado.

En el parrafo anterior decimos que la relación entre contenedor y Pod es 1:1 ¿Estamos restringidos a tener un solo contenedor dentro de un Pod? No, un Pod puede tener varios contenedores, pero normalmente, no son del mismo tipo y suelen realizan tareas auxiliares para nuestra aplicación como podría ser procesar los datos de un carrito de compra o procesar un fichero.

Vamos a ver como se usan los pods en Kubernetes:

$ kubectl run nginx

Lo que hace este comando es implementar un contenedor mediante la creación de un pod. Crea un pod de forma automática e implmenta la instancia de la imagen de Docker (u otro container runtime). ¿De dónde obtiene la imagen o como se le dice que imagen tiene que usar? Se le indica usando el parametro --image.

$ kubectl run nginx --image=nginx

En este caso, Docker se encargará de descargarse la imagen de nginx desde Docker Hub. Docker Hub es un repositorio de imágenes público donde se almacenan las aplicaciones.

Ahora que tenemos nuestro Pod creado ¿Cómo vemos los Pods que tenemos creados?

$ kubectl get pods

Nos mostrará los pods que tenemos creados y su estado junto con otra información.

También te puede interesar: