10 min to read
Introduction to MinIO - High Performance Object Storage
A comprehensive guide to MinIO installation and usage

Understanding MinIO Object Storage
What is MinIO?
Traditional block and file storage systems were designed in an era before cloud computing, big data, and containerization became mainstream. MinIO represents a new generation of storage platforms specifically designed for these modern workloads:
- Cloud-Native Architecture: Built from the ground up for modern distributed environments
- S3 Compatibility: Full implementation of the de facto standard API for object storage
- Kubernetes Integration: First-class citizen in container orchestration environments
- Software-Defined: Runs on commodity hardware without special requirements
MinIO bridges the gap between cloud-based object storage services and on-premises infrastructure, providing consistent APIs and performance characteristics regardless of deployment environment.
Key Features and Architecture
Core Features
Feature | Description |
---|---|
Scalability |
|
High Availability |
|
Performance |
|
S3 Compatibility |
|
Architecture Components
MinIO's distributed system consists of several key components:
- MinIO Server: Core component handling object storage operations
- Erasure Sets: Groups of drives across which data is striped with parity
- IAM Subsystem: Identity and access management service
- Console: Web-based management interface
- MinIO Client (mc): Command-line tool for interacting with MinIO servers
Security Features
MinIO includes extensive security capabilities:
- Encryption: Server-side encryption (SSE-S3, SSE-C, SSE-KMS) and client-side encryption
- TLS: Transport Layer Security for all communications
- Identity Management: Built-in IAM or integration with external identity providers
- Policy-Based Access Control: Fine-grained permissions using S3 policy syntax
- Key Management: Integration with external key management services (KMS)
Deployment and Installation Options
Kubernetes Deployment with Helm
Helm provides a streamlined method for deploying MinIO on Kubernetes clusters:
- Add the MinIO Helm repository
- Configure deployment parameters
- Install the MinIO chart
- Configure access to the MinIO services
Adding MinIO Helm Repository
# Add the official MinIO Helm repository
helm repo add minio https://charts.min.io/
# Verify the repository was added
helm repo list
NAME URL
minio https://charts.min.io/
Standard Installation
Deployment Type | Helm Command |
---|---|
Production Setup |
helm install my-minio minio/minio \ --namespace minio \ --create-namespace \ --set resources.requests.memory=1Gi \ --set replicas=4 \ --set persistence.size=500Gi \ --set accessKey=rootuser,secretKey=rootpass123 |
Development Setup |
helm install --set resources.requests.memory=512Mi \ --set replicas=1 \ --set persistence.enabled=false \ --set mode=standalone \ --set rootUser=rootuser,rootPassword=rootpass123 \ --generate-name minio/minio \ --namespace minio \ --create-namespace |
Verifying Installation
# Check the status of the MinIO deployment
kubectl get po,svc,deploy -n minio
# Output should include pods, services and deployments
Configuring Service Access
Advanced Configuration Options
For production environments, consider these additional configuration options:
- Persistent Volumes: Configure storage class and volume size based on workload requirements
- Resource Limits: Specify CPU and memory limits according to expected load
- High Availability: Configure multiple replicas with proper erasure coding settings
- TLS: Enable TLS with proper certificates for secure communication
- Custom Domain: Configure ingress with custom domain names
Using MinIO Client (mc)
Installation and Configuration
Platform | Installation Command |
---|---|
MacOS | brew install minio/stable/mc |
Linux | wget https://dl.min.io/client/mc/release/linux-amd64/mc && chmod +x mc && sudo mv mc /usr/local/bin/ |
Windows | wget https://dl.min.io/client/mc/release/windows-amd64/mc.exe -OutFile mc.exe |
Configuring Access to MinIO Server
# Set up an alias for your MinIO server
mc alias set myminio http://<server-ip>:<port> <access-key> <secret-key>
# Example
mc alias set myminio http://10.0.71.51:31067 rootuser rootpass123
# Verify the connection
mc admin info myminio
Basic Operations
The mc tool supports a wide range of operations similar to standard Unix commands:
Operation | Command | Description |
---|---|---|
Create Bucket | mc mb myminio/bucket-name |
Creates a new bucket on the MinIO server |
List Buckets | mc ls myminio |
Lists all buckets on the specified MinIO server |
Upload File | mc cp file.txt myminio/bucket-name/ |
Copies a file from local filesystem to MinIO bucket |
Download File | mc cp myminio/bucket-name/file.txt ./ |
Copies a file from MinIO bucket to local filesystem |
Mirror Directory | mc mirror local-dir/ myminio/bucket-name/ |
Synchronizes contents of local directory to MinIO bucket |
Remove Object | mc rm myminio/bucket-name/file.txt |
Deletes an object from a MinIO bucket |
Advanced Operations
# Set bucket policy (public read)
mc policy set download myminio/public-bucket
# Enable bucket versioning
mc version enable myminio/versioned-bucket
# Create service account
mc admin user svcacct add myminio/ rootuser
# Monitor MinIO events in real-time
mc watch myminio/bucket-name
# Find objects by pattern
mc find myminio/bucket-name --name "*.log"
Web UI Console
Console Features
The MinIO Console includes:
- Dashboard Overview: Metrics and status information
- Bucket Management: Create, configure, and browse buckets
- Identity Management: Create and manage users, groups, and policies
- Monitoring: Performance and health metrics
- Event Notifications: Configure bucket notifications
- Replication: Set up and manage bucket replication


Integration with Applications
Common Integration Scenarios
Integration Examples
Application | Integration Approach |
---|---|
TensorFlow |
import tensorflow as tf import boto3 from botocore.client import Config s3 = boto3.resource('s3', endpoint_url='http://minio-server:9000', aws_access_key_id='accesskey', aws_secret_access_key='secretkey', config=Config(signature_version='s3v4'), region_name='us-east-1') # Now use s3 resource with TensorFlow datasets tf.data.Dataset.list_files("s3://bucket-name/train-data/*") |
Backup Script |
#!/bin/bash # Backup script using aws-cli with MinIO AWS_ACCESS_KEY_ID=accesskey AWS_SECRET_ACCESS_KEY=secretkey ENDPOINT="http://minio-server:9000" # Backup database mysqldump -u root -p database > backup.sql # Upload to MinIO aws --endpoint-url=$ENDPOINT s3 cp \ backup.sql s3://backups/database/$(date +%Y-%m-%d)/backup.sql # Clean up local file rm backup.sql |
Key Points
-
Core Features
- S3-compatible API provides seamless integration with existing tools
- High-performance architecture designed for modern workloads
- Distributed design for scalability and resilience
- Erasure coding for data protection without traditional RAID -
Deployment Options
- Kubernetes-native deployment via Helm for cloud environments
- Standalone mode for development and smaller workloads
- Docker containers for simplified deployment
- Bare metal installation for maximum performance -
Management Tools
- Powerful mc command-line tool for operations and administration
- Web-based console for visual management
- Comprehensive monitoring and alerting capabilities
- RESTful API for automation and integration
Comments