使用 Milvus Operator 設定物件儲存
Milvus 使用 MinIO 或 S3 作為物件儲存,以持久化大型檔案,例如索引檔案和二進位日誌。本主題介紹當您使用 Milvus Operator 安裝 Milvus 時,如何設定物件儲存的依賴性。如需詳細資訊,請參閱 Milvus Operator 資源庫中的Configure Object Storage with MilvusOperator。
本主題假設您已部署 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 儲存桶。您可以建立
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.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 相依性: