使用 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(持久卷声明)。
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 访问
或者,您可以使用 AssumeRole 让 Milvus 访问您的 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 依赖项: