
git clone https://github.com/zilliztech/milvus-helm.git
git checkout tags/milvus-5.0.19
git describe --tags
milvus-5.0.19
values.yaml을 수정하여 standalone 배포로 구성한다.
각 컴포넌트 역할
내장 컴포넌트 (별도 설치 불필요)
외부 의존성 (별도 필요)
# ============================================
# [1] 모드 설정 - Standalone 핵심
# ============================================
cluster:
enabled: false
# ============================================
# [2] Milvus Standalone 컨테이너 설정
# ============================================
standalone:
messageQueue: rocksmq # 내장 MQ 사용 (pulsar/kafka 불필요)
resources:
requests:
cpu: "2"
memory: "4Gi"
limits:
cpu: "4"
memory: "8Gi"
persistence:
mountPath: "/var/lib/milvus"
enabled: true
persistentVolumeClaim:
storageClass: "your-storage-class" # 에어갭 환경 SC명 입력
accessModes: ReadWriteOnce
size: 50Gi
# ============================================
# [3] etcd 설정
# ============================================
etcd:
replicaCount: 1
resources:
requests:
cpu: "100m"
memory: "256Mi"
persistence:
enabled: true
storageClass: "your-storage-class"
size: 10Gi
# ============================================
# [4] MinIO 설정
# ============================================
minio:
enabled: true
mode: standalone # distributed → standalone으로 변경 필수
accessKey: "minioadmin"
secretKey: "minioadmin" # 운영시 반드시 변경
bucketName: "milvus-bucket"
resources:
requests:
memory: 1Gi
persistence:
enabled: true
storageClass: "your-storage-class"
size: 100Gi
# ============================================
# [5] Pulsar 비활성화
# ============================================
pulsarv3:
enabled: false
# ============================================
# [6] 이미지 설정 (에어갭 환경 핵심)
# ============================================
image:
all:
repository: "repo.utcloud.io/milvusdb/milvus"
tag: "v2.5.4"
pullPolicy: IfNotPresent
# ============================================
# [7] Milvus 내부 파라미터 오버라이드
# ============================================
extraConfigFiles:
user.yaml: |+
log:
level: info
file:
rootPath: /var/lib/milvus/logs
cache:
cacheSize: 2GB # 메모리의 25~30% 권장
quotaAndLimits:
enable: true
queryRate:
max: 100 # QPS 제한
helm upgrade milvus --install -f override-values.yaml .
kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 192.168.194.129 <none> 443/TCP 406d
milvus ClusterIP 192.168.194.228 <none> 19530/TCP,9091/TCP 7h56m
milvus-etcd ClusterIP 192.168.194.156 <none> 2379/TCP,2380/TCP 7h56m
milvus-etcd-headless ClusterIP None <none> 2379/TCP,2380/TCP 7h56m
milvus-minio ClusterIP 192.168.194.177 <none> 9000/TCP 7h56m
kubectl port-forward svc/milvus 9091:9091
browser로 http://localhost:9091/webui 로 접속하면 됨.
from pymilvus import connections, FieldSchema, CollectionSchema, DataType, Collection, utility
import numpy as np
# 1. Milvus 서버 연결
HOST = '127.0.0.1' # 로컬포트포워드 사용 시
PORT = '19530' # GRPC 포트
print(f"Connecting to Milvus at {HOST}:{PORT}...")
connections.connect("default", host=HOST, port=PORT)
print("Connected!")
# 2. 컬렉션(테이블) 생성
collection_name = "test_collection"
# 기존 컬렉션 삭제 (테스트 반복용)
if utility.has_collection(collection_name):
utility.drop_collection(collection_name)
# 스키마 정의
fields = [
FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True),
FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=4, is_primary=False)
]
schema = CollectionSchema(fields, "test collection schema")
collection = Collection(collection_name, schema)
# 3. 데이터 삽입
vectors = [[1.0, 0.5, 0.2, 0.1], [0.1, 0.2, 0.3, 0.4], [0.5, 0.5, 0.5, 0.5]]
collection.insert([vectors])
print(f"Inserted {collection.num_entities} entities.")
# 4. 인덱스 생성 및 로드
collection.create_index(field_name="vector", index_params={"index_type": "IVF_FLAT", "params": {"nlist": 128}, "metric_type": "L2"})
collection.load()
# 5. 유사도 검색
search_vectors = [[0.1, 0.2, 0.3, 0.4]]
search_params = {"metric_type": "L2", "params": {"nprobe": 10}}
results = collection.search(search_vectors, "vector", search_params, limit=1, output_fields=["id"])
# 6. 결과 출력
for hits in results:
for hit in hits:
print(f"Hit: {hit}, Distance: {hit.distance}")
# 연결 종료
connections.disconnect("default")
Apache Pulsar는 Yahoo!에서 개발하고 2016년 오픈소스로 공개된 클라우드 네이티브 분산 메시징 및 스트리밍 플랫폼임. 현재는 Apache Software Foundation 최상위 프로젝트임.
Pulsar의 가장 큰 특징은 컴퓨팅과 스토리지를 분리한 2계층 구조입니다.
Producer → [Broker 계층] → [BookKeeper 계층(Bookie)] → Consumer
(stateless) (stateful storage)
| 항목 | Pulsar | Kafka |
|---|---|---|
| 아키텍처 | 컴퓨팅/스토리지 분리 | 일체형 (Broker가 스토리지 담당) |
| 구독 모델 | 4가지 (Exclusive, Shared, Failover, Key_Shared) | Consumer Group |
| 멀티 테넌시 | 기본 지원 (Tenant/Namespace) | 별도 설정 필요 |
| Geo-Replication | 기본 내장 | MirrorMaker 별도 필요 |
| 메시지 TTL/보존 | Topic 레벨 세밀 제어 | Log retention |
| 확장성 | Broker·Bookie 독립 확장 | Partition 재배치 필요 |
tenant/namespace/topic 계층 구조
예: my-company/payments/transactions
팀·서비스별 격리, 할당량(Quota), 권한 관리가 기본 내장