🚀 免費嘗試 Zilliz Cloud,完全托管的 Milvus,體驗速度提升 10 倍!立即嘗試

milvus-logo
LFAI
主頁
  • 管理指南
    • 管理相依性
  • Home
  • Docs
  • 管理指南

  • 管理相依性

  • 與 Milvus 操作員

  • 物件儲存

使用 Milvus Operator 設定物件儲存

Milvus 使用 MinIO 或 S3 作為物件儲存,以持久化大型檔案,例如索引檔案和二進位日誌。本主題介紹當您使用 Milvus Operator 安裝 Milvus 時,如何設定物件儲存的依賴性。如需詳細資訊,請參閱 Milvus Operator 資源庫中的Configure Object Storage with MilvusOperator。

本主題假設您已部署 Milvus Operator。

請參閱部署 Milvus Operator以取得更多資訊。

您需要指定使用 Milvus Operator 啟動 Milvus 叢集的設定檔。

kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/milvus_cluster_default.yaml

您只需編輯milvus_cluster_default.yaml 中的程式碼模板,即可設定第三方依賴。以下各節將分別介紹如何設定物件儲存、etcd 及 Pulsar。

設定物件儲存

Milvus 集群使用 MinIO 或 S3 作為物件儲存,以持久化大型檔案,例如索引檔案和二進位日誌。在spec.dependencies.storage 下添加必填字段以配置对象存储,可能的选项是externalinCluster

內部物件儲存

預設情況下,Milvus Operator 會為 Milvus 部署集群內 MinIO。以下是一個配置範例,示範如何使用此 MinIO 作為內部物件儲存。

apiVersion: milvus.io/v1beta1
kind: Milvus
metadata:
  name: my-release
  labels:
    app: milvus
spec:
  # Omit other fields ...
  dependencies:
    # Omit other fields ...
    storage:
      inCluster:
        values:
          mode: standalone
          resources:
            requests:
              memory: 100Mi
        deletionPolicy: Delete # Delete | Retain, default: Retain
        pvcDeletion: true # default: false

應用上述配置後,叢集內 MinIO 將以獨立模式執行,記憶體上限為 100Mi。請注意

  • deletionPolicy 欄位指定集群內 MinIO 的刪除政策。它預設為Delete ,並有Retain 作為替代選項。

    • Delete 表示群集內物件儲存會在您停止 Milvus 範例時刪除。
    • Retain 表示群集內物件儲存會保留為依賴服務,供您稍後啟動 Milvus 範例時使用。
  • pvcDeletion 欄位指定當叢集內 MinIO 刪除時,是否刪除 PVC(Persistent Volume Claim)。

inCluster.values 下的欄位與 Milvus Helm Chart 中的相同,您可以在這裡找到。

外部物件儲存

在模板 YAML 檔案中使用external 表示使用外部物件儲存服務。要使用外部物件儲存,您需要在 Milvus CRD 中正確設定spec.dependencies.storagespec.config.minio 下的欄位。

