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.env[x].name 设置环境变量名,通过--set tenant.env[x].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

相关推荐
条纹布鲁斯7 小时前
dockerdsktop修改安装路径/k8s部署wordpress和ubuntu
docker·kubernetes
登云时刻11 小时前
Kubernetes集群外连接redis集群和使用redis-shake工具迁移数据(一)
redis·kubernetes·bootstrap
吴半杯11 小时前
gateway漏洞(CVE-2022-22947)
docker·kubernetes·gateway
灼烧的疯狂16 小时前
K8S + Jenkins 做CICD
容器·kubernetes·jenkins
wenyue112117 小时前
Revolutionize Your Kubernetes Experience with Easegress: Kubernetes Gateway API
容器·kubernetes·gateway
Python私教19 小时前
ubuntu搭建k8s环境详细教程
linux·ubuntu·kubernetes
O&REO21 小时前
单机部署kubernetes环境下Overleaf-基于MicroK8s的Overleaf应用部署指南
云原生·容器·kubernetes
politeboy21 小时前
k8s启动springboot容器的时候,显示找不到application.yml文件
java·spring boot·kubernetes
运维小文1 天前
K8S资源限制之LimitRange
云原生·容器·kubernetes·k8s资源限制
登云时刻1 天前
Kubernetes集群外连接redis集群和使用redis-shake工具迁移数据(二)
redis·容器·kubernetes