部署 MinIO 租戶
本程序說明如何使用 OpenShift Web 主控台和 MinIO Kubernetes Operator,透過 OpenShift 4.7+ 部署 MinIO 租戶。
部署單節點拓撲需要本文件中未涵蓋的其他組態。或者,您可以根據需要使用簡單的 Kubernetes YAML 物件來描述用於本機測試和評估的單節點拓撲。MinIO 不建議也不支援用於生產環境的單節點部署拓撲。
本文件假設您熟悉所有參考的 Kubernetes 概念、實用程式和程序。雖然本文件 *可能* 會在盡力而為的基礎上提供設定或部署與 Kubernetes 相關資源的指南,但它並不能取代官方的 Kubernetes 文件。
先決條件
MinIO Kubernetes Operator
此頁面的程序*需要*有效安裝 MinIO Kubernetes Operator,並假設本機主機具有 MinIO Kubernetes Operator 的相符安裝。本程序假設使用最新的穩定 Operator,版本 6.0.4。
如需部署 MinIO Operator 的完整文件,請參閱 部署 MinIO Operator。
OpenShift 4.7+ 和 oc
CLI 工具
本程序假設使用 OpenShift 4.7+ 和 OpenShift OperatorHub 安裝 MinIO Operator。
本程序假設您的本機電腦已安裝 OpenShift oc
CLI 工具,並已設定可存取 OpenShift 叢集。 下載並安裝 OpenShift CLI oc
以便在本程序中使用。
如需更完整的說明,請參閱 在 RedHat OpenShift 上部署 MinIO Operator。
檢查安全性內容限制
MinIO Operator 會使用以下每個 Pod 的預設 安全性內容 來部署 Pod
securityContext:
runAsUser: 1000
runAsGroup: 1000
runAsNonRoot: true
fsGroup: 1000
某些 OpenShift 安全內容限制 (Security Context Constraints, SCC) 會限制 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
請記下斜線前的這個值,以便在本程序中使用。
持久性磁碟區
磁碟機的獨佔存取權
MinIO 需要對物件儲存提供的磁碟機或磁碟區具有獨佔存取權。其他任何程序、軟體、指令碼或人員都不應直接對提供給 MinIO 的磁碟機或磁碟區,或 MinIO 置於其上的物件或檔案執行任何動作。
除非 MinIO 工程團隊指示,否則請勿使用指令碼或工具直接修改、刪除或移動所提供磁碟機上的任何資料分片、同位分片或中繼資料檔案,包括從一個磁碟機或節點移動到另一個磁碟機或節點。此類操作很可能導致廣泛的損毀和資料遺失,超出 MinIO 的修復能力。
MinIO 可以使用任何支援 持久性磁碟區 (Persistent Volume, PV) 的 Kubernetes,該 PV 支援 ReadWriteOnce 存取模式。MinIO 的一致性保證需要 ReadWriteOnce
所提供的獨佔儲存存取權。持久性磁碟區必須在部署租戶之前存在。
此外,MinIO 建議為 PVC 儲存類別 (StorageClass) 設定 Retain
的回收原則。如果可能,請將儲存類別、CSI 或 PV 底層的其他供應器設定為將磁碟區格式化為 XFS,以確保最佳效能。
對於節點具有直接連接儲存的 Kubernetes 叢集,MinIO 強烈建議使用 DirectPV CSI 驅動程式。DirectPV 提供分散式持久性磁碟區管理員,可以探索、格式化、掛載、排程和監控 Kubernetes 節點上的磁碟機。DirectPV 解決了手動佈建和監控 本機持久性磁碟區的限制。
使用 Kustomize 部署 MinIO 租戶
以下程序使用 kubectl -k
,使用 MinIO Operator Github 儲存庫中的 base
Kustomization 範本來部署 MinIO 租戶。
您可以從儲存庫中選取不同的 base 或預先建置的範本作為起點,或使用 MinIO 自訂資源文件來建置自己的 Kustomization 資源。
重要
如果您使用 Kustomize 部署 MinIO 租戶,則必須使用 Kustomize 來管理或升級該部署。請勿使用 kubectl krew
、Helm Chart 或類似方法來管理或升級 MinIO 租戶。
此程序並未詳盡說明 租戶 CRD中提供的所有可能配置選項。它提供了一個基準,您可以從該基準修改租戶並使其符合您的需求。
為租戶建立 YAML 物件
使用
kubectl kustomize
指令產生一個 YAML 檔案,其中包含部署base
租戶所需的所有 Kubernetes 資源kubectl kustomize https://github.com/minio/operator/examples/kustomization/base/ > tenant-base.yaml
此指令會建立一個單一 YAML 檔案,其中包含多個以
---
行分隔的物件。請在您慣用的編輯器中開啟該檔案。以下步驟會根據每個物件的
kind
和metadata.name
欄位來參考它們設定租戶拓撲
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 請求的儲存量。
設定租戶親和性或反親和性
MinIO Operator 支援以下 Kubernetes 親和性和反親和性配置
節點親和性 (
spec.pools[n].nodeAffinity
)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
透過伺服器名稱指示 (Server Name Indication, SNI) 為多個主機名稱啟用 TLS
指定一個或多個
kubernetes.io/tls
或cert-manager
類型的 Kubernetes 密碼。tenant.certificate.externalCACertSecret
啟用驗證由未知、協力廠商或內部憑證授權單位 (CA) 簽署的用戶端 TLS 憑證。
指定一個或多個
kubernetes.io/tls
類型的 Kubernetes 密碼,其中包含給定授權的完整 CA 憑證鏈。設定 MinIO 環境變數
您可以使用
tenant.configuration
欄位設定 MinIO 伺服器環境變數。欄位
描述
tenant.configuration
指定 Kubernetes 不透明密碼,其資料酬載
config.env
包含您想要設定的每個 MinIO 環境變數。config.env
資料酬載必須是 base64 編碼字串。您可以建立本機檔案、設定環境變數,然後使用cat LOCALFILE | base64
來建立酬載。YAML 包含
kind: Secret
物件,其中metadata.name: storage-configuration
設定根使用者名稱、密碼、消除同位設定,並啟用租戶主控台。請根據您的租戶需求修改此物件。
檢閱命名空間
kind: Namespace
YAML 物件將租戶的預設命名空間設定為minio-tenant
。您可以變更此值,為租戶建立不同的命名空間。您必須變更 YAML 檔案中所有
metadata.namespace
值,使其與命名空間相符。部署租戶
使用
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://127.0.0.1:9000 minio minio123 --insecure
您可以使用
mc mb
在租戶上建立儲存貯體mc mb myminio/mybucket --insecure
如果您使用受信任的憑證授權單位 (CA) 所發行的 TLS 憑證來部署 MinIO 租戶,則可以省略
--insecure
旗標。請參閱連線至租戶以取得特定指示。
連線至租戶
MinIO Operator 會為 MinIO 租戶建立服務。
使用 oc get svc -n TENANT-PROJECT
指令來檢閱已部署的服務
oc 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 提供多種選項來設定對服務的外部存取。
請參閱 OpenShift 文件中關於路由或 Ingress 的說明,以獲取更完整的關於配置外部服務存取資訊。
使用 OpenShift Web 主控台部署租戶
1) 存取 MinIO Operator 介面
您可以從左側導覽標題的 運算子 中找到 MinIO Operator 介面。
前往 運算子,然後選擇 已安裝的運算子。
在 專案 下拉選單中,選擇 openshift-operators。
從已安裝的運算子清單中選擇 MinIO Operators。
點擊 建立租戶 以開始租戶建立程序。
2) 建立租戶
表單檢視 提供了一個使用者介面,用於設定新的 MinIO 租戶。