使用 Amazon Web Service (AWS) S3 作為外部物件儲存空間

  • 透過 AK/SK 設定 AWS S3 存取權限

    通常可透過存取金鑰和存取秘鑰的一對來存取 S3 儲存桶。您可以建立Secret 物件,將它們儲存在 Kubernetes 中,如下所示:

    # # change the <parameters> to match your environment
    apiVersion: v1
    kind: Secret
    metadata:
      name: my-release-s3-secret
    type: Opaque
    stringData:
      accesskey: <my-access-key>
      secretkey: <my-secret-key>
    

    然後您可以設定 AWS S3 儲存桶作為外部物件儲存:

    # # change the <parameters> to match your environment
    apiVersion: milvus.io/v1beta1
    kind: Milvus
    metadata:
      name: my-release
      labels:
        app: milvus
    spec:
      # Omit other fields ...
      config:
        minio:
          # your bucket name
          bucketName: <my-bucket>
          # Optional, config the prefix of the bucket milvus will use
          rootPath: milvus/my-release
          useSSL: true
      dependencies:
        storage:
          # enable external object storage
          external: true
          type: S3 # MinIO | S3
          # the endpoint of AWS S3
          endpoint: s3.amazonaws.com:443
          # the secret storing the access key and secret key
          secretRef: "my-release-s3-secret"
    
  • 透過 AssumeRole 配置 AWS S3 存取權限

    另外,您也可以讓 Milvus 使用AssumeRole 存取您的 AWS S3 收件匣,如此一來,只涉及臨時憑證,而非您實際的 AK/SK。

    如果這是您的選擇,您需要在 AWS 主控台上準備一個角色,並取得它的 ARN,通常是arn:aws:iam::<your account id>:role/<role-name> 的形式。

    然後建立ServiceAccount 物件,將它儲存在您的 Kubernetes 中,如下所示:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: my-release-sa
      annotations:
        eks.amazonaws.com/role-arn: <my-role-arn>
    

    一切就緒後,在範本 YAML 檔案中參考上述ServiceAccount ,並將spec.config.minio.useIAM 設為true ,以啟用 AssumeRole。

    apiVersion: milvus.io/v1beta1
    kind: Milvus
    metadata:
      name: my-release
      labels:
        app: milvus
    spec:
      # Omit other fields ...
      components:
        # use the above ServiceAccount
        serviceAccountName: my-release-sa
      config:
        minio:
          # enable AssumeRole
          useIAM: true
          # Omit other fields ...
      dependencies:
        storage:
          # Omit other fields ...
          # Note: you must use regional endpoint here, otherwise the minio client that milvus uses will fail to connect
          endpoint: s3.<my-bucket-region>.amazonaws.com:443
          secretRef: "" # we don't need to specify the secret here
    

使用 Google Cloud Storage (GCS) 作為外部物件儲存

AWS S3 物件儲存並非唯一的選擇。您也可以使用其他公有雲供應商的物件儲存服務,例如 Google Cloud。

  • 透過 AK/SK 設定 GCS 存取權限

    配置大多與使用 AWS S3 相似。您仍需要建立Secret 物件,以便在 Kubernetes 中儲存憑證。

    # # change the <parameters> to match your environment
    apiVersion: v1
    kind: Secret
    metadata:
      name: my-release-gcp-secret
    type: Opaque
    stringData:
      accesskey: <my-access-key>
      secretkey: <my-secret-key>
    

    然後,您只需要將endpoint 改為storage.googleapis.com:443 ,並將spec.config.minio.cloudProvider 設定為gcp ,如下所示:

    # # change the <parameters> to match your environment
    apiVersion: milvus.io/v1beta1
    kind: Milvus
    metadata:
      name: my-release
      labels:
        app: milvus
    spec:
      # Omit other fields ...
      config:
        minio:
          cloudProvider: gcp
      dependencies:
        storage:
          # Omit other fields ...
          endpoint: storage.googleapis.com:443
    
  • 透過 AssumeRole 設定 GCS 存取權限

    與 AWS S3 相似,如果您使用 GKE 作為 Kubernetes 叢集,您也可以使用Workload Identity以臨時憑證存取 GCS。

    ServiceAccount 的註解與 AWS EKS 不同。您需要指定 GCP 服務帳號名稱,而非角色 ARN。

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: my-release-sa
      annotations:
        iam.gke.io/gcp-service-account: <my-gcp-service-account-name>
    

    然後,您可以設定您的 Milvus 實例使用上述ServiceAccount ,並透過設定spec.config.minio.useIAMtrue 來啟用 AssumeRole,如下所示:

    labels:
        app: milvus
    spec:
      # Omit other fields ...
      components:
        # use the above ServiceAccount
        serviceAccountName: my-release-sa
      config:
        minio:
          cloudProvider: gcp
          # enable AssumeRole
          useIAM: true
          # Omit other fields ...  
    

下一步

學習如何使用 Milvus Operator 配置其他 Milvus 相依性:

免費嘗試托管的 Milvus

Zilliz Cloud 無縫接入,由 Milvus 提供動力,速度提升 10 倍。

開始使用
反饋

這個頁面有幫助嗎?