Skip to content

EOEPCA+ MinIO Deployment Guide⚓︎

MinIO is a high-performance object storage system that’s compatible with the Amazon S3 API. In the EOEPCA+ ecosystem, MinIO can serve as the object storage backend for various services, including user workspaces, MLOps and other data storage needs. This does not preclude the possibility to configure an alternative S3-compatible object storage solution instead of MinIO.


Introduction⚓︎

MinIO provides a scalable and high-performance object storage solution that’s compatible with AWS S3 APIs. It’s used within the EOEPCA+ platform to store and manage data securely.

Scripted Deployment⚓︎

The Minio deployment in this guide follows the same Scripted Deployment Approach, as for the EOEPCA building blocks.


Prerequisites⚓︎

Before you begin, make sure you have the following:

Component Requirement Documentation Link
Kubernetes Cluster (tested on v1.28) Installation Guide
Helm Version 3.5 or newer Installation Guide
kubectl Configured for cluster access Installation Guide
Ingress Properly installed Ingress Controller Setup Guide
TLS Certificates Managed via cert-manager or manually TLS Certificate Management Guide

Clone the Deployment Guide Repository:

git clone https://github.com/EOEPCA/deployment-guide
cd deployment-guide/scripts/minio

Validate your environment:

Run the validation script to ensure all prerequisites are met:

bash check-prerequisites.sh

Deployment Steps⚓︎

1. Configure MinIO⚓︎

Run the configuration script:

bash configure-minio.sh

During the script execution, you will be prompted for:

  • INGRESS_HOST: Base domain for ingress hosts.
    • Example: example.com
  • CLUSTER_ISSUER (if using cert-manager): Name of the ClusterIssuer.
    • Example: letsencrypt-http01-apisix
  • STORAGE_CLASS: Storage class for persistent volumes.
    • Example: standard

2. Deploy MinIO⚓︎

Install MinIO using Helm:

helm repo add minio https://charts.min.io/
helm repo update minio
helm upgrade -i minio minio/minio \
  --version 5.4.0 \
  --values generated-values.yaml \
  --namespace minio \
  --create-namespace

3. Create Access Keys⚓︎

Access the MinIO Console to create access keys:

  1. Navigate to https://console-minio.${INGRESS_HOST}/access-keys/new-account
  2. Log in using the MinIO User (user) and MinIO Password generated during the configuration step - see file ~/.eoepca/state.
  3. Under Access Keys select to Create access key +
  4. Note down or download the Access Key and Secret Key.
  5. Click Create.

Run the following script to save these keys to your EOEPCA+ state file:

bash ./apply-secrets.sh

By saving these keys to the EOEPCA+ state file, the credentials will be automatically set during the deployment of S3-integrated Building Blocks.


Validation⚓︎

Automated Validation:

bash validation.sh

This script performs several checks to validate your MinIO deployment:

Pod and Service Checks: Verifies that all MinIO pods are running and services are available.

Endpoint Checks: Confirms that the MinIO endpoints are accessible and return the expected HTTP status codes.

Functionality Tests: - Creates a test bucket. - Uploads a test file to the bucket. - Deletes the test file. - Deletes the test bucket.

Note: The script uses s3cmd to interact with MinIO. Ensure that s3cmd is installed and configured on your machine. Please refer to the s3cmd Installation Guide.


Manual Validation:

  1. Check Kubernetes Resources:

    kubectl get all -n minio
    
  2. Access Dashboard:

    https://console-minio.${INGRESS_HOST}
    
  3. Log In:

    Use the credentials generated during the configuration step:

    • Username: user
    • Password: (the password generated by the script)
  4. Verify Buckets:

    You should see the following buckets:

    • eoepca
    • cache-bucket
    • gitlab-backup-storage
    • gitlab-tmp-storage
    • gitlab-lfs-storage
    • mlopbb-mlflow-sharinghub
    • mlopbb-sharinghub
  5. Create a Test Bucket:

    Use the dashboard to create a new bucket and upload a test file.


Uninstallation⚓︎

To remove MinIO and associated resources:

  1. Uninstall MinIO:
helm -n minio uninstall minio
  1. Uninstall MinIO Bucket API:
helm -n minio uninstall minio-bucket-api
  1. Delete Secrets and PVCs:
kubectl delete secret minio-auth -n minio ; \
kubectl delete pvc -n minio --all

Further Reading⚓︎


Feedback⚓︎

If you have any issues or suggestions, please open an issue on the EOEPCA+ Deployment Guide Repository.