文档

部署 MinIO 运算符

概述

MinIO 是一个 Kubernetes 原生的高性能对象存储,具有 S3 兼容 API。MinIO Kubernetes 运算符支持将 MinIO 租户部署到私有和公有云基础设施(“混合”云)上。

以下步骤在 Kubernetes 基础设施上安装 MinIO 运算符的最新稳定版本 (6.0.4)。

MinIO 运算符安装一个 自定义资源定义 (CRD) 以支持将 MinIO 租户描述为 Kubernetes 对象。有关 MinIO CRD 的完整文档,请参见 MinIO 运算符 CRD 参考

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

MinIO 运算符组件

MinIO 运算符存在于它自己的命名空间中,它在其中创建 Kubernetes 资源。这些资源包括 pod、服务、副本集和部署。

运算符 pod 默认情况下监视所有命名空间,以查找使用 MinIO CRD 的对象,并自动管理这些资源。

当您使用运算符创建租户时,租户必须有自己的命名空间。在该命名空间内,运算符将生成租户配置所需的 pod。

每个租户 pod 运行三个容器

  • 运行所有标准 MinIO 功能的 MinIO 容器,相当于在裸机上进行基本的 MinIO 安装。该容器在提供的挂载点(持久卷)中存储和检索对象。

  • 仅在 pod 启动期间存在的 InitContainer,用于在启动期间管理配置密钥。启动完成后,此容器将终止。

  • 用于初始化 MinIO 租户的 Sidecar 容器。Sidecar 检索并验证每个租户的配置,并在 pod 中创建必要的本地资源。

    运算符版本更改6.0.0

    Sidecar 拥有独立于 MinIO Operator 的镜像和发布周期。MinIO Operator 将租户的环境变量存储在 Sidecar 中,允许 Operator 更新变量,而无需进行滚动重启。

租户利用持久卷声明 (Persistent Volume Claims) 与存储对象的持久卷 (Persistent Volumes) 通信。

先决条件

Kubernetes 版本 v1.28.9

MinIO 测试了 6.0.4 版本,最低要求 Kubernetes API 为 v1.28.9。MinIO **强烈建议** 使用 积极维护的 Kubernetes API 版本 来维护 Kubernetes 基础设施。

MinIO **强烈建议** 升级使用 生命周期结束的 API 版本 的 Kubernetes 集群。

Kustomize 和 kubectl

Kustomize 是一种基于 YAML 的模板工具,允许您以声明性和可重复的方式定义 Kubernetes 资源。Kustomize 包含在 kubectl 命令行工具中。

此过程假设您的本地主机具有与 Kubernetes 集群匹配的 kubectl 版本,以及创建新资源所需的集群访问权限。

默认的 MinIO Operator Kustomize 模板 为您本地环境的自定义配置提供了起点。您可以修改默认的 Kustomization 文件,或应用您自己的 补丁 来自定义 Operator 部署以适应您的 Kubernetes 集群。

Kubernetes TLS 证书 API

更改于 Operator 版本: v.5.0.0

MinIO Operator 使用 Kubernetes certificates.k8s.io TLS 证书管理 API 管理 TLS 证书签名请求 (CSR),在以下情况下创建签名 TLS 证书:

从 Operator 6.0.0 版本开始,MinIO Operator 会读取 operator-ca-tls 密钥中的证书,以在整个 Kubernetes 集群中信任私有证书颁发机构,例如在使用 cert-manager 时。之前的 Operator 版本会将 operator-ca-tls 证书同步到每个租户。

对于上述任何情况,MinIO Operator 都 *需要* Kubernetes kube-controller-manager 配置包含以下 配置设置

  • --cluster-signing-key-file - 指定用于签署集群范围证书的 PEM 编码 RSA 或 ECDSA 私钥。

  • --cluster-signing-cert-file - 指定用于签发集群范围证书的 PEM 编码 x.509 证书颁发机构证书。

Kubernetes TLS API 使用 CA 签名算法生成新的 TLS 证书。MinIO 建议使用 ECDSA(例如 NIST P-256 曲线)或 EdDSA(例如 Curve25519)TLS 私钥/证书,因为与 RSA 相比,它们的计算需求更低。有关支持的 TLS 密码套件的完整列表,请参见 支持的 TLS 密码套件

如果 Kubernetes 集群未配置为响应生成的 CSR,则 Operator 无法完成初始化。某些 Kubernetes 提供商默认情况下不会指定这些配置值。

要检查 kube-controller-manager 是否指定了集群签名密钥和证书文件,请使用以下命令:

kubectl get pod kube-controller-manager-$CLUSTERNAME-control-plane \
  -n kube-system -o yaml
  • 用 Kubernetes 集群的名称替换 $CLUSTERNAME

