K8S中使用helm安装MinIO

注意事项

使用helm部署MinIO分为两部分

  • helm部署MinIO operator,用来管理tenant(K8S集群中只能部署一个)
  • helm部署MinIO tenant,真实的MinIO Cluster(K8S集群中可以部署多个)

使用helm部署到K8S集群,则需要考虑如何暴露服务的问题。官方文档helm安装步骤是通过修改service nodePort配置,暴露服务。但也可以考虑部署ingress-nginx之类的ingress,MinIO helm配置文件中提供了指定ingress的参数。

本地Helm Chart部署MinIO

1.下载Helm Chart到本地

bash 复制代码
curl -O https://raw.githubusercontent.com/minio/operator/master/helm-releases/operator-5.0.11.tgz

Chart包含values.yaml文件,可以通过修改配置文件满足定制化需求。

解压后的文件,包含operator和tenant的Helm Chart。

2.部署ingress-nginx

bash 复制代码
helm upgrade ingress-minio-test -n minio-tenant-default ./ingress-nginx \
--set controller.image.tag=v1.4.0 \
--set controller.ingressClassResource.name=ingress-minio-test \
--set controller.ingressClassResource.controllerValue=k8s.io/ingress-minio-test \
--set controller.replicaCount=3 \
--set controller.service.enabled=false \
--set controller.scope.enabled=false \
--set controller.metrics.enabled=true \
--set controller.electionID=ingress-minio-test \
--set controller.nodeSelector.nodetype=minio-node \
--set controller.image.registry=k8s.gcr.io \
--set controller.image.image=ingress-nginx/controller \
--set controller.metrics.serviceMonitor.namespace=minio-ingress-test \
--description "install ingress-nginx 1.4.0"

下载ingress-nginx Helm Chart

bash 复制代码
wget https://github.com/kubernetes/ingress-nginx/releases/download/helm-chart-4.9.0/ingress-nginx-4.9.0.tgz

3.部署Operator

bash 复制代码
helm install \
--namespace minio-operator \
--set operator.image.repository=quay.io/minio/operator \
--set operator.image.tag=v5.0.9 \
--set operator.nodeSelector.minioowner=minio \
--set console.image.repository=quay.io/minio/operator \
--set console.image.tag=v5.0.9 \
--set console.nodeSelector.minioowner=minio \
--set console.ingress.enabled=true \
--set console.ingress.ingressClassName=ingress-minio-test \
--set console.ingress.host=minio-operator-test1.mytest.com \
minio-operator operator-5.0.9.tgz

4.部署Tenant

bash 复制代码
helm install \
--namespace minio-tenant-default \
--set tenant.name=minio-tenant-default \
--set tenant.image.repository=quay.io/minio/operator \
--set tenant.image.tag=RELEASE.2023-09-07T02-05-02Z \
--set tenant.pools[0].storageClassName=cbs \
--set tenant.pools[0].nodeSelector.minioowner=minio \
--set tenant.certificate.requestAutoCert=false \
--set tenant.env[0].name=MINIO_SERVER_URL \
--set tenant.env[0].value=http://minio-api-test1.mytest.com:80 \
--set tenant.env[1].name=MINIO_STORAGE_CLASS_STANDARD \
--set tenant.env[1].value=EC:8 \
--set tenant.configuration.name=minio-config-prod \
--set secrets.existingSecret=minio-config-prod \
--set ingress.api.enabled=true \
--set ingress.api.ingressClassName=ingress-minio-test \
--set ingress.api.host=minio-api-test1.mytest.com \
--set ingress.console.enabled=true \
--set ingress.console.ingressClassName=ingress-minio-test \
--set ingress.console.host=minio-console-test1.mytest.com \
minio-tenant-default tenant-5.0.9.tgz

指定storageClass

bash 复制代码
--set tenant.pools[0].storageClassName=cbs \

MinIO通过storageClass 创建PV,最小部署会创建16块PV,挂载到4个POD上。

通过ingress暴露服务

bash 复制代码
--set ingress.api.enabled=true \
--set ingress.api.ingressClassName=ingress-minio-test \
--set ingress.api.host=minio-api-test1.mytest.com \
--set ingress.console.enabled=true \
--set ingress.console.ingressClassName=ingress-minio-test \
--set ingress.console.host=minio-console-test1.mytest.com \

MinIO域名分为console域名和api域名,console域名默认调用服务9001端口,api域名默认调用服务9000端口。

ingress.api.enabled=true #开启通过ingress暴露api服务

ingress.api.ingressClassName=ingress-minio-test #指定ingress-nginx的ingressClassName

ingress.api.host=minio-api-test1.mytest.com #自定义api服务域名

ingress.console.enabled=true #开启通过ingress暴露console服务

ingress.console.ingressClassName=ingress-minio-test #指定ingress-nginx的ingressClassName

