文件

部署 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中提供的所有可能配置選項。它提供了一個基準,您可以從該基準修改租戶並使其符合您的需求。

  1. 為租戶建立 YAML 物件

    使用 kubectl kustomize 指令產生一個 YAML 檔案,其中包含部署 base 租戶所需的所有 Kubernetes 資源

    kubectl kustomize https://github.com/minio/operator/examples/kustomization/base/ > tenant-base.yaml
    

    此指令會建立一個單一 YAML 檔案,其中包含多個以 --- 行分隔的物件。請在您慣用的編輯器中開啟該檔案。

    以下步驟會根據每個物件的 kindmetadata.name 欄位來參考它們

  2. 設定租戶拓撲

    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 請求的儲存量。

  3. 設定租戶親和性或反親和性

    MinIO Operator 支援以下 Kubernetes 親和性和反親和性配置

    • 節點親和性 (spec.pools[n].nodeAffinity)

    • Pod 親和性 (spec.pools[n].podAffinity)

    • Pod 反親和性 (spec.pools[n].podAntiAffinity)

    MinIO 建議使用 Pod 反親和性來設定租戶,以確保 Kubernetes 排程器不會在同一個工作節點上排程多個 Pod。

    如果您有要部署租戶的特定工作節點,請將這些節點標籤或篩選器傳遞給 nodeAffinity 欄位,以限制排程器將 Pod 放置在這些節點上。

  4. 設定網路加密

    MinIO 租戶 CRD 提供以下欄位,您可以從中設定租戶 TLS 網路加密

    欄位

    描述

    tenant.certificate.requestAutoCert

    啟用或停用 MinIO 自動 TLS 憑證產生

    如果省略,則預設為 true 或已啟用。

    tenant.certificate.certConfig

    自訂 自動 TLS 的行為 (如果已啟用)。

    tenant.certificate.externalCertSecret

    透過伺服器名稱指示 (Server Name Indication, SNI) 為多個主機名稱啟用 TLS

    指定一個或多個 kubernetes.io/tlscert-manager 類型的 Kubernetes 密碼。

    tenant.certificate.externalCACertSecret

    啟用驗證由未知、協力廠商或內部憑證授權單位 (CA) 簽署的用戶端 TLS 憑證。

    指定一個或多個 kubernetes.io/tls 類型的 Kubernetes 密碼,其中包含給定授權的完整 CA 憑證鏈。

  5. 設定 MinIO 環境變數

    您可以使用 tenant.configuration 欄位設定 MinIO 伺服器環境變數。

    欄位

    描述

    tenant.configuration

    指定 Kubernetes 不透明密碼,其資料酬載 config.env 包含您想要設定的每個 MinIO 環境變數。

    config.env 資料酬載必須是 base64 編碼字串。您可以建立本機檔案、設定環境變數,然後使用 cat LOCALFILE | base64 來建立酬載。

    YAML 包含 kind: Secret 物件,其中 metadata.name: storage-configuration 設定根使用者名稱、密碼、消除同位設定,並啟用租戶主控台。

    請根據您的租戶需求修改此物件。

  6. 檢閱命名空間

    kind: Namespace YAML 物件將租戶的預設命名空間設定為 minio-tenant

    您可以變更此值,為租戶建立不同的命名空間。您必須變更 YAML 檔案中所有 metadata.namespace 值,使其與命名空間相符。

  7. 部署租戶

    使用 kubectl apply -f 指令來部署租戶。

    kubectl apply -f tenant-base.yaml
    

    此指令會在設定的命名空間中建立 YAML 物件中指定的每個資源。

    您可以使用以下指令監控進度

    watch kubectl get all -n minio-tenant
    
  8. 公開租戶 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 介面。

  1. 前往 運算子,然後選擇 已安裝的運算子

  2. 專案 下拉選單中,選擇 openshift-operators

  3. 從已安裝的運算子清單中選擇 MinIO Operators

點擊 建立租戶 以開始租戶建立程序。

2) 建立租戶

表單檢視 提供了一個使用者介面,用於設定新的 MinIO 租戶。

OpenShift Tenant Creation UI View
  • 請確保 租戶密碼 -> 名稱 設定為作為先決條件一部分所建立的 MinIO Root User Kubernetes 密碼的名稱。

  • 請確保 主控台 -> 主控台密碼 -> 名稱 設定為作為先決條件一部分所建立的 MinIO 主控台 Kubernetes 密碼的名稱。

您也可以使用 YAML 檢視來對 MinIO 租戶執行更細緻的設定。請參考 MinIO 自訂資源定義文件,以取得關於設定特定欄位的指引。MinIO 也發布了一些範例,以提供關於建立自訂租戶 YAML 物件的額外指引。請注意,OperatorHub YAML 檢視僅支援建立 MinIO 租戶物件。請勿在 YAML 輸入中指定任何其他物件。

OpenShift Tenant Creation UI View

對一個檢視所做的變更會反映在另一個檢視中。例如,您可以在 YAML 檢視 中進行修改,並在 表單檢視 中看到這些變更。

安全性上下文設定

如果您的 OpenShift 叢集安全性上下文設定限制了支援的 Pod 安全性上下文,請開啟 YAML 檢視並找到 spec.pools[n].securityContextspec.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 的說明,以獲取更完整的關於配置外部服務存取資訊。