文档基于2025-10-10日社区最终版构建     
切换到英文版    进入演示系统    进入交流社区

MinIO Documentation

部署一个 MinIO 租户

此过程记录了使用 MinIO Operator 部署 MinIO Tenant 的步骤。

部署单节点拓扑需要本文档未涵盖的其他配置。 您也可以根据需要,使用简单的 Kubernetes YAML 对象来描述单节点拓扑以进行本地测试和评估。 MinIO 不建议也不支持在生产环境中使用单节点部署拓扑。

本文档假设读者熟悉所有引用的Kubernetes概念、工具和流程。 虽然本文档可能尽最大努力提供配置或部署 Kubernetes 相关资源的指导,但不能替代官方文档Kubernetes Documentation.

使用 Kustomize 部署 MinIO 租户

以下过程使用kubectl -k使用baseKustomization 模板在MinIO Operator Github repository.

您可以从不同的基础或预构建模板中选择仓库作为您的起点,或者使用以下内容构建您自己的 Kustomization 资源:MinIO Custom Resource Documentation.

重要

如果你使用 Kustomize 部署 MinIO 租户,则必须使用 Kustomize 来管理或升级该部署。 不要使用kubectl krew使用Helm Chart或类似方法来管理或升级MinIO租户。

此过程并未详尽说明所有可能的配置选项Tenant CRD它提供了一个基准,您可以根据自己的需求修改和定制租户环境。

  1. 创建一个租户的 YAML 对象

    使用kubectl kustomize生成包含部署所需的所有 Kubernetes 资源的 YAML 文件的命令base租户:

    kubectl kustomize https://github.com/minio/operator/examples/kustomization/base/ > tenant-base.yaml
    

    该命令创建一个单一的 YAML 文件,其中包含多个由分隔符隔开的对象---行。 在您喜欢的编辑器中打开文件。

    以下步骤基于每个对象的kindmetadata.name字段:

  2. 配置租户拓扑

    Thekind: Tenantobject 描述了 MinIO 租户。

    以下字段共享spec.pools[0]前缀和控制租户中部署的所有 Pod 的服务器数量、每个服务器的卷数以及存储类:

    字段

    描述

    servers

    要在服务器池中部署的 MinIO Pod 数量。

    volumesPerServer

    要附加到每个 MinIO pod 的持久卷数量(servers). 操作员生成volumesPerServer x servers租户的持久卷声明。

    volumeClaimTemplate.spec.storageClassName

    与生成的持久卷声明关联的 Kubernetes 存储类。

    如果没有存储类匹配指定的值or如果指定的存储类无法满足请求的PVC数量或存储容量,租户可能无法启动。

    volumeClaimTemplate.spec.resources.requests.storage

    为每个生成的PVC请求的存储量。

  3. 配置租户亲和性或反亲和性

    MinIO Operator 支持以下 Kubernetes 亲和性与反亲和性配置:

    • 节点亲和性 (Node Affinity)spec.pools[n].nodeAffinity)

    • Pod Affinity (Pod 亲和性spec.pools[n].podAffinity)

    • Pod 反亲和性 (spec.pools[n].podAntiAffinity)

    MinIO 建议配置具有 Pod 反亲和性的租户,以确保 Kubernetes 调度程序不会在同一个工作节点上调度多个 Pod。

    如果您有要在其上部署租户的特定工作节点,请将这些节点标签或过滤器传递给nodeAffinity字段用于约束调度器将 Pod 放置在这些节点上。

  4. 配置网络加密

    MinIO 租户 CRD 提供以下字段用于配置租户 TLS 网络加密:

    字段

    描述

    tenant.certificate.requestAutoCert

    启用或禁用 MinIO自动 TLS 证书生成

    默认值为true如果省略则启用。

    tenant.certificate.certConfig

    自定义以下行为自动 TLS如果启用。

    tenant.certificate.externalCertSecret

    通过服务器名称指示(SNI)为多个主机名启用TLS

    指定一个或多个类型为 Kubernetes 的 secretkubernetes.io/tls or cert-manager.

    tenant.certificate.externalCACertSecret

    启用对由未知、第三方或内部证书颁发机构(CA)签名的客户端 TLS 证书的验证。

    指定一个或多个类型为 Kubernetes 的 secretkubernetes.io/tls包含给定证书颁发机构的完整CA证书链。

  5. 配置 MinIO 环境变量

    您可以使用环境变量来设置 MinIO Servertenant.configuration字段。

    字段

    描述

    tenant.configuration

    指定一个Kubernetes不透明密钥,其数据载荷config.env包含您想要设置的每个 MinIO 环境变量。

    Theconfig.env数据载荷必须是一个 base64 编码的字符串。 您可以创建一个本地文件,设置环境变量,然后使用cat LOCALFILE | base64创建有效载荷。

    YAML 包含一个对象kind: Secretwithmetadata.name: storage-configuration设置根用户名、密码、擦除编码奇偶校验配置,并启用租户控制台。

    请根据您的租户需求进行相应修改。

  6. 审查命名空间

    YAML 对象kind: Namespace设置租户的默认命名空间为minio-tenant.

    You can change this value to create a different namespace for the Tenant. You must change全部 metadata.namespaceYAML 文件中的值需要与命名空间匹配。

  7. 部署租户

    使用kubectl apply -f部署租户的命令。

    kubectl apply -f tenant-base.yaml
    

    该命令会在配置的命名空间中创建 YAML 对象中指定的每个资源。

    您可以使用以下命令监控进度:

    watch kubectl get all -n minio-tenant
    
  8. 暴露租户 MinIO S3 API 端口

    测试 MinIO Clientmc从本地机器转发 MinIO 端口并创建别名。

    • 转发租户的 MinIO 端口:

    kubectl port-forward svc/MINIO_TENANT_NAME-hl 9000 -n MINIO_TENANT_NAMESPACE
    
    • 为租户服务创建别名:

    mc alias set myminio https://localhost:9000 minio minio123 --insecure
    

    您可以使用mc mb在租户上创建一个存储桶:

    mc mb myminio/mybucket --insecure
    

    如果您使用受信任证书颁发机构(CA)签发的TLS证书部署了MinIO租户,则可以省略--insecureflag.

    连接到租户具体说明。

