部署MinIO操作员
概述
MinIO 是一个原生于 Kubernetes 的高性能对象存储,具有 S3 兼容的 API。 MinIO Kubernetes Operator 支持将 MinIO 租户部署到私有云和公有云基础设施(“混合”云)上。
以下步骤在 Kubernetes 基础架构上安装 MinIO Operator 的最新稳定版本(7.1.1)。
MinIO Operator 安装一个 Custom Resource Definition (CRD) 支持将 MinIO 租户描述为 Kubernetes object. 查看 MinIO Operator CRD Reference 有关 MinIO CRD 的完整文档.
本文档假设读者已对所引用的 Kubernetes 概念、实用工具和程序有一定的了解。 虽然本文档可能会尽最大努力为配置或部署与 Kubernetes 相关的资源提供指导,但它并不能取代官方 Kubernetes Documentation 。
MinIO运营商组件
MinIO 操作器存在于它自己的命名空间中,并在其中创建 Kubernetes 资源。 这些资源包括 pod、服务、副本集和部署。
操作员 pod 默认会监控使用 MinIO CRD 的对象的所有命名空间,并自动管理这些资源。
当使用 Operator 创建租户时,该租户 必须 拥有自己的命名空间。 在该命名空间内,Operator 会生成所需的租户配置 Pod。
每个租户 pod 运行三个容器:
MinIO 容器运行所有标准 MinIO 功能,相当于在裸金属上进行基本的 MinIO 安装。 此容器将对象存储到提供的挂载点(持久卷)并检索它们。
Init 容器仅在 Pod 启动期间存在,以在启动期间管理配置密钥。 启动完成后,此容器将终止。
用于初始化 MinIO 租户的 Sidecar 容器。 侧卡会检索和验证每个租户的配置,并在 pod 中创建必要的本地资源。
在 Operator 版本发生变更: 6.0.0
Sidecar 有自己的图像和发布周期,与 MinIO 操作器的其他部分分开。 MinIO 操作员会将租户的环境变量存储在侧卡中,这样操作员就可以更新变量,而无需滚动重启。
该租户利用持久卷索赔(Persistent Volume Claims)与存储对象的持久卷(Persistent Volumes)进行通信。
先决条件
Kubernetes 版本 |k8s-floor|
MinIO 针对|k8s-floor|的 Kubernetes API 底层测试|operator-version-stable|。 MinIO 强烈建议 使用以下工具维护 Kubernetes 基础设施 actively maintained Kubernetes API versions.
MinIO 强烈建议 升级使用以下操作系统运行的 Kubernetes 集群 End-Of-Life API versions
Kustomize 和 kubectl
Kustomize 是一个基于 YAML 的模板工具,允许您以声明性和可重复的方式定义 Kubernetes 资源。 Kustomize 包含在 kubectl 命令行工具中。
此过程假定您的本地主机具有与您的 Kubernetes 集群匹配的 kubectl
版本以及创建新资源所需的该集群的访问权限。
default MinIO Operator Kustomize template 为您的本地环境定制配置提供了一个起点。 您可以修改默认的 Kustomization 文件,也可以应用自己的 patches 为您的 Kubernetes 集群定制 Operator 部署。
Kubernetes TLS 证书 API
在 Operator 版本发生变更: v.5.0.0
MinIO Operator 使用 Kubernetes certificates.k8s.io
TLS 证书管理 API 来管理 TLS 证书签名请求 (CSR),并在以下情况下生成已签名的 TLS 证书:
当启用
autoCert
时。For the MinIO Tenant Console when the
MINIO_CONSOLE_TLS_ENABLE
environment variable is set toon
.对于 STS 服务, 当
OPERATOR_STS_ENABLED
环境变量被设置为on
时。用于检索集群状态的健康状况。
从 Operator 6.0.0 开始,MinIO Operator 会读取 operator-ca-tls
秘密中的证书,以信任整个 Kubernetes 集群中的私有证书颁发机构,例如在使用 cert-manager 时。
以前版本的 Operator 会将 operator-ca-tls
证书同步到每个租户。
对于任何这些情况,MinIO Operator都 要求 Kubernetes kube-controller-manager
配置包括以下 配置设置:
--集群签名密钥文件
- 指定用于签署集群范围证书的PEM编码的RSA或ECDSA私钥文件。--集群签名证书文件
- 请提供用于签发集群范围证书的PEM编码x.509证书颁发机构(CA)证书。
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
请将
$CLUSTERNAME
替换为 Kubernetes 集群的名称。
确认输出是否包含突出显示的行。 上面示例命令的输出可能与您的终端输出不同:
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 Tenant pods自动生成TLS证书。 在Kubernetes集群之外的客户端必须信任Kubernetes集群CA才能连接到MinIO Operator或MinIO Tenants。
无法信任Kubernetes集群CA的客户端可以禁用TLS验证以连接到MinIO Operator或MinIO Tenant。
或者,您可以生成由已知且受信任的CA签名的x.509 TLS证书,并将这些证书传递给MinIO Tenants。 有关更完整的文档,请参见 网络加密(TLS)。
使用 cert-manager 进行证书管理
您可以将部署配置为使用 cert-manager ,而不是 MinIO 操作员管理证书。 有关使用 cert-manager 部署 MinIO 操作员和租户的说明,请参阅 cert-manager 页面 。
操作步骤
以下步骤使用 Kustomize 和来自 MinIO Operator GitHub 存储库的 kustomization.yaml
文件部署 Operator。
要使用Helm图表安装Operator,请参见 使用Helm部署操作员。
使用 Kustomize 安装 MinIO Operator
以下步骤使用 kubectl -k``从 MinIO Operator GitHub 存储库安装 Operator。
``kubectl -k
和 kubectl --kustomize
是执行相同命令的别名。
重要
如果您使用 Kustomize 安装 Operator,则必须使用 Kustomize 来管理或升级该安装。
请勿使用 kubectl krew
、Helm 图表或类似方法来管理或升级使用 Kustomize 部署的 MinIO Operator 安装。
但是,您可以使用 Kustomize 升级使用 MinIO Kubernetes 插件安装的 Operator 的先前版本(5.0.14 或更早版本) 。
安装最新版本的 Operator
以下命令将 Operator 安装到
minio-operator
命名空间:kubectl apply -k "github.com/minio/operator?ref=v7.1.1"
该命令输出已安装资源的列表。
验证 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 Console。您可以通过应用 kubectl 补丁来修改 Operator 部署。 您可以在 Operator GitHub 存储库 中找到常见配置的示例。
验证 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
下一步
您可以使用:ref:MinIO CRD and Kustomize. <minio-k8s-deploy-minio-tenant> MinIO 还提供了 Helm chart for deploying Tenants.
MinIO 建议使用与安装 Operator 相同的租户部署和管理方法。 混合使用 Kustomize 和 Helm 进行操作员或租户管理可能会增加操作复杂性。