确认输出包含突出显示的行。以上示例命令的输出可能与您终端中的输出不同。

 spec:
 containers:
 - command:
     - kube-controller-manager
     - --allocate-node-cidrs=true
     - --authentication-kubeconfig=/etc/kubernetes/controller-manager.conf
     - --authorization-kubeconfig=/etc/kubernetes/controller-manager.conf
     - --bind-address=127.0.0.1
     - --client-ca-file=/etc/kubernetes/pki/ca.crt
     - --cluster-cidr=10.244.0.0/16
     - --cluster-name=my-cluster-name
     - --cluster-signing-cert-file=/etc/kubernetes/pki/ca.crt
     - --cluster-signing-key-file=/etc/kubernetes/pki/ca.key
 ...

重要

MinIO Operator 使用指定的证书颁发机构 (CA) 自动为所有 MinIO 租户 Pod 生成 TLS 证书。Kubernetes 集群外部的客户端必须信任 Kubernetes 集群 CA 才能连接到 MinIO Operator 或 MinIO 租户。

无法信任 Kubernetes 集群 CA 的客户端可以为连接到 MinIO Operator 或 MinIO 租户禁用 TLS 验证。

或者,您可以生成由已知且受信任的 CA 签名的 x.509 TLS 证书,并将这些证书传递给 MinIO 租户。有关更完整的文档,请参见 网络加密 (TLS)

使用 cert-manager 进行证书管理

您可以配置部署以使用 cert-manager,而不是让 MinIO Operator 管理证书。有关使用 cert-manager 部署 MinIO Operator 和租户的说明,请参见 cert-manager 页面

步骤

以下步骤使用 Kustomize 和 MinIO Operator GitHub 存储库中的 kustomization.yaml 文件部署 Operator。要使用 Helm 图表安装 Operator,请参见 使用 Helm 部署 Operator

使用 Kustomize 安装 MinIO Operator

以下过程使用 kubectl -k 从 MinIO Operator GitHub 存储库安装 Operator。 kubectl -kkubectl --kustomize 是执行相同命令的别名。

重要

如果您使用 Kustomize 安装 Operator,则必须使用 Kustomize 管理或升级该安装。请勿使用 kubectl krew、Helm 图表或类似方法来管理或升级使用 Kustomize 部署的 MinIO Operator 安装。

但是,您可以使用 Kustomize 升级之前使用 MinIO Kubernetes 插件安装的 Operator 版本(5.0.14 或更早版本)。

  1. 安装最新版本的 Operator

    以下命令将 Operator 安装到 minio-operator 命名空间

    kubectl apply -k "github.com/minio/operator?ref=v6.0.4"
    

    该命令将输出已安装资源的列表。

  2. 验证 Operator Pod 正在运行

    kubectl get pods -n minio-operator
    

    输出类似于以下内容:

    NAME                              READY   STATUS              RESTARTS   AGE
    minio-operator-6c758b8c45-nkhlx   1/1     Running   0          2m42s
    minio-operator-6c758b8c45-dgd8n   1/1     Running   0          2m42s
    

    在此示例中,minio-operator Pod 是 MinIO Operator,而 console Pod 是 Operator 控制台。

    您可以通过应用 kubectl 补丁来修改 Operator 部署。您可以在 Operator GitHub 存储库 中找到常见配置的示例。

  3. 验证 Operator 安装

    检查指定命名空间 (minio-operator) 的内容,以确保所有 Pod 和服务已成功启动。

    kubectl get all -n minio-operator
    

    响应应类似于以下内容:

    NAME                                  READY   STATUS    RESTARTS   AGE
    pod/minio-operator-6c758b8c45-nkhlx   1/1     Running   0          5m20s
    pod/minio-operator-6c758b8c45-dgd8n   1/1     Running   0          5m20s
    
    NAME               TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                         AGE
    service/operator   ClusterIP   10.43.135.241   <none>        4221/TCP                        5m20s
    service/sts        ClusterIP   10.43.117.251   <none>        4223/TCP                        5m20s
    
    NAME                             READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/minio-operator   2/2     2            2           5m20s
    
    NAME                                        DESIRED   CURRENT   READY   AGE
    replicaset.apps/minio-operator-6c758b8c45   2         2         2       5m20s
    
  4. 后续步骤

    您可以使用 MinIO CRD 和 Kustomize 部署 MinIO 租户。MinIO 还提供了一个 用于部署租户的 Helm 图表

    MinIO 建议使用与安装 Operator 相同的租户部署和管理方法。将 Kustomize 和 Helm 混合用于 Operator 或租户管理可能会增加操作复杂性。