KubeBlocks
BlogsEnterprise
⌘K
​
Blogs
Overview
Quickstart

Topologies

Milvus Standalone Cluster
Milvus Cluster
Architecture

Operations

Lifecycle Management
Vertical Scaling
Horizontal Scaling
Manage Milvus Services
Decommission Milvus Replica

Monitoring

Observability for Milvus Clusters

tpl

  1. Resource Hierarchy
  2. Topologies
  3. Containers Inside Each Pod
    1. Milvus Role Pods (proxy, queryNode, dataNode, indexNode)
    2. Supporting Component Pods
  4. Distributed Component Roles
  5. High Availability in Distributed Mode
  6. Traffic Routing

Milvus Architecture in KubeBlocks

This page describes how KubeBlocks deploys a Milvus vector database on Kubernetes — covering the resource hierarchy, standalone and distributed topologies, pod internals, and traffic routing.

Resource Hierarchy

KubeBlocks models a Milvus deployment as a hierarchy of Kubernetes custom resources:

Cluster  →  Component  →  InstanceSet  →  Pod × N
ResourceRole
ClusterUser-facing declaration — specifies topology (standalone or distributed), component replica counts, storage, and resources
ComponentGenerated automatically; one Component per role (proxy, queryNode, dataNode, indexNode, etcd, minio); references a ComponentDefinition
InstanceSetKubeBlocks custom workload (replaces StatefulSet); manages pods with stable identities
PodActual running Milvus process; each pod gets a unique ordinal and its own PVC where applicable

Topologies

KubeBlocks supports two Milvus deployment topologies:

TopologyDescriptionUse Case
StandaloneSingle Milvus pod with embedded etcd and MinIO; all roles run in one processDevelopment, testing, small workloads
DistributedSeparate components for each role plus dedicated etcd and MinIO clustersProduction workloads requiring horizontal scale and HA

Containers Inside Each Pod

Milvus Role Pods (proxy, queryNode, dataNode, indexNode)

ContainerPortPurpose
milvus19530 (gRPC), 9091 (HTTP metrics/health)Milvus service for the assigned role (query, data, index, or proxy)
kbagent5001Role probe endpoint — KubeBlocks queries GET /v1.0/getrole periodically
metrics-exporter9187Prometheus metrics exporter

Supporting Component Pods

In distributed topology, Milvus relies on two additional KubeBlocks Components deployed within the same Cluster:

ComponentPurpose
etcdStores Milvus metadata (collection schemas, segment info, index descriptions); provides distributed coordination
MinIOObject storage backend for vector data, indexes, and write-ahead logs

Distributed Component Roles

ComponentRoleScalability
ProxyStateless gateway; receives client requests, validates them, and routes to queryNode or dataNodeHorizontally scalable
QueryNodeLoads segment data into memory; executes vector similarity searches and scalar filteringHorizontally scalable
DataNodeReceives insert/delete operations; flushes sealed segments to object storage (MinIO)Horizontally scalable
IndexNodeBuilds vector indexes (HNSW, IVF, etc.) for sealed segments stored in MinIOHorizontally scalable
RootCoord(Embedded in standalone or as a coordinator process) Manages DDL operations and timestamp allocation—
QueryCoordManages query node cluster; assigns segments to query nodes; triggers load balancing—
DataCoordManages data nodes; tracks segment lifecycle (growing → sealed → flushed)—
IndexCoordSchedules index build tasks on index nodes—

In KubeBlocks' distributed topology, the coordinator roles (RootCoord, QueryCoord, DataCoord, IndexCoord) run as part of the primary Milvus component alongside the configurable worker components.

High Availability in Distributed Mode

HA MechanismDescription
Component-level replicationEach worker component (queryNode, dataNode, indexNode) can be scaled to multiple replicas; KubeBlocks manages their lifecycle independently
etcd HAThe embedded etcd cluster uses Raft consensus; metadata is safe as long as a quorum of etcd pods is available
MinIO durabilityMinIO's erasure coding ensures object data survives drive or node failures
Segment redundancySealed segments are persisted in MinIO; a restarted queryNode reloads them from object storage
Coordinator recoveryCoordinators are stateless against etcd; they reload all state from etcd on restart

Traffic Routing

KubeBlocks creates services for each Milvus component:

ServiceTypePortsSelector
{cluster}-milvus-proxyClusterIP19530 (gRPC), 9091 (HTTP)proxy pods
{cluster}-milvus-proxy-headlessHeadless19530, 9091proxy pods
{cluster}-milvus-{role}-headlessHeadlessvariespods per role

Client applications (using the Milvus SDK) connect to the proxy component on port 19530 (gRPC) or port 9091 (REST). The proxy is the single entry point; it handles authentication, routing, and result aggregation. Internal component communication uses the headless service addresses for direct pod-to-pod connectivity.

© 2026 KUBEBLOCKS INC