文件

部署 MinIO 租戶

此程序說明如何使用 Kustomize 或 MinIO 的 Helm 圖表將 MinIO 租戶部署到標準 Kubernetes 叢集上。

部署單節點拓撲需要此文件中未涵蓋的其他組態。您可以選擇使用簡單的 Kubernetes YAML 物件來描述單節點拓撲,以進行本地測試和評估(如有必要)。MinIO 不建議或支援用於生產環境的單節點部署拓撲。

此文件假設您熟悉所有參考的 Kubernetes 概念、公用程式和程序。雖然此文件可能會在最大努力的基礎上提供組態或部署 Kubernetes 相關資源的指導,但它不能取代官方的 Kubernetes 文件

先決條件

MinIO Kubernetes Operator

此頁面上的程序需要有效安裝 MinIO Kubernetes Operator,並假設本機主機安裝了對應的 MinIO Kubernetes Operator。此程序假設使用最新的穩定 Operator 版本 6.0.4。

請參閱 部署 MinIO Operator,以取得部署 MinIO Operator 的完整文件。

具有 Azure 虛擬機器的 AKS 叢集

此程序假設有一個現有的 AKS 叢集,其中至少有四個 Azure 虛擬機器 (VM)。Azure VM 應具有相符的機器類型和組態,以確保 MinIO 的效能可預測。

MinIO 提供了 硬體指南,用於選擇適當的 EC2 執行個體類別和大小。MinIO 強烈建議選擇支援進階 SSD 且至少具有 25Gbps 網路頻寬的 VM 執行個體,作為效能的基準。

有關 Azure 虛擬機器類型和儲存資源的更完整資訊,請參閱 Azure 中虛擬機器的大小Azure 受管理磁碟類型

持續性磁碟區

獨佔存取磁碟機

MinIO 要求 獨佔存取為物件儲存提供的磁碟機或磁碟區。任何其他程序、軟體、腳本或人員都不應直接對提供給 MinIO 的磁碟機或磁碟區,或 MinIO 置於其中的物件或檔案執行任何動作。

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

MinIO 可以使用任何支援 Persistent Volume (PV) 持續性磁碟區 且具有 ReadWriteOnce 存取模式的 Kubernetes 資源。MinIO 的一致性保證需要 ReadWriteOnce 所提供的獨佔儲存存取權。持續性磁碟區必須在部署租戶之前就已存在。

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

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

在 AKS 上的 MinIO 租戶應使用 Azure Disks CSI 驅動程式來佈建必要的底層持續性磁碟區。MinIO 強烈建議使用 SSD 支援的磁碟類型以獲得最佳效能。如需有關 AKS 磁碟類型的詳細資訊,請參閱 Azure 磁碟類型

使用 Kustomize 部署 MinIO 租戶

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

您可以從 儲存庫中選擇不同的基礎或預先建置的範本作為起點,或使用 MinIO 自訂資源文件建立自己的 Kustomization 資源。

重要

如果您使用 Kustomize 部署 MinIO 租戶,您必須使用 Kustomize 來管理或升級該部署。請勿使用 kubectl krew、Helm Chart 或類似方法來管理或升級 MinIO 租戶。

此程序並未詳盡列出 Tenant 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) 的持續性磁碟區數量。運算子會為租戶產生 volumesPerServer x servers 個持續性磁碟區宣告。

    volumeClaimTemplate.spec.storageClassName

    要與產生的持續性磁碟區宣告相關聯的 Kubernetes 儲存類別。

    如果不存在符合指定值的儲存類別,如果指定的儲存類別無法滿足要求的 PVC 數量或儲存容量,則租戶可能無法啟動。

    volumeClaimTemplate.spec.resources.requests.storage

    要為每個產生的 PVC 請求的儲存空間量。

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

    MinIO 運算子支援以下 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. 檢閱命名空間

    YAML 物件 kind: Namespace 將租戶的預設命名空間設定為 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 運算子會為 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 文件中的 發佈服務 (服務類型)Ingress,以取得有關配置對服務的外部存取的更完整資訊。