Milvus Operatorでオブジェクトストレージを設定する
Milvusでは、インデックスファイルやバイナリログなどの大規模ファイルを永続化するために、オブジェクトストレージとしてMinIOまたはS3を使用します。このトピックでは、Milvus OperatorでMilvusをインストールする際に、オブジェクトストレージの依存関係を設定する方法を紹介します。詳細については、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.storage
、spec.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.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を使用する場合とほぼ同様である。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>
その後、
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と同様に、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.useIAM
をtrue
に設定することで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依存関係を設定する方法について説明します: