milvus-logo
LFAI
フロントページへ
  • 管理ガイド
    • 依存関係の管理

Milvus Operatorでオブジェクトストレージを設定する

Milvusでは、インデックスファイルやバイナリログなどの大規模ファイルを永続化するために、オブジェクトストレージとしてMinIOまたはS3を使用します。このトピックでは、Milvus OperatorでMilvusをインストールする際に、オブジェクトストレージの依存関係を設定する方法を紹介します。詳細については、Milvus Operatorリポジトリの「Milvus Operatorでオブジェクトストレージを構成する」を参照してください。

このトピックでは、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 の下に必須フィールドを追加します。考えられるオプションは、external およびinCluster です。

内部オブジェクトストレージ

デフォルトでは、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バケットは通常、アクセスキーとアクセスシークレットキーのペアでアクセスできます。それらをKubernetesに格納するためのSecret オブジェクトを以下のように作成します:

    # # 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は通常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.useIAMtrue に設定して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を使用する場合とほぼ同様である。Kubernetesに認証情報を保存するために、Secret オブジェクトを作成する必要がある。

    # # 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>
    

    その後、endpointstorage.googleapis.com:443 に変更し、spec.config.minio.cloudProvidergcp に設定するだけです:

    # # 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と同様に、KubernetesクラスタとしてGKEを使用している場合は、Workload Identityを使用して一時的な認証情報でGCSにアクセスすることもできます。

    ServiceAccount のアノテーションはAWS EKSとは異なります。ロールARNの代わりにGCPサービスアカウント名を指定する必要があります。

    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依存関係を設定する方法について説明します:

翻訳DeepL

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
フィードバック

このページは役に立ちましたか ?