Imágenes OCI como volúmenes en Kubernetes: Una nueva era para la gestión de datos

01 January 2026 · 3 min lectura

Recientemente se ha incorporado un nuevo tipo de volumen al ecosistema de Kubernetes: el volumen image. Esta funcionalidad, disponible a partir de la versión 1.35.0 y actualmente en fase beta, promete cambiar la forma en que gestionamos los datos estáticos y configuraciones en nuestros clústeres.

La relevancia de este tipo de volumen ha ido en aumento en el entorno nativo de la nube. Diversas aplicaciones ya utilizan imágenes de contenedor para almacenar información en formato OCI (Open Container Initiative). Herramientas populares como Falco (para reglas de seguridad), Kyverno (para políticas) y FluxCD (para la gestión de despliegues) son claros ejemplos de esta tendencia. Ahora, esta capacidad es nativa de Kubernetes.

Beneficios de utilizar imágenes OCI para datos

Adoptar este patrón en tus aplicaciones trae consigo ventajas significativas:

  1. Simplificación de la infraestructura: Hasta ahora, gestionar ficheros externos solía requerir servicios de almacenamiento en la nube como S3 o GCS. Esto implicaba costos adicionales, gestión de buckets y configuración de permisos. Al utilizar el volumen image, prescindes de estos servicios externos, simplificando tu arquitectura.
  2. Seguridad integrada: Al tratarse de imágenes OCI estándar, puedes utilizar las mismas herramientas de escaneo de vulnerabilidades que ya usas para tus aplicaciones. Esto asegura que los ficheros de configuración o datos que introduces no contienen vulnerabilidades conocidas.
  3. Despliegues más rápidos: Si separas el código fuente de los datos, puedes actualizar configuraciones generando una nueva imagen de datos (más ligera) sin necesidad de reconstruir la imagen completa de la aplicación.

¿Cómo crear imágenes de datos?

Con esta funcionalidad habilitada, surge la necesidad de crear estas “imágenes de datos”. Aunque pueda sonar complejo, el proceso es bastante sencillo y se apoya en herramientas estándares del ecosistema.

Una variante sencilla, nativa y fácil de implementar es utilizar Docker y la imagen scratch.

Este enfoque no requiere herramientas adicionales. Simplemente creamos un Dockerfile que parte de una imagen vacía y copiamos nuestros datos dentro:

FROM scratch

COPY ./files /

Y el proceso de construcción es el estándar que ya conoces:

docker image build -t ghcr.io/mmorejon/erase-una-vez-5:main .

docker image push ghcr.io/mmorejon/erase-una-vez-5:main

Ejemplo de uso

Para utilizar este tipo de volumen, defines el volumen en la sección volumes de tu Pod haciendo referencia a la imagen, y luego lo montas en el contenedor mediante volumeMounts.

Aquí tienes un ejemplo sencillo de cómo configurarlo:

apiVersion: v1
kind: Pod
metadata:
  name: volume-example
spec:
  containers:
    - name: app
      image: ghcr.io/mmorejon/erase-una-vez-1:v0.3.2
      volumeMounts:
        - name: data-volume
          mountPath: /srv/data
  volumes:
    - name: data-volume
      image:
        reference: ghcr.io/mmorejon/erase-una-vez-5:main
        pullPolicy: IfNotPresent

En este caso, el contenido de la imagen ghcr.io/mmorejon/erase-una-vez-5:main estará disponible dentro del contenedor en la ruta /srv/data.

¿Cómo probarlo hoy mismo?

Para utilizar esta funcionalidad necesitas un clúster de Kubernetes en su versión 1.35.0. Dado que esta versión es muy reciente, es posible que todavía no esté disponible en los principales proveedores de nube como Azure, AWS o GCP.

Sin embargo, no dejes que eso te detenga. Puedes utilizar el repositorio erase-una-vez-k8s para levantar un clúster local compatible en cuestión de segundos (aproximadamente 40 segundos). Es una forma excelente de experimentar con estas nuevas características en tu propio entorno de desarrollo.

Crea tu clúster local utilizando el repositorio erase-una-vez-k8s.

Para los que vivimos en la terminal, aquí tienes los pasos para reproducirlo ahora mismo:

1. Clona el repositorio con el entorno listo

git clone https://github.com/mmorejon/erase-una-vez-k8s.git

cd erase-una-vez-k8s

2. Crea el clúster (requiere Docker instalado)

./bash/cluster.sh create

3. Despliega el Pod de ejemplo

kubectl apply -f https://raw.githubusercontent.com/mmorejon/erase-una-vez-5/refs/heads/main/manifest.yaml

Y el momento de la verdad. Verifica que el volumen se ha montado correctamente

kubectl exec erase-una-vez-5 -- cat /usr/share/nginx/html/example-1.txt
> Érase una vez Kubernetes

El volumen de tipo image es un paso más hacia la estandarización y simplificación en Kubernetes. Te animo a que lo pruebes y descubras cómo puede optimizar tus flujos de trabajo de datos y configuración.

comments powered by Disqus