使用helm chart在Kubernetes部署Minio-适用于生产环境的部署方案
使用helm chart在Kubernetes部署Minio-适用于生产环境的部署方案
Kubernetes部署部署Minio支持YAML和Helm Chart两种方式。本文将以Helm Chart为例,介绍如何在Kubernetes上部署Minio。
1. 前提条件
-
默认standalone模式下,需要开启Beta API的Kubernetes 1.4+。
-
distributed 模式,需要开启Beta API的Kubernetes 1.5+。
-
底层支持PV provisioner,准备可用的storage class。
-
K8s集群已经安装Helm。
2. 使用Helm Charm部署Minio
通过Helm Chart部署,支持单机(standalone)和分布式(distributed)模式的Minio。生产环境中建议使用分布式模式,以提高Minio的可用性和容错能力。
2.1 准备Minio Helm Chart
Minio Helm Chart位于bitnami/charts仓库中。
- 添加Minio Helm Chart仓库
# 添加仓库
]# helm repo add bitnami https://charts.bitnami.com/bitnami# 更新仓库
]# helm repo update
- 拉取Minio Helm Chart
# 查询Minio Helm Chart可用的版本
]# helm search repo bitnami/minio
NAME CHART VERSION APP VERSION DESCRIPTION
bitnami/minio 14.7.7 2024.9.9 MinIO(R) is an object storage server, compatibl...# 安装Minio Helm Chart
]# mkdir -p /root/minio && cd /root/minio
]# helm pull bitnami/minio --untar
- 配置Minio Helm Chart
Minio Helm Chart提供了许多可配置的参数。 可以修改values.yaml
文件来配置Minio,也可以通过--set key=value[,key=value]
给helm install
命令设置参数值。
常用配置参数:
image.registry
: Minio Docker镜像源。image.repository
:Minio Docker镜像仓库名。image.tag
:Minio Docker镜像版本。image.pullPolicy
:镜像拉取策略。mode
:Minio模式,可选standalone
或distributed
。auth.rootUser
:Minio root用户。auth.rootPassword
:Minio root密码。persistence.enabled
:是否开启持久化存储。persistence.storageClass
:存储类。默认为空,表示使用默认的storage class。persistence.size
:存储容量。默认8Gi,根据实际情况调整。resourcesPreset
: “micro”,用于设置CPU和内存资源限制。可选参数:none, nano, micro, small, medium, large, xlarge, 2xlarge。resouces
: CPU和内存资源限制。上面参数设置后,此处无需设置。
2.2 部署standdalone模式的Minio
helm chart默认部署standalone模式的Minio,使用deployment方式部署。
# 由openebs提供默认存储类
]# kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
openebs-hostpath (default) openebs.io/local Delete WaitForFirstConsumer false 77d# 使用默认参数部署Minio
]# cd minio
]# kubectl create namespace minio-oss
]# helm -n minio-oss install minio . .....To get your credentials run:export ROOT_USER=$(kubectl get secret --namespace minio-oss minio -o jsonpath="{.data.root-user}" | base64 -d)export ROOT_PASSWORD=$(kubectl get secret --namespace minio-oss minio -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 minio-oss 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.9.9-debian-12-r0 -- admin info minio
......# 根据部署后的提示,使用如下命令获取访问凭证
]# export ROOT_USER=$(kubectl get secret --namespace minio-oss minio -o jsonpath="{.data.root-user}" | base64 -d)
]# export ROOT_PASSWORD=$(kubectl get secret --namespace minio-oss minio -o jsonpath="{.data.root-password}" | base64 -d)
Access Key: admin
]# echo "Access Key: $ROOT_USER"
]# echo "Secret Key: $ROOT_PASSWORD"
Secret Key: ALmRHyIQr1
修改minio service类型为NodePort,以便外部访问。
]# kubectl patch service minio -n minio-oss -p '{"spec": {"type": "NodePort"}}']# # kubectl get svc -n minio-oss
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
minio NodePort 10.96.114.179 <none> 9000:30118/TCP,9001:30954/TCP 7m31s
通过minio-console的NodePort访问Minio服务,上述端口为30954。用户名为:admin
,密码为:ALmRHyIQr1
。
2.3 部署distributed模式的Minio
如需部署distributed模式的Minio,请将mode
字段设置为distributed
,使用statefulset方式部署。同时置其他相关参数:
auth:rootUser: admin # 设置root用户,默认为adminrootPassword: "" # 设置root密码,默认随机生成,可以后续获取。也可以这里设置密码。
...
mode: distributed
...
# service.type设置为LoadBalancer,ingress.enabled设置为true,apiIngress.enabled设置为true。如果没有ingress,可以设置service.type为NodePort。
service:type: LoadBalancer # 这里选择LoadBalancer,LB由metallb提供,需要提前安装metallb。也可以使用NodePort。
...
...
# 设置持久化存储
persistence:enabled: truestorageClass: "openebs-hostpath"mountPath: /bitnami/minio/dataaccessModes:- ReadWriteOncesize: 8Gi # 根据实际情况调整
...
使用如下命令部署Minio:
]# kubectl create namespace minio-oss
]# helm -n minio-oss install minio . To get your credentials run:export ROOT_USER=$(kubectl get secret --namespace minio-oss minio -o jsonpath="{.data.root-user}" | base64 -d) # 获取root用户export ROOT_PASSWORD=$(kubectl get secret --namespace minio-oss minio -o jsonpath="{.data.root-password}" | base64 -d) # 获取root用户密码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 minio-oss 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.9.9-debian-12-r0 -- admin info minioTo access the MinIO® web UI:- Get the MinIO® URL:NOTE: It may take a few minutes for the LoadBalancer IP to be available.Watch the status with: 'kubectl get svc --namespace minio-oss -w minio'export SERVICE_IP=$(kubectl get svc --namespace minio-oss minio --template "{{ range (index .status.loadBalancer.ingress 0) }}{{ . }}{{ end }}") # 获取minio服务IPecho "MinIO® web URL: http://$SERVICE_IP:9001/minio" # wb访问minio console
检查部署的资源:
]# kubectl get all -n minio-oss
NAME READY STATUS RESTARTS AGE
pod/minio-0 1/1 Running 0 19s
pod/minio-1 1/1 Running 0 19s
pod/minio-2 1/1 Running 0 19s
pod/minio-3 1/1 Running 0 19sNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/minio LoadBalancer 10.97.29.192 10.210.10.241 9000:32721/TCP,9001:30178/TCP 19s
service/minio-headless ClusterIP None <none> 9000/TCP,9001/TCP 19sNAME READY AGE
statefulset.apps/minio 4/4 19s
上述命令部署了个带有4个节点的分布式Minio服务器,通过http://$SERVICE_IP:9001/minio
即可访问minio console。
对应本文环境为:http://10.210.10.241:9000/minio
,用户名为:admin
,密码为:e1Vgg0eZ65
。
WARN:
Detected Linux kernel version older than 4.0 release, there are some known potential performance problems with this kernel version. MinIO recommends a minimum of 4.x linux kernel version for best performance.(警告:检测到Linux内核版本低于4.0版本,该版本存在一些已知的性能问题。MinIO官方建议部署minio时,使用4.x以上linux内核版本,否则会存在性能问题。)
3. 使用Helm更新Minio版本
修改values.yaml
文件中的参数,然后使用如下命令更新Minio版本:
helm -n minio-oss upgrade minio .
4. 卸载Chart
如果需要卸载Minio Helm Chart,使用下面的命令删除它:
# 根据命名空间和release name卸载chart
helm -n minio-oss uninstall minio# 清理pvc
kubectl delete pvc data-minio-{0..3} -n minio-oss
5. 参考
- Minio Helm Chart