您可以通过 OpenShift 4.7+ 使用 MinIO Kubernetes Operator 来部署和管理 MinIO 租户。本文档记录了使用 OpenShift 网页控制台部署 MinIO 租户的流程。
这个过程需要将 MinIO Operator 安装到 OpenShift Operator Hub 中。请参阅在 RedHat OpenShift 上部署 MinIO Operator如需更完整的说明。
本文档假设读者熟悉所有引用的 Kubernetes 和 OpenShift 概念、工具及操作流程。虽然本文档可能尽最大努力提供配置或部署 Kubernetes 相关或 OpenShift 相关资源的指导,但不能替代官方文档Kubernetes Documentation和OpenShift Container Platform 4.7+ 文档.
MinIO 支持在每个命名空间中最多部署一个 MinIO 租户。 创建命名空间之前创建租户。
MinIO Operator 使用以下默认配置部署 Pod:Security Context每个 Pod:
securityContext:
runAsUser: 1000
runAsGroup: 1000
runAsNonRoot: true
fsGroup: 1000
某些 OpenShiftSecurity Context Constraints限制 Pod 允许的 UID 或 GID,使得 MinIO 无法成功部署租户。 确保 Operator 部署租户的项目具有足够的 SCC 设置,允许使用默认的 Pod 安全上下文。 以下命令返回 securityContext 的最佳值:
oc get namespace <namespace> \
-o=jsonpath='{.metadata.annotations.openshift\.io/sa\.scc\.supplemental-groups}{"\n"}'
该命令返回类似于以下内容的输出:
1056560000/10000
在此过程中,请记下斜杠前的这个值。
创建一个包含两个数据键的不透明密钥,其中所有值都是
base64编码的。MinIO Operator使用此密钥来设置root用户
权限。该密钥的名称必须与指定的值匹配spec.credsSecret.nameTenant 对象规范中的键。
|
根用户的访问密钥。 |
|---|---|
|
root 用户的密钥。 |
两个数据键的值都应该是长、安全且唯一的字符串。以下示例 YAML 描述了一个满足所述要求的密钥。名称minio-creds-secret假设租户 YAML 具有spec.credsSecret.name设置为匹配的值。考虑使用租户名称作为密钥名称的前缀,以确保每个租户都有自己的密钥(例如minio-tenant-1应将其 MinIO secret 命名为minio-tenant-1-creds-secret).
apiVersion: v1
kind: Secret
metadata:
name: minio-creds-secret
type: Opaque
data:
accesskey: bWluaW8=
secretkey: bWluaW8xMjM=
创建一个包含四个数据键的不透明密钥,所有值都经过 base64 编码。MinIO Operator 使用此密钥来配置 MinIO Console 对 MinIO 租户的访问。该密钥的名称必须与 Tenant 对象规范中 console.consoleSecret.name 键指定的值匹配。
|
MinIO 控制台用于编码生成的身份验证令牌的密码短语。 |
|---|---|
|
MinIO Console 用于编码生成的身份验证令牌的盐值。 |
|
MinIO Console 管理员用户的访问密钥 |
|
MinIO Console 管理员用户的对应密钥 |
所有数据键的值应该是一个长、安全且唯一的字符串。
以下示例 YAML 描述了一个满足所述要求的密钥。名称minio-console-secret假设租户 YAML 具有console.consoleSecret.name设置为匹配的值。考虑使用租户名称作为密钥名称的前缀,以确保每个租户都有自己的密钥
(例如minio-tenant-1应将其 MinIO Console 密钥命名为minio-tenant-1-console-secret)
apiVersion: v1
kind: Secret
metadata:
name: console-secret
type: Opaque
data:
CONSOLE_PBKDF_PASSPHRASE: U0VDUkVU
CONSOLE_PBKDF_SALT: U0VDUkVU
CONSOLE_ACCESS_KEY: WU9VUkNPTlNPTEVBQ0NFU1M=
CONSOLE_SECRET_KEY: WU9VUkNPTlNPTEVTRUNSRVQ=
MinIO 会自动生成一个Persistent Volume Claim (PVC)对于每个卷 在 MinIO 租户中使用用户指定的StorageClass.
该集群必须具有相同数量的Persistent Volumes (PV)到租户中的卷数量。MinIO强烈建议使用本地附加存储来最大化性能和吞吐量。
存储类必须具有volumeBindingMode设置为WaitForFirstConsumer.
如果集群已有本地存储,可以跳过此步骤PV资源和 aStorageClass配置供 MinIO 租户使用。
以下 YAML 示例描述了满足所述要求的本地持久卷:
apiVersion: v1
kind: PersistentVolume
metadata:
name: <PV-NAME>
spec:
capacity:
storage: 1Ti
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storage-class: local-storage
local:
path: </PATH/TO/DISK>
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- <NODE-NAME>
替换尖括号包围的值<VALUE>使用每个节点本地附加磁盘的适当值。为租户所需的每个卷创建一个具有必要容量的 PV。例如,使用 16 个磁盘的 MinIO 租户需要 16 个持久卷。
以下示例 YAML 描述了一个满足所述要求的存储类。该存储类的名称必须与 MinIO 租户使用的每个持久卷所应用的存储类相匹配。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
TheStorageClass 必须有volumeBindingMode设置为WaitForFirstConsumer确保每个 Pod 的正确绑定Persistent Volume Claims (PVC)到
Node 的本地PV.
您可以从 MinIO Operator 界面找到运算符左侧导航栏标题。
前往运算符, 那么已安装的 Operator.
对于项目下拉菜单,选择openshift-operators.
选择MinIO Operators从已安装的运算符列表中。
点击创建租户开始租户创建流程。
The表单视图提供用于配置新 MinIO 租户的用户界面。
确保Tenant Secret -> 名称设置为先决条件中创建的 MinIO Root User Kubernetes Secret 的名称。
确保Console -> Console Secret -> Name设置为作为先决条件创建的 MinIO Console Kubernetes Secret 的名称。
You can also use the YAML view to perform more granular configuration of the MinIO Tenant. Refer to theMinIO Custom Resource Definition 文档有关设置特定字段的指导,请参阅相关文档。MinIO 还发布了示例,为创建自定义租户 YAML 对象提供额外指导。请注意,OperatorHub YAML 视图仅支持创建 MinIO 租户对象。请勿在 YAML 输入中指定任何其他对象。
对一个视图的更改会反映在另一个视图中。例如,您可以在YAML 视图并查看这些更改表单视图.
安全上下文配置
如果您的 OpenShift 集群安全上下文配置限制了
支持的 Pod 安全上下文,请打开 YAML 视图并定位到spec.pools[n].securityContext和spec.console.securityContextobjects. 修改securityContext设置以使用基于 OpenShift 集群 SCC 的受支持 UID。
点击创建使用指定的配置创建 MinIO 租户。使用作为 MinIO Root User 密钥一部分指定的凭据来访问 MinIO 服务器。
对于Kubernetes集群内部的应用,您可以直接连接到由Operator创建的MinIO服务。使用oc get svc --namespace NAMESPACE检索租户的服务。
对于Kubernetes集群外部的应用程序,您必须配置Ingress或者一个负载均衡器以暴露 MinIO 租户服务。或者,您可以使用oc port-forward将本地主机的流量临时转发到 MinIO 租户的命令
Theminio该服务提供对 MinIO 对象存储操作的访问。
The*-consoleservice 提供对 MinIO Console 的访问。MinIO Console 支持 MinIO Tenant 的图形界面管理。