Object Storage Module (MinIO)
Complete guide to deploying and managing MinIO object storage with S3-compatible API, high availability, and automated backups.
🏗️ Overview
Section titled “🏗️ Overview”The MinIO module provides enterprise-grade object storage with S3-compatible API, designed for cloud-native applications. It offers high performance, scalability, and security for storing unstructured data like documents, images, videos, and backups.
Architecture Components
Section titled “Architecture Components”MinIO Deployment:├── MinIO Server Pods (Distributed)├── Persistent Storage (SSD)├── S3-Compatible API├── Web Console├── Ingress Configuration└── SSL/TLS Termination
🚀 Features
Section titled “🚀 Features”S3-Compatible Storage
Section titled “S3-Compatible Storage”- S3 API Compatibility: Full compatibility with Amazon S3 API
- Multi-Tenant Support: Isolated buckets and access policies
- Object Versioning: Track and manage object versions
- Lifecycle Management: Automated object lifecycle policies
Performance & Scalability
Section titled “Performance & Scalability”- High Performance: Optimized for high-throughput workloads
- Horizontal Scaling: Add nodes to increase capacity
- Erasure Coding: Data protection with configurable parity
- Caching Layer: In-memory caching for frequently accessed objects
Security Features
Section titled “Security Features”- Access Control: IAM-style policies and bucket policies
- Encryption: Server-side encryption for data at rest
- SSL/TLS: Encrypted data in transit
- Audit Logging: Comprehensive access and operation logs
📦 Deployment Configuration
Section titled “📦 Deployment Configuration”Helmfile Configuration
Section titled “Helmfile Configuration”The MinIO deployment uses Helmfile for environment management:
repositories: - name: bitnami url: https://charts.bitnami.com/bitnami
releases: - name: minio namespace: minio chart: bitnami/minio version: "17.0.4" values: - values.yaml
Core Configuration Values
Section titled “Core Configuration Values”auth: rootUser: minioadmin rootPassword: minioadmin
defaultBuckets: "private, public"
persistence: enabled: true size: 200Gi storageClass: "local-path"
resources: requests: memory: "1Gi" cpu: "500m" limits: memory: "2Gi" cpu: "1000m"
ingress: enabled: true ingressClassName: traefik hostname: s3.theratap.de pathType: Prefix tls: true annotations: cert-manager.io/cluster-issuer: letsencrypt
console: ingress: enabled: true ingressClassName: traefik hostname: console.s3.theratap.de pathType: Prefix tls: true annotations: cert-manager.io/cluster-issuer: letsencrypt
Advanced Configuration Options
Section titled “Advanced Configuration Options”# High-availability configurationmode: distributedreplicaCount: 4
# Performance tuningresources: requests: memory: "4Gi" cpu: "2000m" limits: memory: "8Gi" cpu: "4000m"
# Security configurationsecurityContext: enabled: true runAsUser: 1001 fsGroup: 1001
# Monitoringmetrics: enabled: true serviceMonitor: enabled: true
🔄 Bucket Management
Section titled “🔄 Bucket Management”Default Buckets
Section titled “Default Buckets”The module automatically creates two default buckets:
- private: For sensitive data requiring restricted access
- public: For publicly accessible content
Creating Additional Buckets
Section titled “Creating Additional Buckets”# Using MinIO client (mc)mc alias set myminio https://s3.theratap.de minioadmin minioadmin
# Create new bucketmc mb myminio/myapp-data
# Set bucket policymc policy set download myminio/publicmc policy set private myminio/private
Bucket Policies
Section titled “Bucket Policies”// Public read access{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": ["s3:GetObject"], "Resource": ["arn:aws:s3:::public/*"] } ]}
// Private access only{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": ["s3:GetObject"], "Resource": ["arn:aws:s3:::private/*"] } ]}
🔐 Access Management
Section titled “🔐 Access Management”User Management
Section titled “User Management”# Create new usermc admin user add myminio appuser apppassword
# Create access keymc admin policy create myminio app-policy app-policy.jsonmc admin policy attach myminio app-policy --user appuser
# List usersmc admin user list myminio
Access Key Configuration
Section titled “Access Key Configuration”# Application configurations3: endpoint: https://s3.theratap.de accessKey: appuser secretKey: apppassword bucket: myapp-data region: us-east-1 useSSL: true
📊 Monitoring & Metrics
Section titled “📊 Monitoring & Metrics”Health Checks
Section titled “Health Checks”# Check MinIO service statuskubectl get pods -n minio -l app.kubernetes.io/name=minio
# Check service endpointskubectl get endpoints -n minio
# Test S3 API connectivitycurl -I https://s3.theratap.de
Performance Monitoring
Section titled “Performance Monitoring”# Check resource usagekubectl top pods -n minio
# Monitor storage usagekubectl exec -it minio-0 -n minio -- df -h
# Check MinIO metricskubectl port-forward -n minio svc/minio 9000:9000curl http://localhost:9000/minio/v2/metrics/cluster
Log Analysis
Section titled “Log Analysis”# View MinIO logskubectl logs -n minio -l app.kubernetes.io/name=minio
# Follow logs in real-timekubectl logs -f -n minio deployment/minio
# Check for errorskubectl logs -n minio -l app.kubernetes.io/name=minio | grep ERROR
🚀 Deployment
Section titled “🚀 Deployment”Deploy MinIO Module
Section titled “Deploy MinIO Module”# Navigate to module directorycd iac/modules/minio
# Deploy using Helmfilehelmfile apply
# Verify deploymentkubectl get pods -n miniokubectl get services -n minio
Verify Deployment
Section titled “Verify Deployment”# Check pod statuskubectl get pods -n minio -l app.kubernetes.io/name=minio
# Test S3 APIcurl -I https://s3.theratap.de
# Access web consoleopen https://console.s3.theratap.de
Post-Deployment Setup
Section titled “Post-Deployment Setup”# Install MinIO clientwget https://dl.min.io/client/mc/release/linux-amd64/mcchmod +x mcsudo mv mc /usr/local/bin/
# Configure clientmc alias set myminio https://s3.theratap.de minioadmin minioadmin
# Test connectionmc ls myminio
🔧 Maintenance Operations
Section titled “🔧 Maintenance Operations”Backup Operations
Section titled “Backup Operations”# Backup bucket datamc mirror myminio/myapp-data ./backup/myapp-data
# Backup with compressionmc mirror --compress myminio/myapp-data ./backup/myapp-data
# Restore from backupmc mirror ./backup/myapp-data myminio/myapp-data
Scaling Operations
Section titled “Scaling Operations”# Scale MinIO replicaskubectl scale deployment minio -n minio --replicas=4
# Update storage capacitykubectl patch pvc minio -n minio -p '{"spec":{"resources":{"requests":{"storage":"500Gi"}}}}'
Update Operations
Section titled “Update Operations”# Update MinIO versionhelmfile apply
# Monitor update progresskubectl rollout status deployment/minio -n minio
# Rollback if neededkubectl rollout undo deployment/minio -n minio
🚨 Troubleshooting
Section titled “🚨 Troubleshooting”Common Issues
Section titled “Common Issues”1. Connection Problems
Section titled “1. Connection Problems”# Check service connectivitykubectl get services -n minio
# Test network connectivitykubectl exec -it minio-0 -n minio -- nc -zv minio-service 9000
# Verify DNS resolutionkubectl exec -it minio-0 -n minio -- nslookup s3.theratap.de
2. Storage Issues
Section titled “2. Storage Issues”# Check persistent volume statuskubectl get pv | grep minio
# Check storage usagekubectl exec -it minio-0 -n minio -- df -h
# Check for disk space alertskubectl describe pod minio-0 -n minio
3. Authentication Issues
Section titled “3. Authentication Issues”# Verify credentialsmc alias list
# Test authenticationmc ls myminio
# Reset credentials if neededmc alias remove myminiomc alias set myminio https://s3.theratap.de minioadmin minioadmin
4. Performance Issues
Section titled “4. Performance Issues”# Check resource usagekubectl top pods -n minio
# Monitor network I/Okubectl exec -it minio-0 -n minio -- iostat -x 1
# Check for slow operationskubectl logs -n minio -l app.kubernetes.io/name=minio | grep "slow"
Recovery Procedures
Section titled “Recovery Procedures”Emergency Recovery
Section titled “Emergency Recovery”# Force delete stuck podskubectl delete pod minio-0 -n minio --grace-period=0 --force
# Restore from backupmc mirror ./backup/myapp-data myminio/myapp-data
# Verify data integritymc diff myminio/myapp-data ./backup/myapp-data
🔒 Security Configuration
Section titled “🔒 Security Configuration”SSL/TLS Configuration
Section titled “SSL/TLS Configuration”# TLS configurationtls: enabled: true secretName: minio-tls
# Certificate configurationcertificatesSecret: "minio-certs"
Network Security
Section titled “Network Security”# Network policy for MinIO accessnetworkPolicy: enabled: true allowExternal: false ingressRules: primaryAccessOnlyFrom: enabled: true namespaceSelector: matchLabels: name: production podSelector: matchLabels: app.kubernetes.io/name: backend
Access Control
Section titled “Access Control”# IAM configurationiam: enabled: true policy: - Effect: Allow Action: - s3:GetObject - s3:PutObject - s3:DeleteObject Resource: - arn:aws:s3:::myapp-data/*
📝 Configuration Examples
Section titled “📝 Configuration Examples”High-Performance Configuration
Section titled “High-Performance Configuration”# High-performance valuesresources: requests: memory: 8Gi cpu: 4000m limits: memory: 16Gi cpu: 8000m
# Performance tuningconfiguration: |- MINIO_CACHE_DRIVES=auto MINIO_CACHE_EXCLUDE=*.pdf;*.doc;*.docx MINIO_CACHE_EXPIRY=168h MINIO_CACHE_MAXUSE=80
Backup-Optimized Configuration
Section titled “Backup-Optimized Configuration”# Enhanced backup configurationbackup: enabled: true schedule: "0 2 * * *" # Daily at 2 AM retention: 30 compression: true
🔄 Maintenance Schedule
Section titled “🔄 Maintenance Schedule”Daily Tasks
Section titled “Daily Tasks”- Monitor storage usage
- Check backup completion
- Review access logs
- Verify service health
Weekly Tasks
Section titled “Weekly Tasks”- Analyze performance metrics
- Review security policies
- Update access keys
- Check for updates
Monthly Tasks
Section titled “Monthly Tasks”- Capacity planning review
- Security audit
- Performance optimization
- Disaster recovery testing
📋 Operational Checklist
Section titled “📋 Operational Checklist”Pre-Deployment
Section titled “Pre-Deployment”- Storage classes configured
- Persistent volumes available
- Network policies defined
- SSL certificates prepared
- Access policies defined
Post-Deployment
Section titled “Post-Deployment”- MinIO service accessible
- S3 API functional
- Web console accessible
- Default buckets created
- Access credentials configured
Regular Maintenance
Section titled “Regular Maintenance”- Backup integrity verified
- Performance metrics reviewed
- Security updates applied
- Capacity planning updated
- Disaster recovery tested
🔗 Related Documentation
Section titled “🔗 Related Documentation”- Backend Application - S3 integration
- Configuration Guide - Storage configuration
- Security Guide - Object storage security
- Disaster Recovery - Backup strategies
The MinIO object storage module provides enterprise-grade S3-compatible storage with high availability and comprehensive management capabilities.