文件

部署 MinIO 租戶

此程序記錄使用 Kustomize 或 MinIO 的 Helm Charts 在標準 Kubernetes 叢集上部署 MinIO 租戶。

部署單節點拓撲需要本文件中未涵蓋的額外配置。您也可以使用簡單的 Kubernetes YAML 物件來描述單節點拓撲,以便在必要時進行本機測試和評估。MinIO 不建議也不支援用於生產環境的單節點部署拓撲。

本文件假設您熟悉所有參考的 Kubernetes 概念、公用程式和程序。雖然本文件可能在盡力而為的基礎上提供有關配置或部署 Kubernetes 相關資源的指導,但它不能替代官方的 Kubernetes 文件

先決條件

MinIO Kubernetes Operator

此頁面上的程序需要有效安裝 MinIO Kubernetes Operator,並假設本機主機具有相符的 MinIO Kubernetes Operator 安裝。此程序假設最新的穩定 Operator 版本為 6.0.4。

有關部署 MinIO Operator 的完整文件,請參閱 部署 MinIO Operator

具有 Compute Engine 節點的 GKE 叢集

此程序假設現有的 GKE 叢集安裝了 MinIO Operator,且至少有四個 Compute Engine 節點。Compute Engine 節點應具有相符的機器類型和配置,以確保 MinIO 的可預測效能。

MinIO 提供了 硬體指南,用於選擇適當的 Compute Engine 執行個體類別和大小。MinIO 強烈建議選擇支援本機 SSD 且至少具有 25Gbps 出口頻寬的執行個體,作為效能的基準。

有關可用的 Compute Engine 和持久儲存資源的更完整資訊,請參閱 機器系列資源和比較指南 以及 持久磁碟

持久卷

獨佔存取磁碟機

MinIO 需要對為物件儲存提供的磁碟機或卷進行獨佔存取。其他程序、軟體、指令碼或人員都不應直接對提供給 MinIO 的磁碟機或卷,或 MinIO 放置在其中的物件或檔案執行任何動作。

除非 MinIO 工程部門指示,否則請勿使用指令碼或工具直接修改、刪除或移動所提供磁碟機上的任何資料分片、同位分片或中繼資料檔案,包括從一個磁碟機或節點移動到另一個磁碟機或節點。此類操作很可能導致廣泛的損毀和資料遺失,超出 MinIO 的修復能力。

MinIO 可以使用任何支援 持久卷 (PV) 的 Kubernetes,該持久卷支援 ReadWriteOnce 存取模式。MinIO 的一致性保證需要 ReadWriteOnce 提供的獨佔儲存存取。持久卷必須在部署租戶之前存在。

此外,MinIO 建議為 PVC StorageClass 設定回收策略為 Retain。在可行的情況下,配置儲存類別 (Storage Class)、CSI 或 PV 底層的其他佈建器,將磁碟區格式化為 XFS,以確保最佳效能。

對於節點具有直接附加儲存的 Kubernetes 叢集,MinIO 強烈建議使用 DirectPV CSI 驅動程式。DirectPV 提供一個分散式持久性磁碟區管理器,可以發現、格式化、掛載、排程和監控 Kubernetes 節點上的磁碟機。DirectPV 解決了手動佈建和監控 本機持久性磁碟區 的限制。

GKE 上的 MinIO 租戶應使用 Compute Engine 永久磁碟 CSI 驅動程式來佈建必要的底層持久性磁碟區。MinIO 強烈建議使用 SSD 支援的磁碟類型以獲得最佳效能。有關 GKE 磁碟類型的更多資訊,請參閱 永久磁碟

使用 Kustomize 部署 MinIO 租戶

以下步驟使用 kubectl -k,通過 MinIO Operator Github 儲存庫中的 base Kustomization 範本來部署 MinIO 租戶。

您可以從 儲存庫 中選擇不同的基礎或預建範本作為起點,或者使用 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

    通過伺服器名稱指示 (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 用戶端 (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 租戶建立服務。

使用 kubectl get svc -n NAMESPACE 命令來檢閱已部署的服務

kubectl 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 提供多種選項來配置對服務的外部存取。

請參閱 Kubernetes 文件中關於發佈服務 (ServiceTypes)Ingress 的說明,以獲得有關配置對服務的外部存取的更完整資訊。