文档

部署 MinIO 租户

此过程记录了使用 Kustomize 或 MinIO 的 Helm Chart 将 MinIO 租户部署到标准 Kubernetes 集群上的过程。

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

本文档假定您熟悉所有引用的 Kubernetes 概念、实用程序和过程。虽然本文档可能提供有关配置或部署 Kubernetes 相关资源的指导,但它不能替代官方的Kubernetes 文档

先决条件

MinIO Kubernetes 运算符

此页面上的过程需要有效的 MinIO Kubernetes 运算符安装,并假定本地主机具有匹配的 MinIO Kubernetes 运算符安装。此过程假定使用最新的稳定运算符,版本 6.0.4。

有关部署 MinIO 运算符的完整文档,请参阅部署 MinIO 运算符

具有 EBS 优化的 EC2 节点的 EKS 集群

此过程假定存在一个具有至少四个 EC2 节点的现有EKS集群。EC2 节点应具有匹配的机器类型和配置,以确保 MinIO 的性能可预测。

MinIO 提供了硬件指南,用于选择合适的 EC2 实例类别和大小。MinIO 强烈建议选择具有至少 25Gbps 网络带宽的 EBS 优化实例作为性能基线。

有关可用 EC2 和 EBS 资源的更完整信息,请参阅EC2 实例类型EBS 卷类型MinIO SUBNET 客户应在架构规划阶段联系 MinIO 工程师,以获取有关为目标工作负载和性能目标选择最佳实例和卷类型的帮助。

持久卷

对驱动器的独占访问

MinIO**需要**对为对象存储提供的驱动器或卷进行独占访问。任何其他进程、软件、脚本或人员都不应对提供给 MinIO 的驱动器或卷或 MinIO 在其上放置的对象或文件执行任何操作。

除非 MinIO 工程师指示,否则请勿使用脚本或工具直接修改、删除或移动提供驱动器上的任何数据分片、奇偶校验分片或元数据文件,包括从一个驱动器或节点移动到另一个驱动器或节点。此类操作很可能导致广泛的损坏和数据丢失,超出 MinIO 的修复能力。

EKS 上的 MinIO 租户必须使用EBS CSI 驱动程序来配置必要的底层持久卷。MinIO 强烈建议使用 SSD 支持的 EBS 卷以获得最佳性能。MinIO 强烈建议使用 XFS 文件系统部署基于 EBS 的 PV。为 MinIO EBS PV 创建一个 StorageClass,并将csi.storage.k8s.io/fstype 参数设置为xfs。有关 EBS 资源的更多信息,请参阅EBS 卷类型。有关 StorageClass 参数的更多信息,请参阅StorageClass 参数

使用 Kustomize 部署 MinIO 租户

以下步骤使用kubectl -k基于MinIO Operator Github仓库中的MinIO Operator Github 仓库base Kustomization模板部署一个MinIO租户。

您可以从仓库中选择其他基础模板或预构建模板作为起点,或者使用MinIO自定义资源文档构建您自己的Kustomization资源。

重要

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

此过程并非涵盖租户CRD中所有可能的配置选项。它提供了一个基线,您可以根据需要修改和调整租户。

  1. 创建租户的YAML对象

    使用kubectl kustomize命令生成一个YAML文件,其中包含部署base租户所需的所有Kubernetes资源。

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

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

    以下步骤根据每个对象的kindmetadata.name字段进行引用。

  2. 配置租户拓扑

    kind: Tenant对象描述了MinIO租户。

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

    字段

    描述

    servers

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

    volumesPerServer

    要附加到每个MinIO Pod(servers)的持久卷数量。Operator会为租户生成volumesPerServer x servers个持久卷声明。

    volumeClaimTemplate.spec.storageClassName

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

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

    volumeClaimTemplate.spec.resources.requests.storage

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

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

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

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

    • 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.io/tlscert-manager的Kubernetes密钥。

    tenant.certificate.externalCACertSecret

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

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

  5. 配置MinIO环境变量

    您可以使用tenant.configuration字段设置MinIO服务器环境变量。

    字段

    描述

    tenant.configuration

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

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

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

    根据需要修改它以反映您的租户需求。

  6. 查看命名空间

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

    您可以更改此值以创建租户的不同命名空间。您必须将YAML文件中**所有**metadata.namespace值更改为与命名空间匹配。

  7. 部署租户

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

    kubectl apply -f tenant-base.yaml
    

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

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

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

    要从本地计算机测试MinIO客户端mc,请转发MinIO端口并创建一个别名。

    • 转发租户的MinIO端口

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

    mc alias set myminio http://127.0.0.1:9000 minio minio123 --insecure
    

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

    mc mb myminio/mybucket --insecure
    

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

    有关具体说明,请参阅连接到租户

连接到租户

MinIO Operator为MinIO租户创建服务。

使用kubectl get svc -n NAMESPACE命令查看已部署的服务。

kubectl get svc -n TENANT-NAMESPACE
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
  • minio服务对应于MinIO租户服务。应用程序应使用此服务对MinIO租户执行操作。

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

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

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

Kubernetes集群外部的应用程序可以使用EXTERNAL-IP访问这些服务。此值仅在为Ingress或类似网络访问服务配置的Kubernetes集群中填充。Kubernetes提供了多种配置外部访问服务的选项。

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