文件

部署 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 憑證

從 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 -kkubectl --kustomize 是執行相同命令的別名。

重要

如果您使用 Kustomize 安裝 Operator,則必須使用 Kustomize 管理或升級該安裝。請勿使用 kubectl krew、Helm 圖表或類似方法來管理或升級使用 Kustomize 部署的 MinIO Operator 安裝。

但是,您可以使用 Kustomize 來升級先前使用 MinIO Kubernetes 外掛程式安裝的舊版 Operator (5.0.14 或更早版本)。

  1. 安裝最新版本的 Operator

    以下命令會將 Operator 安裝到 minio-operator 命名空間

    kubectl apply -k "github.com/minio/operator?ref=v6.0.4"
    

    命令會輸出已安裝資源的清單。

  2. 驗證 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 儲存庫中找到常見配置的範例。

  3. 驗證 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
    
  4. 後續步驟

    您可以使用MinIO CRD 和 Kustomize 部署 MinIO 租戶。MinIO 也提供了用於部署租戶的 Helm 圖表

    MinIO 建議使用與安裝 Operator 相同的方法來部署和管理租戶。混合使用 Kustomize 和 Helm 來管理 Operator 或租戶可能會增加操作複雜性。