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.
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:
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.
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.