請確保 租戶密碼 -> 名稱 設定為作為先決條件一部分所建立的 MinIO Root User Kubernetes 密碼的名稱。
請確保 主控台 -> 主控台密碼 -> 名稱 設定為作為先決條件一部分所建立的 MinIO 主控台 Kubernetes 密碼的名稱。
您也可以使用 YAML 檢視來對 MinIO 租戶執行更細緻的設定。請參考 MinIO 自訂資源定義文件,以取得關於設定特定欄位的指引。MinIO 也發布了一些範例,以提供關於建立自訂租戶 YAML 物件的額外指引。請注意,OperatorHub YAML 檢視僅支援建立 MinIO 租戶物件。請勿在 YAML 輸入中指定任何其他物件。

對一個檢視所做的變更會反映在另一個檢視中。例如,您可以在 YAML 檢視 中進行修改,並在 表單檢視 中看到這些變更。
安全性上下文設定
如果您的 OpenShift 叢集安全性上下文設定限制了支援的 Pod 安全性上下文,請開啟 YAML 檢視並找到 spec.pools[n].securityContext
和 spec.console.securityContext
物件。修改 securityContext
設定,以使用基於您的 OpenShift 叢集 SCC 的支援 UID。
點擊 建立,以使用指定的設定建立 MinIO 租戶。使用在 MinIO Root User 密碼中指定的憑證來存取 MinIO 伺服器。
3) 連線至租戶
MinIO Operator 會為 MinIO 租戶建立服務。請使用 oc get svc -n NAMESPACE
命令來檢視已部署的服務。
oc 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
minio-tenant-1-console LoadBalancer 10.106.103.247 <pending> 9443:32095/TCP 2d3h
minio-tenant-1-hl ClusterIP None <none> 9000/TCP 2d3h
minio-tenant-1-log-hl-svc ClusterIP None <none> 5432/TCP 2d3h
minio-tenant-1-log-search-api ClusterIP 10.103.5.235 <none> 8080/TCP 2d3h
minio-tenant-1-prometheus-hl-svc ClusterIP None <none> 9090/TCP 7h39m
minio
服務對應於 MinIO 租戶服務。應用程式應使用此服務對 MinIO 租戶執行作業。*-console
服務對應於 MinIO 主控台。管理員應使用此服務來存取 MinIO 主控台,並對 MinIO 租戶執行管理作業。
其餘服務支援租戶作業,不供使用者或管理員使用。
預設情況下,每個服務僅在 Kubernetes 叢集內可見。叢集內部署的應用程式可以使用 CLUSTER-IP
來存取服務。
Kubernetes 叢集外部的應用程式可以使用 EXTERNAL-IP
來存取服務。此值僅在為 Ingress 或類似網路存取服務設定的 Kubernetes 叢集中才會填入。Kubernetes 提供了多種選項,用於設定外部服務存取。請參閱 Kubernetes 文件中關於發佈服務 (ServiceTypes) 和 Ingress 的說明,以獲取更完整的關於配置外部服務存取資訊。