在当今的云计算时代,对象存储成为了企业数据管理的关键组件。MinIO作为一个高性能、高可用的对象存储服务,以其与Amazon S3的兼容性和开源特性,迅速成为企业存储解决方案的热门选择。本文将带你深入了解如何在生产环境中部署MinIO,确保数据的安全性、可用性和可扩展性。

minio加密图示
MinIO 是一个高性能的对象存储系统,特别适合处理大规模非结构化数据,如照片、视频、日志文件、备份和容器/虚拟机镜像等。它设计之初就考虑到了云原生环境的需求,并且完全兼容Amazon S3 API,这意味着任何支持S3的应用程序或工具都可以无缝地与MinIO协同工作。
主要特点:
开源:MinIO是完全开源的软件,采用Apache License v2.0发布,允许用户自由使用、修改和分发。
高可用性:通过内置的Erasure Code(纠删码)技术,MinIO能够在硬件故障时提供数据冗余,确保数据的持久性和可用性。此外,MinIO还支持多站点复制,以实现跨地域的数据同步和灾难恢复。
性能卓越:MinIO被优化用于快速读写操作,在SSD和HDD上都能表现出色。它能够充分利用现代硬件的能力,包括多核CPU、大容量内存以及高速网络接口。
易于部署:MinIO可以轻松部署在各种环境中,无论是物理服务器、虚拟机还是容器平台(如Kubernetes)。同时,它也提供了简单易用的命令行工具和图形界面来管理存储桶和对象。
安全性强:MinIO支持传输层安全协议(TLS),保证了客户端与服务器之间通信的安全性。它还实现了细粒度的身份验证和授权机制,允许管理员精确控制谁可以访问哪些资源。
丰富的API支持:除了标准的S3 API外,MinIO还提供了一套RESTful API,方便开发者构建自定义应用程序。此外,MinIO Server自带了一个浏览器可访问的Web界面,简化了管理和监控流程。
扩展性强:MinIO可以通过增加节点的方式来线性扩展其存储容量和性能,满足不断增长的数据存储需求。
Tip:Minio对象存储系统适用于大文件场景,但不适用于海量小文件的场景。
先决条件
已有的Kubernetes部署(1.19+版本)
Helm工具已安装(3.2.0+版本)
有可用的Ingress暴露Minio web页面
有可用的storageClass提供存储
1、添加Minio的helm仓库
$ helm repo add bitnami https://charts.bitnami.com/bitnami --force-update
"bitnami" has been added to your repositories
Tip:如果多次下载Minio chart都失败的话,可以尝试使用国内helm源(https://helm-charts.itboon.top/bitnami)
2、下载Minio chart包
$ helm pull bitnami/minio --untar --untardir etc/kubernetes/addons/
3、部署Minio配置文件
$ cat <<'EOF' | sudo tee etc/kubernetes/addons/minio-values.yaml > dev/null
fullnameOverride: minio
# 指定镜像下载地址
image:
registry: core.jiaxzeng.com
repository: library/minio/minio
tag: 2024.11.7-debian-12-r0
# Minio模式为分布式
mode: distributed
# Minio登录帐密
auth:
existingSecret: minio-password-secret
# Minio web外部方式
ingress:
enabled: true
ingressClassName: nginx
hostname: minio.jiaxzeng.com
annotations:
cert-manager.io/cluster-issuer: ca-cluster-issuer
tls: true
# Minio api外部方式
apiIngress:
enabled: true
ingressClassName: nginx
hostname: s3.jiaxzeng.com
annotations:
cert-manager.io/cluster-issuer: ca-cluster-issuer
tls: true
# 持久化配置
persistence:
enabled: true
storageClass: ceph-rbd-storage
accessModes:
- ReadWriteOnce
size: 32Gi
EOF
4、创建Minio web帐密
$ kubectl -n kube-system create secret generic minio-password-secret --from-literal=root-user=admin --from-literal=root-password=xxxx
secret/minio-password-secret created
5、部署Minio
$ helm -n kube-system install minio -f etc/kubernetes/addons/minio-values.yaml etc/kubernetes/addons/minio
NAME: minio
LAST DEPLOYED: Mon Dec 16 22:20:09 2024
NAMESPACE: kube-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: minio
CHART VERSION: 14.8.5
APP VERSION: 2024.11.7
** Please be patient while the chart is being deployed **
MinIO® can be accessed via port on the following DNS name from within your cluster:
minio.kube-system.svc.cluster.local
To get your credentials run:
export ROOT_USER=$(kubectl get secret --namespace kube-system minio-password-secret -o jsonpath="{.data.root-user}" | base64 -d)
export ROOT_PASSWORD=$(kubectl get secret --namespace kube-system minio-password-secret -o jsonpath="{.data.root-password}" | base64 -d)
To connect to your MinIO® server using a client:
- Run a MinIO® Client pod and append the desired command (e.g. 'admin info'):
kubectl run --namespace kube-system minio-client \
--rm --tty -i --restart='Never' \
--env MINIO_SERVER_ROOT_USER=$ROOT_USER \
--env MINIO_SERVER_ROOT_PASSWORD=$ROOT_PASSWORD \
--env MINIO_SERVER_HOST=minio \
--image docker.io/bitnami/minio-client:2024.10.29-debian-12-r1 -- admin info minio
To access the MinIO® web UI:
- Get the MinIO® URL:
You should be able to access your new MinIO® web UI through
https://minio.jiaxzeng.com/minio/
WARNING: There are "resources" sections in the chart not set. Using "resourcesPreset" is not recommended for production. For production installations, please set the following values according to your workload needs:
- resources
+info https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
⚠ SECURITY WARNING: Original containers have been substituted. This Helm chart was designed, tested, and validated on multiple platforms using a specific set of Bitnami and Tanzu Application Catalog containers. Substituting other containers is likely to cause degraded security and performance, broken chart features, and missing environment variables.
Substituted images detected:
- core.jiaxzeng.com/library/minio/minio:2024.11.7-debian-12-r0
1、验证pod是否Running
$ kubectl -n kube-system get pod -l app.kubernetes.io/instance=minio
NAME READY STATUS RESTARTS AGE
minio-0 1/1 Running 0 14m
minio-1 1/1 Running 0 14m
minio-2 1/1 Running 0 14m
minio-3 1/1 Running 0 14m
2、浏览器访问Minio

按照上述步骤,您可以轻松地在生产环境中部署一个稳定可靠的MinIO对象存储系统。这不仅能够有效支持您的业务需求,还能为未来的扩展和发展提供坚实的技术基础。希望这篇指南能帮助您顺利完成MinIO的部署,让您的数据管理和应用开发更加得心应手。
别忘了,关注我们的公众号,获取更多关于容器技术和云原生领域的深度洞察和技术实战,让我们携手在技术的海洋中乘风破浪!





