部署 MinIO Operator
概述
MinIO 是一種 Kubernetes 原生的高效能物件儲存,具有與 S3 相容的 API。MinIO Kubernetes Operator 支援將 MinIO 租戶部署到私有和公有雲基礎架構(「混合」雲端)。
以下程序會在 Kubernetes 基礎架構上安裝最新穩定版本的 (6.0.4) MinIO Operator。
MinIO Operator 會安裝一個 自訂資源定義 (CRD),以支援將 MinIO 租戶描述為 Kubernetes 物件。請參閱 MinIO Operator CRD 參考,以取得有關 MinIO CRD 的完整文件。
此文件假設熟悉引用的 Kubernetes 概念、實用程式和程序。雖然此文件可能會盡力提供有關在最佳工作基礎上設定或部署 Kubernetes 相關資源的指導,但它不能替代官方的 Kubernetes 文件。
MinIO Operator 元件
MinIO Operator 存在於其自己的命名空間中,它會在其中建立 Kubernetes 資源。這些資源包括 pod、服務、複製集和部署。
Operator pod 預設會監控所有命名空間,以使用 MinIO CRD 尋找物件並自動管理這些資源。
當您使用 Operator 建立租戶時,租戶必須有自己的命名空間。在該命名空間內,Operator 會產生租戶組態所需的 pod。
每個租戶 pod 會執行三個容器
MinIO 容器,可執行所有標準 MinIO 函數,相當於裸機上的基本 MinIO 安裝。此容器會將物件儲存和擷取到提供的掛載點(持久性磁碟區)。
InitContainer 僅在 pod 啟動期間存在,以管理啟動期間的組態密碼。啟動完成後,此容器將終止。
邊車容器用於初始化 MinIO 租戶。邊車會檢索並驗證每個租戶的配置,並在 Pod 中建立必要的本地資源。
在版本 Operator 中變更6.0.0
邊車有自己的映像檔和發布週期,與 MinIO Operator 的其餘部分分開。MinIO Operator 會將租戶的環境變數儲存在邊車中,允許 Operator 更新變數,而無需滾動重新啟動。
租戶利用持久性卷聲明與儲存物件的持久性卷進行通信。
先決條件
Kubernetes 版本 v1.28.9
MinIO 針對 Kubernetes API 的 v1.28.9 底層版本進行 6.0.4 的測試。MinIO 強烈建議使用積極維護的 Kubernetes API 版本來維護 Kubernetes 基礎結構。
MinIO 強烈建議升級使用生命週期結束 API 版本執行的 Kubernetes 叢集。
Kustomize 和 kubectl
Kustomize 是一個基於 YAML 的範本工具,可讓您以宣告式和可重複的方式定義 Kubernetes 資源。Kustomize 包含在 kubectl 命令列工具中。
此程序假設您的本機主機具有與您的 Kubernetes 叢集相符的 kubectl
版本,並且具有建立新資源的叢集存取權。
預設 MinIO Operator Kustomize 範本為自訂您本機環境的配置提供了一個起點。您可以修改預設的 Kustomization 檔案或套用您自己的 修補程式,以自訂 Kubernetes 叢集的 Operator 部署。
Kubernetes TLS 憑證 API
在版本 Operator 中變更: v.5.0.0
MinIO Operator 使用 Kubernetes certificates.k8s.io
TLS 憑證管理 API 來管理 TLS 憑證簽署請求 (CSR),以便在下列情況下建立已簽署的 TLS 憑證
當啟用
autoCert
時。當
MINIO_CONSOLE_TLS_ENABLE
環境變數設定為on
時,用於 MinIO 租戶主控台。當
OPERATOR_STS_ENABLED
環境變數設定為on
時,用於 STS 服務。用於檢索叢集的健康狀況。
從 Operator 6.0.0 開始,MinIO Operator 會讀取 operator-ca-tls
密碼中的憑證,以信任整個 Kubernetes 叢集中的私有憑證授權單位,例如在使用 cert-manager 時。先前版本的 Operator 會將 operator-ca-tls
憑證同步到每個租戶。
在上述任何一種情況下,MinIO Operator *需要* Kubernetes kube-controller-manager
配置包含下列配置設定
--cluster-signing-key-file
- 指定用於簽署叢集範圍憑證的 PEM 編碼 RSA 或 ECDSA 私密金鑰。--cluster-signing-cert-file
- 指定用於頒發叢集範圍憑證的 PEM 編碼 x.509 憑證授權單位憑證。
Kubernetes TLS API 使用 CA 簽章演算法來產生新的 TLS 憑證。MinIO 建議使用 ECDSA(例如NIST P-256 曲線)或 EdDSA(例如Curve25519)TLS 私密金鑰/憑證,因為它們與 RSA 相比,計算要求較低。請參閱支援的 TLS 加密套件,以取得支援的 TLS 加密套件的完整清單。
如果 Kubernetes 叢集未配置為回應產生的CSR,則 Operator 無法完成初始化。某些 Kubernetes 提供者預設不指定這些配置值。
若要檢查 kube-controller-manager
是否指定叢集簽署金鑰和憑證檔案,請使用以下命令
kubectl get pod kube-controller-manager-$CLUSTERNAME-control-plane \
-n kube-system -o yaml
將
$CLUSTERNAME
替換為 Kubernetes 叢集的名稱。
確認輸出包含反白顯示的行。以上範例命令的輸出可能與終端機中的輸出不同
spec:
containers:
- command:
- kube-controller-manager
- --allocate-node-cidrs=true
- --authentication-kubeconfig=/etc/kubernetes/controller-manager.conf
- --authorization-kubeconfig=/etc/kubernetes/controller-manager.conf
- --bind-address=127.0.0.1
- --client-ca-file=/etc/kubernetes/pki/ca.crt
- --cluster-cidr=10.244.0.0/16
- --cluster-name=my-cluster-name
- --cluster-signing-cert-file=/etc/kubernetes/pki/ca.crt
- --cluster-signing-key-file=/etc/kubernetes/pki/ca.key
...
重要
MinIO Operator 會使用指定的憑證授權單位 (CA) 自動產生所有 MinIO 租戶 Pod 的 TLS 憑證。Kubernetes 叢集外部的用戶端必須信任 Kubernetes 叢集 CA 才能連線至 MinIO Operator 或 MinIO 租戶。
無法信任 Kubernetes 叢集 CA 的用戶端可以停用連線至 MinIO Operator 或 MinIO 租戶的 TLS 驗證。
或者,您可以產生由已知且信任的 CA 簽署的 x.509 TLS 憑證,並將這些憑證傳遞給 MinIO 租戶。請參閱網路加密 (TLS),以取得更完整的文件。
使用 cert-manager 進行憑證管理
您可以設定部署以使用 cert-manager,而不是讓 MinIO Operator 管理憑證。如需使用 cert-manager 部署 MinIO Operator 和租戶的說明,請參閱 cert-manager 頁面。
程序
以下步驟使用 Kustomize 和 MinIO Operator GitHub 儲存庫中的 kustomization.yaml
檔案部署 Operator。若要使用 Helm 圖表安裝 Operator,請參閱使用 Helm 部署 Operator。
使用 Kustomize 安裝 MinIO Operator
以下程序使用 kubectl -k
從 MinIO Operator GitHub 儲存庫安裝 Operator。kubectl -k
和 kubectl --kustomize
是執行相同命令的別名。
重要
如果您使用 Kustomize 安裝 Operator,則必須使用 Kustomize 管理或升級該安裝。請勿使用 kubectl krew
、Helm 圖表或類似方法來管理或升級使用 Kustomize 部署的 MinIO Operator 安裝。
但是,您可以使用 Kustomize 來升級先前使用 MinIO Kubernetes 外掛程式安裝的舊版 Operator (5.0.14 或更早版本)。
安裝最新版本的 Operator
以下命令會將 Operator 安裝到
minio-operator
命名空間kubectl apply -k "github.com/minio/operator?ref=v6.0.4"
命令會輸出已安裝資源的清單。
驗證 Operator Pod 是否正在執行
kubectl get pods -n minio-operator
輸出類似如下
NAME READY STATUS RESTARTS AGE minio-operator-6c758b8c45-nkhlx 1/1 Running 0 2m42s minio-operator-6c758b8c45-dgd8n 1/1 Running 0 2m42s
在此範例中,
minio-operator
Pod 是 MinIO Operator,而console
Pod 是 Operator 主控台。您可以套用 kubectl 修補程式來修改 Operator 部署。您可以在 Operator GitHub 儲存庫中找到常見配置的範例。
驗證 Operator 安裝
檢查指定的命名空間 (
minio-operator
) 的內容,以確保所有 Pod 和服務都已順利啟動。kubectl get all -n minio-operator
回應應類似如下
NAME READY STATUS RESTARTS AGE pod/minio-operator-6c758b8c45-nkhlx 1/1 Running 0 5m20s pod/minio-operator-6c758b8c45-dgd8n 1/1 Running 0 5m20s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/operator ClusterIP 10.43.135.241 <none> 4221/TCP 5m20s service/sts ClusterIP 10.43.117.251 <none> 4223/TCP 5m20s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/minio-operator 2/2 2 2 5m20s NAME DESIRED CURRENT READY AGE replicaset.apps/minio-operator-6c758b8c45 2 2 2 5m20s
後續步驟
您可以使用MinIO CRD 和 Kustomize 部署 MinIO 租戶。MinIO 也提供了用於部署租戶的 Helm 圖表。
MinIO 建議使用與安裝 Operator 相同的方法來部署和管理租戶。混合使用 Kustomize 和 Helm 來管理 Operator 或租戶可能會增加操作複雜性。