连接到租户

MinIO Operator 为 MinIO Tenant 创建服务。

使用kubectl get svc -n NAMESPACE命令来查看已部署的服务。 对于使用自定义的 Kubernetes 服务kubectlanalog,你可以替换该程序的名称。

kubectl get svc -n minio-tenant-1
NAME                               TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
minio                              LoadBalancer   10.97.114.60     <pending>     443:30979/TCP    2d3h
TENANT-NAMESPACE-console           LoadBalancer   10.106.103.247   <pending>     9443:32095/TCP   2d3h
TENANT-NAMESPACE-hl                ClusterIP      None             <none>        9000/TCP         2d3h
  • Theminioservice 对应 MinIO Tenant 服务。 应用程序应使用此服务来对 MinIO Tenant 执行操作。

  • The*-console服务对应于MinIO 控制台管理员应使用此服务访问 MinIO 控制台并对 MinIO 租户执行管理操作。

其余服务支持租户操作,不供用户或管理员使用。

默认情况下,每个服务仅在 Kubernetes 集群内可见。 部署在集群内的应用程序可以使用这些服务进行访问CLUSTER-IP.

Kubernetes 集群外部的应用程序可以通过以下方式访问服务:EXTERNAL-IP此值仅针对配置了 Ingress 或类似网络访问服务的 Kubernetes 集群填充。 Kubernetes 提供多种选项用于配置服务的外部访问。

请参阅 Kubernetes 文档中关于发布服务 (ServiceTypes)Ingress有关配置服务外部访问的更完整信息。

对于特定版本的 Kubernetes,例如 OpenShift 或 Rancher,请参考相应服务的文档,了解将服务暴露给内部或外部访问的首选或可用方法。