用 KubeBlocks 管理 Milvus
生成式人工智能的爆火引发了人们对向量数据库的关注。目前,KubeBlocks 支持 Milvus 的管理和运维。本文档展示如何使用 KubeBlocks 管理 Milvus。
Milvus 是高度灵活、可靠且速度极快的云原生开源矢量数据库。它为 embedding 相似性搜索和 AI 应用程序提供支持,并努力使每个组织都可以访问矢量数据库。 Milvus 可以存储、索引和管理由深度神经网络和其他机器学习 (ML) 模型生成的十亿级别以上的 embedding 向量。
本文档展示了如何通过 kbcli、kubectl 或 YAML 文件等当时创建和管理 Milvus 集群。您可以在 GitHub 仓库查看 YAML 示例。
开始之前
-
如果您想通过
kbcli
创建并连接 Milvus 集群,请先安装 kbcli。 -
为了保持隔离,本文档中创建一个名为
demo
的独立命名空间。kubectl create namespace demo
>
namespace/demo created
创建集群
步骤:
KubeBlocks 通过 Cluster
定义集群。以下是创建 Milvus 集群的示例。Pod 默认分布在不同节点。如果您只有一个节点可用于部署多副本集群,可设置 spec.schedulingPolicy
或 spec.componentSpecs.schedulingPolicy
,具体可参考 API 文档。但生产环境中,不建议将所有副本部署在同一个节点上,因为这可能会降低集群的可用性。
cat <<EOF | kubectl apply -f -
apiVersion: apps.kubeblocks.io/v1
kind: Cluster
metadata:
namespace: demo
name: mycluster
spec:
terminationPolicy: Delete
clusterDef: milvus
topology: cluster
componentSpecs:
- name: proxy
replicas: 1
resources:
limits:
cpu: "0.5"
memory: "0.5Gi"
requests:
cpu: "0.5"
memory: "0.5Gi"
serviceRefs:
- name: milvus-meta-storage
namespace: demo
clusterServiceSelector:
cluster: etcdm-cluster
service:
component: etcd
service: headless
port: client
- name: milvus-log-storage
namespace: demo
clusterServiceSelector:
cluster: pulsarm-cluster
service:
component: broker
service: headless
port: pulsar
- name: milvus-object-storage
namespace: demo
clusterServiceSelector:
cluster: miniom-cluster
service:
component: minio
service: headless
port: http
credential:
component: minio
name: admin
disableExporter: true
- name: mixcoord
replicas: 1
resources:
limits:
cpu: "0.5"
memory: "0.5Gi"
requests:
cpu: "0.5"
memory: "0.5Gi"
serviceRefs:
- name: milvus-meta-storage
namespace: demo
clusterServiceSelector:
cluster: etcdm-cluster
service:
component: etcd
service: headless
port: client
- name: milvus-log-storage
namespace: demo
clusterServiceSelector:
cluster: pulsarm-cluster
service:
component: broker
service: headless
port: pulsar
- name: milvus-object-storage
namespace: demo
clusterServiceSelector:
cluster: miniom-cluster
service:
component: minio
service: headless
port: http
credential:
component: minio
name: admin
disableExporter: true
- name: datanode
replicas: 1
disableExporter: true
resources:
limits:
cpu: "0.5"
memory: "0.5Gi"
requests:
cpu: "0.5"
memory: "0.5Gi"
serviceRefs:
- name: milvus-meta-storage
namespace: demo
clusterServiceSelector:
cluster: etcdm-cluster
service:
component: etcd
service: headless
port: client
- name: milvus-log-storage
namespace: demo
clusterServiceSelector:
cluster: pulsarm-cluster
service:
component: broker
service: headless
port: pulsar
- name: milvus-object-storage
namespace: demo
clusterServiceSelector:
cluster: miniom-cluster
service:
component: minio
service: headless
port: http
credential:
component: minio
name: admin
disableExporter: true
- name: indexnode
replicas: 1
disableExporter: true
resources:
limits:
cpu: "0.5"
memory: "0.5Gi"
requests:
cpu: "0.5"
memory: "0.5Gi"
serviceRefs:
- name: milvus-meta-storage
namespace: demo
clusterServiceSelector:
cluster: etcdm-cluster
service:
component: etcd
service: headless
port: client
- name: milvus-log-storage
namespace: demo
clusterServiceSelector:
cluster: pulsarm-cluster
service:
component: broker
service: headless
port: pulsar
- name: milvus-object-storage
namespace: demo
clusterServiceSelector:
cluster: miniom-cluster
service:
component: minio
service: headless
port: http
credential:
component: minio
name: admin
disableExporter: true
- name: querynode
replicas: 1
disableExporter: true
resources:
limits:
cpu: "0.5"
memory: "0.5Gi"
requests:
cpu: "0.5"
memory: "0.5Gi"
serviceRefs:
- name: milvus-meta-storage
namespace: demo
clusterServiceSelector:
cluster: etcdm-cluster
service:
component: etcd
service: headless
port: client
- name: milvus-log-storage
namespace: demo
clusterServiceSelector:
cluster: pulsarm-cluster
service:
component: broker
service: headless
port: pulsar
- name: milvus-object-storage
namespace: demo
clusterServiceSelector:
cluster: miniom-cluster
service:
component: minio
service: headless
port: http
credential:
component: minio
name: admin
disableExporter: true
EOF
字段 | 定义 |
---|---|
spec.terminationPolicy | 集群终止策略,有效值为 DoNotTerminate 、Delete 和 WipeOut 。具体定义可参考 终止策略。 |
spec.clusterDef | 指定了创建集群时要使用的 ClusterDefinition 的名称。注意:请勿更新此字段。创建 Milvus 集群时,该值必须为 milvus 。 |
spec.topology | 指定了在创建集群时要使用的 ClusterTopology 的名称。可选值为[standalone, cluster]。 |
spec.componentSpecs | 集群 component 列表,定义了集群 components。该字段支持自定义配置集群中每个 component。 |
spec.componentSpecs.serviceRefs | 定义了 component 的 ServiceRef 列表。 |
spec.componentSpecs.serviceRefs.name | 指定了服务引用声明的标识符,该标识符在 componentDefinition.spec.serviceRefDeclarations[*].name 中定义。 |
spec.componentSpecs.serviceRefs.clusterServiceSelector | 引用了另一个 KubeBlocks 集群提供的服务。 |
spec.componentSpecs.serviceRefs.clusterServiceSelector.cluster | 定义了集群名称,您可以按需修改。 |
spec.componentSpecs.serviceRefs.clusterServiceSelector.service.component | 定义了组件名称。 |
spec.componentSpecs.serviceRefs.clusterServiceSelector.service.service | 引用了默认的无头服务(headless Service)。 |
spec.componentSpecs.serviceRefs.clusterServiceSelector.service.port | 引用了端口名称。 |
spec.componentSpecs.serviceRefs.clusterServiceSelector.credential | 指定了用于验证并与被引用集群建立连接的系统账号(SystemAccount)。 |
spec.componentSpecs.serviceRefs.clusterServiceSelector.credential.name | 指定了要引用的凭证(SystemAccount)名称,本例中使用 'admin' 账号。 |
spec.componentSpecs.disableExporter | 定义了是否在 component 无头服务(headless service)上标注指标 exporter 信息,是否开启监控 exporter。有效值为 [true, false]。 |
spec.componentSpecs.replicas | 定义了 component 中 replicas 的数量。 |
spec.componentSpecs.resources | 定义了 component 的资源要求。 |
您可参考 API 文档,查看更多 API 字段及说明。
KubeBlocks operator 监控 Cluster
CRD 并创建集群和全部依赖资源。您可执行以下命令获取集群创建的所有资源信息。
kubectl get all,secret,rolebinding,serviceaccount -l app.kubernetes.io/instance=mycluster -n demo