MinIO: Almacenamiento de objetos en la nube

Si estamos familiarizados con temas de la nube, seguro que nos suena el popular almacenamiento S3 de Amazon. Lo que quizás no nos suena tanto es que tenemos una alternativa desde el software libre, llamada MinIO, que puede cubrir nuestras necesidades de almacenamiento, desde nuestra nube auto hospedada. Esta herramienta tiene una interfaz simple, es fácil de instalar, con compatibilidad con múltiples backends de almacenamiento y con la API de S3.

Logo de MinIO

Almacenamiento de objetos de alto rendimiento con MinIO

Tal y como indican en la documentación del proyecto, MinIO es una solución de almacenamiento de objetos de alto rendimiento, que proporciona una API compatible con Amazon Web Services S3 y es compatible con todas sus funcionales principales.

MinIO está diseñado para implementarse en cualquier lugar, esto es, nube pública o privada, infraestructura física, entornos orquestados, entre otros. El producto es ideal, de hecho, está pensado especialmente para ello, para plataformas con Kubernetes.

De hecho, mi intención, es un utilizar MinIO para almacenamiento de los backups de Kubernetes; esto lo veremos más adelante, en otra entrada, ya que este producto, como he dicho, es compatible con el almacenamiento de objetos.

Tal y como he comentado en el primer párrafo se trata de software libre, ya que utiliza una licencia GNU AGPLv3.

MinIO en un entorno con Kubernetes

Se puede desplegar MinIO de diferentes maneras. En este caso lo vamos en un entorno con Kubernetes, que tengo desde hace un tiempo en mi proveedor de confianza Clouding.io.

De hecho, podéis consultar la entrada donde expliqué su montaje paso a paso: Crear un entorno de Kubernetes en alta disponibilidad con Ubuntu 20.04 y K3s

Para desplegar MinIO,  solo hemos de seguir las instrucciones desde el apartado de documentación de su web.. En mi caso he adaptado el fichero de configuración, para que apunte el almacenamiento a un recurso NFS que tengo montado en los nodos worker.

Si seguistes la guía sobre Kubernetes con K3s, que he mencionado antes, sabrás que instalamos y configuramos Ingress-NGINX para que los proyectos tengan visibilidad a Internet, en modo «LoadBalancer»

Por lo que MinIO, una vez ya tenemos el pod desplegado en su respectivo «namespace», solo nos haría falta crear un servicio, similar a este:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: minio
  namespace: minio-dev
  name: minio
spec:
  type: LoadBalancer
  selector:
    app: minio
  ports:
    - name: web-ui
      protocol: TCP
      port: 9090

De esta manera ya veremos el pod desplegado junto con el servicio:

Listamos el pod y el servicio del namespace

MinIO en un solo nodo

Si no tenemos un entorno en alta disponibilidad, y simplemente tenemos un nodo con docker/podman, para probar este servicio, tendríamos que lanzar una orden similar a esta:

podman run -d -p 9000:9000 -p 9001:9001 \
-v /nfs/minio_share:/data \
quay.io/minio/minio server /data \
--console-address ":9001"

Debemos adaptar los volúmenes a nuestra necesidades, en cada caso.

Una vez ya tenemos el producto funcionando y accesible, ahora solo nos falta empezar a jugar con él.

Aspecto de la interfaz web de MinIO

Si no lo hemos cambiado en el despliegue, el usuario y la contraseña por defecto es «minioadmin»

Espero que esta entrada os haya parecido interesante. Nos leemos en la próxima.