部署一个 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它提供了一个基准,您可以根据自己的需求修改和定制租户环境。
创建一个租户的 YAML 对象
使用
kubectl kustomize生成包含部署所需的所有 Kubernetes 资源的 YAML 文件的命令base租户:kubectl kustomize https://github.com/minio/operator/examples/kustomization/base/ > tenant-base.yaml
该命令创建一个单一的 YAML 文件,其中包含多个由分隔符隔开的对象
---行。 在您喜欢的编辑器中打开文件。以下步骤基于每个对象的
kind和metadata.name字段:配置租户拓扑
The
kind: 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请求的存储量。
配置租户亲和性或反亲和性
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 放置在这些节点上。配置网络加密
MinIO 租户 CRD 提供以下字段用于配置租户 TLS 网络加密:
字段
描述
tenant.certificate.requestAutoCert启用或禁用 MinIO自动 TLS 证书生成
默认值为
true如果省略则启用。tenant.certificate.certConfig自定义以下行为自动 TLS如果启用。
tenant.certificate.externalCertSecret通过服务器名称指示(SNI)为多个主机名启用TLS
指定一个或多个类型为 Kubernetes 的 secret
kubernetes.io/tlsorcert-manager.tenant.certificate.externalCACertSecret启用对由未知、第三方或内部证书颁发机构(CA)签名的客户端 TLS 证书的验证。
指定一个或多个类型为 Kubernetes 的 secret
kubernetes.io/tls包含给定证书颁发机构的完整CA证书链。配置 MinIO 环境变量
您可以使用环境变量来设置 MinIO Server
tenant.configuration字段。字段
描述
tenant.configuration指定一个Kubernetes不透明密钥,其数据载荷
config.env包含您想要设置的每个 MinIO 环境变量。The
config.env数据载荷必须是一个 base64 编码的字符串。 您可以创建一个本地文件,设置环境变量,然后使用cat LOCALFILE | base64创建有效载荷。YAML 包含一个对象
kind: Secretwithmetadata.name: storage-configuration设置根用户名、密码、擦除编码奇偶校验配置,并启用租户控制台。请根据您的租户需求进行相应修改。
审查命名空间
YAML 对象
kind: Namespace设置租户的默认命名空间为minio-tenant.You can change this value to create a different namespace for the Tenant. You must change全部
metadata.namespaceYAML 文件中的值需要与命名空间匹配。部署租户
使用
kubectl apply -f部署租户的命令。kubectl apply -f tenant-base.yaml
该命令会在配置的命名空间中创建 YAML 对象中指定的每个资源。
您可以使用以下命令监控进度:
watch kubectl get all -n minio-tenant
暴露租户 MinIO S3 API 端口
测试 MinIO Client
mc从本地机器转发 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
The
minioservice 对应 MinIO Tenant 服务。 应用程序应使用此服务来对 MinIO Tenant 执行操作。The
*-console服务对应于MinIO 控制台管理员应使用此服务访问 MinIO 控制台并对 MinIO 租户执行管理操作。
其余服务支持租户操作,不供用户或管理员使用。
默认情况下,每个服务仅在 Kubernetes 集群内可见。
部署在集群内的应用程序可以使用这些服务进行访问CLUSTER-IP.
Kubernetes 集群外部的应用程序可以通过以下方式访问服务:EXTERNAL-IP此值仅针对配置了 Ingress 或类似网络访问服务的 Kubernetes 集群填充。
Kubernetes 提供多种选项用于配置服务的外部访问。
请参阅 Kubernetes 文档中关于发布服务 (ServiceTypes)和Ingress有关配置服务外部访问的更完整信息。
对于特定版本的 Kubernetes,例如 OpenShift 或 Rancher,请参考相应服务的文档,了解将服务暴露给内部或外部访问的首选或可用方法。