用 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