部署 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 的完整文件。
Kubernetes 版本 v1.28.9
MinIO 針對 v1.28.9 的 Kubernetes API 基礎版本進行 6.0.4 測試。MinIO 強烈建議使用積極維護的 Kubernetes API 版本來維護 Kubernetes 基礎架構。
MinIO 強烈建議升級使用生命週期結束 API 版本執行的 Kubernetes 叢集。
持久卷
對磁碟機的獨佔存取
MinIO 需要獨佔存取為物件儲存提供的磁碟機或卷。其他任何處理程序、軟體、腳本或人員都不應直接對提供給 MinIO 的磁碟機或卷,或 MinIO 置於其上的物件或檔案執行任何動作。
除非 MinIO 工程部指示,否則請勿使用腳本或工具直接修改、刪除或移動提供的磁碟機上的任何資料分片、同位分片或中繼資料檔案,包括從一個磁碟機或節點移動到另一個磁碟機或節點。這類操作很可能會導致廣泛的損毀和資料遺失,超出 MinIO 的修復能力。
MinIO 可以使用任何 Kubernetes 持久卷 (Persistent Volume, PV),只要該持久卷支援 ReadWriteOnce 存取模式。MinIO 的一致性保證需要 ReadWriteOnce
提供的獨佔儲存存取權。在部署租戶 (Tenant) 之前,持久卷必須存在。
此外,MinIO 建議為 PVC 儲存類別 (StorageClass) 設定 Retain
的回收策略。如果可以,請設定儲存類別、CSI 或 PV 底層的其他供應器,將磁碟區格式化為 XFS,以確保最佳效能。
對於節點具有直接附加儲存裝置的 Kubernetes 叢集,MinIO 強烈建議使用 DirectPV CSI 驅動程式。DirectPV 提供分散式持久卷管理器,可以跨 Kubernetes 節點探索、格式化、掛載、排程和監控磁碟機。DirectPV 解決了手動佈建和監控 本機持久卷 的限制。
使用 Kustomize 部署 MinIO 租戶
以下程序使用 kubectl -k
,透過 MinIO Operator Github 儲存庫中的 base
Kustomization 範本部署 MinIO 租戶。
您可以從儲存庫中選擇不同的基礎範本或預先建立的範本作為起點,或者使用 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
透過伺服器名稱指示 (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 租戶建立服務。
使用 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 的內容,以獲取更完整的資訊,了解如何設定外部存取服務。