ingress.console.host=minio-console-test1.mytest.com #自定义console服务域名

环境变量参数配置

MinIO服务配置参数

MinIO大部分配置参数都是通过环境变量配置的,所以可以通过--set tenant.envx.name 设置环境变量名,通过--set tenant.envx.value 设置环境变量值

配置MINIO_SERVER_URL

参考文档:MinIO Console Settings --- MinIO Object Storage for Linux

MINIO_SERVER_URL 用于指定MinIO Share功能反馈的URL中的域名。可以通过此域名下载MinIO中的文件。

如果不设置,域名默认为K8S service内部域名,无法用于集群外部下载文件。

bash 复制代码
--set tenant.env[0].name=MINIO_SERVER_URL \
--set tenant.env[0].value=http://minio-api-test1.mytest.com:80 \
配置MinIO奇偶校验分片

配置文档:Erasure Code Settings --- MinIO Object Storage for Linux

什么是奇偶校验分片?纠删码文档:Erasure Coding --- MinIO Object Storage for Linux

默认值EC:4,此参数可不修改。如果为了提高数据可用性,可以提高EC的值。但是同样会减少实际可用空间。简单来说这就是设置数据冗余的比例。

bash 复制代码
--set tenant.env[1].name=MINIO_STORAGE_CLASS_STANDARD \
--set tenant.env[1].value=EC:8 \
设置用户名和密码

参考文档:Root Access Settings --- MinIO Object Storage for Linux

默认用户名:minio;密码minio123

用于生产环境时一定要修改,默认情况下minio用户密码非常简单,拥有最高权限,存在安全风险。

修改用户名和密码有两种方式:

  1. helm参数设置,明文设置,通过helm命令即可拿到明文用户名密码
  2. 通过环境变量设置。缺点就是明文配置,可以通过kubectl直接查看到。
  3. 推荐)通过创建K8S secret,配置账号密码。虽然也有方式解密密文,但是比直接明文安全。

1.helm参数设置

bash 复制代码
--set secrets.accessKey=miniouser \
--set secrets.secretKey=miniouser@123 \

2.环境变量设置

bash 复制代码
--set tenant.env[3].name=MINIO_ROOT_USER \
--set tenant.env[3].value=minioadmin \
--set tenant.env[4].name=MINIO_ROOT_PASSWORD \
--set tenant.env[4].value=minioadmin@123 \

3.K8S secret设置

在MinIO tenant 的Helm Chart的values.yaml文件的最后,给出了创建secret的示例。

可以参考示例,创建secret。

实际上所有需要环境变量配置的参数,都可以用一样的格式写到secret中。

在values.yaml文件的开头,也给出了引用secret的方法。

bash 复制代码
--set tenant.configuration.name=minio-config-prod \
--set secrets.existingSecret=minio-config-prod \

Helm Chart中templates/tenant-configuration.yaml文件也可以看出,如果没有设置secrets.existingSecret,那么此yaml文件就会拿secrets.accessKey和secrets.secretKey的值作为用户名和密码。

参考文档

Deploy Operator With Helm --- MinIO Object Storage for Kubernetes

相关推荐
鹤落晴春21 小时前
【K8s】从 ConfigMap 到 Argo CD:Kubernetes 配置管理链路
运维·云原生·容器·kubernetes
名字还没想好☜1 天前
Docker 镜像瘦身进阶:用 distroless/scratch 把 Go 服务打到 10MB,以及没 shell 怎么调试
运维·docker·容器·golang·kubernetes
陈聪.1 天前
Kubernetes 集群网络插件迁移:从 Flannel 到 Calico 实战总结
云原生·kubernetes
陈聪.1 天前
Kubernetes Service 与 Ingress 知识总结
云原生·容器·kubernetes
A-刘晨阳3 天前
K8s集群中的数据库新范式:KES-Operator解锁部署、扩缩容、备份全链路自动化
运维·数据库·云原生·kubernetes·自动化
江畔柳前堤3 天前
云原生 × AI 全景图谱:从 Kubernetes 到 Agent 基础设施的一次认知跃迁
人工智能·分布式·gpt·云原生·kubernetes·原型模式·agi
2601_962299243 天前
云原生时代的技术进阶:从零到精通掌握Kubernetes实战
云原生·kubernetes·学习路径·技术进阶·实战指南
名字还没想好☜4 天前
Docker 数据卷实战:volume、bind mount、tmpfs 到底怎么选,数据持久化与权限坑
运维·docker·容器·kubernetes
探索云原生4 天前
Kueue + HAMi vGPU 实战:显存与算力配额管理
docker·ai·云原生·kubernetes·gpu
玉&心4 天前
通过helm在k8s上面一键部署前端和后端代码
云原生·容器·kubernetes·helm