文件

部署 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 的完整文件。

具有 EBS 優化的 EC2 節點的 EKS 叢集

本程序假設有一個現有的 EKS 叢集,其中至少有四個 EC2 節點。EC2 節點應具有相符的機器類型和組態,以確保 MinIO 的可預測效能。

MinIO 提供 硬體指南,用於選擇適當的 EC2 執行個體類別和大小。MinIO 強烈建議選擇 EBS 優化的執行個體,其至少具有 25Gbps 的網路頻寬,作為效能的基準。

有關可用 EC2 和 EBS 資源的更完整資訊,請參閱 EC2 執行個體類型EBS 磁碟區類型MinIO SUBNET 客戶應與 MinIO 工程部門聯絡,作為架構規劃的一部分,以取得有關為目標工作負載和效能目標選擇最佳執行個體和磁碟區類型方面的協助。

永久性磁碟區

對磁碟機的獨佔存取權

MinIO 需要對提供用於物件儲存的磁碟機或磁碟區具有獨佔存取權。沒有其他程序、軟體、腳本或人員應直接對提供給 MinIO 的磁碟機或磁碟區,或 MinIO 置於其上的物件或檔案執行任何動作。

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

在 EKS 上使用 MinIO Tenants 必須使用 EBS CSI 驅動程式 來佈建必要的底層持久卷。MinIO 強烈建議使用 SSD 支援的 EBS 卷以獲得最佳效能。MinIO 強烈建議使用 XFS 檔案系統部署基於 EBS 的 PV。為 MinIO EBS PV 建立一個 StorageClass,並將 csi.storage.k8s.io/fstype 參數 設定為 xfs。有關 EBS 資源的更多資訊,請參閱 EBS 卷類型。有關 StorageClass 參數的更多資訊,請參閱 StorageClass 參數

使用 Kustomize 部署 MinIO Tenant

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

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

重要事項

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

此步驟並未詳盡列出 Tenant CRD 中所有可能的設定選項。它提供了一個基準,您可以從此基準修改和調整 Tenant 以滿足您的需求。

  1. 為 Tenant 建立 YAML 物件

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

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

    該命令會建立一個包含多個物件的單個 YAML 檔案,這些物件以 --- 行分隔。在您偏好的編輯器中開啟該檔案。

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

  2. 設定 Tenant 拓撲

    kind: Tenant 物件描述了 MinIO Tenant。

    以下欄位共享 spec.pools[0] 前綴,並控制 Tenant 中部署的所有 Pod 的伺服器數量、每個伺服器的卷數量和儲存類別。

    欄位

    描述

    servers

    要在伺服器池中部署的 MinIO Pod 數量。

    volumesPerServer

    要附加到每個 MinIO Pod (servers) 的持久卷數量。Operator 為 Tenant 產生 volumesPerServer x servers 持久卷宣告。

    volumeClaimTemplate.spec.storageClassName

    要與產生的持久卷宣告關聯的 Kubernetes 儲存類別。

    如果沒有符合指定值的儲存類別,或者如果指定的儲存類別無法滿足要求的 PVC 數量或儲存容量,則 Tenant 可能無法啟動。

    volumeClaimTemplate.spec.resources.requests.storage

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

  3. 設定 Tenant 親和性或反親和性

    MinIO Operator 支援以下 Kubernetes 親和性和反親和性設定。

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

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

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

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

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

  4. 設定網路加密

    MinIO Tenant CRD 提供以下欄位,您可以從這些欄位設定 Tenant TLS 網路加密。

    欄位

    描述

    tenant.certificate.requestAutoCert

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

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

    tenant.certificate.certConfig

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

    tenant.certificate.externalCertSecret

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

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

    tenant.certificate.externalCACertSecret

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

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

  5. 設定 MinIO 環境變數

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

    欄位

    描述

    tenant.configuration

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

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

    YAML 包含一個 kind: Secret 物件,其中 metadata.name: storage-configuration 設定了根使用者名稱、密碼、擦除同位檢查設定,並啟用了 Tenant Console。

    請根據您的 Tenant 需求修改此設定。

  6. 檢閱命名空間

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

    您可以變更此值,為 Tenant 建立不同的命名空間。您必須變更 YAML 檔案中的所有 metadata.namespace 值以符合命名空間。

  7. 部署 Tenant

    使用 kubectl apply -f 命令來部署 Tenant。

    kubectl apply -f tenant-base.yaml
    

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

    您可以使用以下命令來監控進度

    watch kubectl get all -n minio-tenant
    
  8. 公開 Tenant MinIO S3 API 連接埠

    若要從您的本機機器測試 MinIO Client mc,請轉發 MinIO 連接埠並建立別名。

    • 轉發 Tenant 的 MinIO 連接埠

    kubectl port-forward svc/MINIO_TENANT_NAME-hl 9000 -n MINIO_TENANT_NAMESPACE
    
    • 為 Tenant 服務建立別名

    mc alias set myminio https://127.0.0.1:9000 minio minio123 --insecure
    

    您可以使用 mc mb 在 Tenant 上建立儲存貯體。

    mc mb myminio/mybucket --insecure
    

    如果您使用由受信任的憑證授權單位 (CA) 頒發的 TLS 憑證部署 MinIO Tenant,您可以省略 --insecure 旗標。

    請參閱 連線到 Tenant 以取得具體指示。

連線到 Tenant

MinIO Operator 為 MinIO Tenant 建立服務。

使用 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 Tenant 服務。應用程式應使用此服務來對 MinIO Tenant 執行操作。

  • *-console 服務對應於 MinIO Console。管理員應使用此服務來存取 MinIO Console 並對 MinIO Tenant 執行管理操作。

其餘服務支援 Tenant 操作,不適合使用者或管理員使用。

預設情況下,每個服務僅在 Kubernetes 叢集內可見。叢集內部部署的應用程式可以使用 CLUSTER-IP 來存取服務。

Kubernetes 叢集外部的應用程式可以使用 EXTERNAL-IP 來存取服務。此值僅針對設定為 Ingress 或類似網路存取服務的 Kubernetes 叢集填入。Kubernetes 提供多種選項來設定對服務的外部存取。

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