Kubernetes: Trabajando con un Pod multicontenedor

Introducción

Vamos a profundizar en los Pods multicontenedor. Como indicamos en el contenido del módulo, un Pod puede estar formado por varios contenedores y por volúmenes (para permitir que los contenedores del Pod puedan compartir almacenamiento).

La razón principal por la que los Pods pueden tener múltiples contenedores es para admitir aplicaciones auxiliares que ayudan a una aplicación primaria. Ejemplos típicos de estas aplicaciones pueden ser las que envían o recogen datos externos (por ejemplo de un repositorio) y los servidores proxy. El ayudante y las aplicaciones primarias a menudo necesitan comunicarse entre sí. Normalmente, esto se realiza a través de un sistema de archivos compartido o mediante la interfaz loopback (localhost).

Creando un Pod multicontenedor

  • Creamos un fichero yaml con la descripción del Pod multicontenedor. En este caso, vamos a crear un Pod con dos contenedores: uno con la imagen nginx y otro con la imagen busybox.
    vi pod-multicontenedor.yaml
    
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-multicontenedor
    spec:
      volumes:
      - name: html
        emptyDir: {}
      containers:
      - name: contenedor1
        image: nginx
        volumeMounts:
        - name: html
          mountPath: /usr/share/nginx/html
      - name: contenedor2
        image: debian
        volumeMounts:
        - name: html
          mountPath: /html
        command: ["/bin/sh", "-c"]
        args:
          - while true; do
              date >> /html/index.html;
              sleep 1;
            done
    
  • Vamos a crear un pod.
    kubectl create -f pod-multicontenedor.yaml
    
  • Mostramos la información del pod, y podemos ver que tiene dos contenedores.
    kubectl get pod pod-multicontenedor -o wide
    

6

  • Mostramos el contenido de index.html del primer contenedor:
    kubectl exec pod-multicontenedor -c contenedor1 -- /bin/cat /usr/share/nginx/html/index.html
    

7

  • Mostramos el contenido de index.html del segundo contenedor:
    kubectl exec pod-multicontenedor -c contenedor2 -- /bin/cat /html/index.html
    

8

  • Ejecutamos un “port forward” para acceder al Pod en el puerto 8081 de localhost, sabiendo que el servicio usa el puerto 80.
    kubectl port-forward pod-multicontenedor 8081:80
    

9

  • Accede desde un navegador para ver el resultado. Refresca la página para observar cómo va cambiando el fichero index.html.

    10