Cómo crear pods multicontenedores en Kubernetes

Los pods suelen tener un solo contenedor, es decir, los pods de un solo contenedor son el caso de uso más común y no es necesario tener un solo contenedor en el pod. Hay algunos casos de uso en los que un único pod puede tener varios contenedores en su interior. Los pods multicontenedor son los que contienen dos o más contenedores relacionados que comparten recursos como el espacio de red, los volúmenes compartidos, etc. y funcionan juntos como una sola unidad.

Una de las razones para utilizar un pod multicontenedor es la simplificación de la comunicación entre contenedores. Todos los contenedores dentro del pod comparten el mismo espacio de red para comunicarse a través dellocalhost. Otra razón para utilizar un pod multicontenedor es que todos los contenedores tienen el mismo ciclo de vida que debe ejecutarse en el mismo nodo. Cuando se necesita que todos los contenedores tengan el mismo volumen montado para que puedan comunicarse entre sí leyendo y modificando archivos en el volumen de almacenamiento se pueden utilizar pods de contenedores múltiples.

En este artículo, crearemos un pod con 2 contenedores en su interior. Este ejemplo ayudará a entender la creación de un pod con múltiples contenedores.

Requisitos previos

  1. Clúster Kubernetes con al menos 1 nodo trabajador.
    Si quieres aprender a crear un Clúster Kubernetes, haz clicaquí. Esta guía te ayudará a crear un cluster Kubernetes con 1 Maestro y 2 Nodos en Instancias EC2 de AWS Ubuntu 18.04.

¿Qué vamos a hacer?

  1. Crear un Pod Multicontenedor

Crear un Pod Multicontenedor

Crea un archivo de definición de puerto multicontenedor con el siguiente contenido.

vim multi-container-pod-example.yml
apiVersion: v1
kind: Pod
metadata:
  name: multi-container-pod
spec:
  containers:
  - name: container-1
    image: nginx
    ports:
    - containerPort: 80  
- name: container-2 image: alpine command: ["watch", "wget", "-qO-", "localhost"]

multi-contenedor-pod-definición

Este archivo tiene una definición para 2 contenedores que compartirán la misma red, recursos y volumen.

Obtén una lista de los puertos existentes y crea un puerto multicontenedor utilizando los siguientes comandos.

kubectl get pods #Get a list of existing pods
kubectl create -f multi-container-pod-example.yml #Create a multi container pod
kubectl get pods #Check the pods after creating in the above step

crear-multi-contenedor-pod

En la captura de pantalla anterior, puedes ver que hay 2/2 pods con estado LISTO. Esto significa que hay 2 pods y que de esos 2 pods, 2 pods están en ejecución.

Obtén una lista de pods y describe el que acabamos de crear.

kubectl get pods
kubectl describe pod multi-container-pod #Get details of the Pod.

describir-detalle-de-la-vista

Cuando describas el pod, obtendrás los detalles de los dos contenedores que contiene.

En la captura de pantalla anterior, puedes ver que hay dos contenedores, el contenedor 1 y el contenedor 2. Ambos contenedores pertenecen al mismo pod.

Ahora, para comprobar los registros de un contenedor concreto, puedes añadir el nombre del contenedor al comando que utilizamos para obtener los registros del pod.

kubectl get pods
kubectl logs multi-container-pod #This does not work
kubectl logs multi-container-pod container-1 #Specify the container name to get the logs

comprobar-registros-del-contenedor-dentro-del-pozo

En la captura de pantalla anterior, puedes ver que si el nombre del contenedor no se indica en el comando, aparece un error en el que se te indica que especifiques el nombre del contenedor en el comando.

Puedes especificar el nombre de un solo contenedor y no se pueden especificar varios contenedores en el comando para obtener los registros.

kubectl get pods
kubectl logs multi-container-pod #
kubectl logs multi-container-pod container-1 container-2 #Two containers can not be specified

comprobar-registros-de-un-contenedor-a-la-vez

En la captura de pantalla anterior, puedes ver que cuando especificas 2 contenedores para obtener los registros, el comando falla.

El comando simple para iniciar sesión en el pod no funciona cuando hay varios contenedores dentro de un mismo pod.

kubectl get pods
kubectl exec -it multi-container-pod /bin/bash

intentar entrar en el pod

Para iniciar sesión en el contenedor concreto, tenemos que especificar el nombre del contenedor en el comando. Además, no puedes iniciar sesión en 2 pods al mismo tiempo.

kubectl get pods
kubectl exec -it multi-container-pod -c container-1 /bin/bash #Login into the container

entrada-en-el-contenedor-dentro-del-podo

Cuando ya no lo necesites, puedes eliminarlo con el siguiente comando.

kubectl get pod
kubectl delete pod multi-container-pod #Delete the pod

suprimir el podio

Conclusión

En este artículo hemos aprendido cómo se puede crear un pod multicontenedor. También hemos visto cómo obtener los registros de un contenedor concreto y entrar en un único contenedor. Un pod multicontenedor nos ayuda a tener contenedores dependientes en el mismo pod.

También te podría gustar...