Milvus 最新版本 On Kubernetes StandAlone 模式部署
环境要求
安装 Docker
- Docker 24.0.5 部署:https://blog.csdn.net/weixin_42598916/article/details/135725610?spm=1001.2014.3001.5502
安装 MiniKube
# 创建服务目录
mkdir -p /data/service/minikube/
# 下载 MiniKube 安装包
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-latest.x86_64.rpm -o /data/service/minikube/
# 安装 MiniKube 安装包
rpm -ivh /data/service/minikube/minikube-latest.x86_64.rpm
# 启动 MiniKube 服务
# 默认情况下,无法通过 root 启动 MiniKube,所以如果需要通过 root 安装,则需要通过 --force 跳过
minikube start --force
😄 minikube v1.31.2 on Centos 7.9.2009
❗ minikube skips various validations when --force is supplied; this may lead to unexpected behavior
✨ Automatically selected the docker driver. Other choices: none, ssh
🛑 The "docker" driver should not be used with root privileges. If you wish to continue as root, use --force.
💡 If you are running minikube within a VM, consider using --driver=none:
📘 https://minikube.sigs.k8s.io/docs/reference/drivers/none/
📌 Using Docker driver with root privileges
👍 Starting control plane node minikube in cluster minikube
🚜 Pulling base image ...
💾 Downloading Kubernetes v1.27.4 preload ...
> preloaded-images-k8s-v18-v1...: 393.21 MiB / 393.21 MiB 100.00% 345.67
> gcr.io/k8s-minikube/kicbase...: 447.62 MiB / 447.62 MiB 100.00% 364.39
🔥 Creating docker container (CPUs=2, Memory=2200MB) ...
🐳 Preparing Kubernetes v1.27.4 on Docker 24.0.4 ...
▪ Generating certificates and keys ...
▪ Booting up control plane ...
▪ Configuring RBAC rules ...
🔗 Configuring bridge CNI (Container Networking Interface) ...
▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
🔎 Verifying Kubernetes components...
🌟 Enabled addons: storage-provisioner, default-storageclass
💡 kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'
🏄 Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
# 通过查看 Pod 状态,确定 MiniKube 启动正常
minikube kubectl -- get po -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-5d78c9869d-grxl4 1/1 Running 0 41s
kube-system etcd-minikube 1/1 Running 0 52s
kube-system kube-apiserver-minikube 1/1 Running 0 52s
kube-system kube-controller-manager-minikube 1/1 Running 0 52s
kube-system kube-proxy-dp2dv 1/1 Running 0 41s
kube-system kube-scheduler-minikube 1/1 Running 0 52s
kube-system storage-provisioner 1/1 Running 1 (10s ago) 49s
安装 Kubectl 工具
# 下载最新版 Kubectl 源码包
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
# 安装 Kubectl 源码包
install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
# 通过查看 kubectl 版本,确定 kubectl 安装完成
kubectl version --client
Client Version: v1.28.3
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
安装 Helm 工具
# 下载 Helm 3.13.1 安装包
wget https://get.helm.sh/helm-v3.13.1-linux-amd64.tar.gz
# 解压 Helm 3.13.1 安装包
tar -xf helm-v3.13.1-linux-amd64.tar.gz
# 将安装包移至 /usr/local/bin 目录下
mv linux-amd64/helm /usr/local/bin/helm
# 通过查看 helm help 命令,确定 helm 安装完成
helm help
在线安装 Milvus StandAlone
-
官方部署文档:
# 将 milvus 官方仓库添加到 helm 仓库中
helm repo add milvus https://zilliztech.github.io/milvus-helm/
# 更新 helm 仓库
helm repo update
# 安装 Milvus StandAlone
# - my-release: 指定实例名称为 my-release
# - milvus/milvus: 从 milvus 仓库中,安装 milvus
# - cluster.enabled=false: 关闭集群模式
# - etcd.replicaCount=1: milvus 所使用的分布式键值对存储 etcd 的副本数为 1
# - minio.mode=standalone: milvus 所使用的对象存储 minio 的模式为 standalone
# - pulsar.enabled=false: 不使用事件流平台 plusar
helm install my-release milvus/milvus --set cluster.enabled=false --set etcd.replicaCount=1 --set minio.mode=standalone --set pulsar.enabled=false
验证 Milvus StandAlone
# 查看 milvus pods 状态
kubectl get pods
NAME READY STATUS RESTARTS AGE
my-release-etcd-0 1/1 Running 0 21m
my-release-milvus-standalone-7c85f5bdcd-hlzwp 1/1 Running 0 21m
my-release-minio-67c5bcb8d7-7bs7v 1/1 Running 0 21m
# 查看 milvus service 状态
kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-release-etcd ClusterIP 10.110.20.83 <none> 2379/TCP,2380/TCP 17m
my-release-etcd-headless ClusterIP None <none> 2379/TCP,2380/TCP 17m
my-release-milvus ClusterIP 10.97.190.120 <none> 19530/TCP,9091/TCP 17m
my-release-minio ClusterIP 10.103.74.140 <none> 9000/TCP 17m
# 手动删除 pod my-release-milvus-standalone-76f75985bd-q9j52
kubectl delete pod my-release-milvus-standalone-7c85f5bdcd-hlzwp -n default
# 重新查看 milvus pods 状态,确认新 milvus pods 自动生成,并进入 running 状态
kubectl get pods -A -o wide | grep my-release
NAME READY STATUS RESTARTS AGE
my-release-etcd-0 1/1 Running 0 23m
my-release-milvus-standalone-7c85f5bdcd-ddw4r 1/1 Running 0 100s
my-release-minio-67c5bcb8d7-7bs7v 1/1 Running 0 23m
# 重新查看 milvus service 状态
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 27m
my-release-etcd ClusterIP 10.110.20.83 <none> 2379/TCP,2380/TCP 24m
my-release-etcd-headless ClusterIP None <none> 2379/TCP,2380/TCP 24m
my-release-milvus ClusterIP 10.97.190.120 <none> 19530/TCP,9091/TCP 24m
my-release-minio ClusterIP 10.103.74.140 <none> 9000/TCP 24m
离线安装 Milvus StandAlone
# 将 milvus 官方仓库添加到 helm 仓库中
helm repo add milvus https://zilliztech.github.io/milvus-helm/
# 更新 helm 仓库
helm repo update
# 下载 Milvus StandAlone yaml 文件
# - helm template my-release:指定实例名称为 my-release
# - set cluster.enabled=false:关闭集群模式
# - set etcd.replicaCount=1:milvus 所使用的分布式键值对存储 etcd 的副本数为 1
# - set minio.mode=standalone:milvus 所使用的对象存储 minio 的模式为 standalone
# - seet pulsar.enabled=false:不使用事件流平台 plusar
# - milvus/milvus:从 milvus 仓库中,安装 milvus
# - milvus_manifest.yaml:将 Helm 生成的 Kubernetes 资源 YAML 内容输出到名为 milvus_manifest.yaml 的文件中
helm template my-release --set cluster.enabled=false --set etcd.replicaCount=1 --set minio.mode=standalone --set pulsar.enabled=false milvus/milvus > milvus_manifest.yaml
# 若需要调整配置参数,可通过 values.yaml 文件调整
# 下载 values.yaml 文件
wget https://raw.githubusercontent.com/milvus-io/milvus-helm/master/charts/milvus/values.yaml
# 通过 values.yaml 文件重新生成 milvus_mainfest.yaml
helm template -f values.yaml my-release milvus/milvus > milvus_manifest.yaml
# 下载其余脚本文件
wget https://raw.githubusercontent.com/milvus-io/milvus/master/deployments/offline/requirements.txt
wget https://raw.githubusercontent.com/milvus-io/milvus/master/deployments/offline/save_image.py
# 拉取并保存 image
pip3 install -r requirements.txt
python3 save_image.py --manifest milvus_manifest.yaml
# 加载 image
cd images/for image in $(find . -type f -name "*.tar.gz") ; do gunzip -c $image | docker load; done
# 基于 milvus_mainfest.yaml 配置文件,启动 milvus
kubectl apply -f milvus_manifest.yaml
附录
values.yaml 默认配置
## Enable or disable Milvus Cluster mode
cluster:
enabled: true
image:
all:
repository: milvusdb/milvus
tag: v2.2.13
pullPolicy: IfNotPresent
## Optionally specify an array of imagePullSecrets.
## Secrets must be manually created in the namespace.
## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
##
# pullSecrets:
# - myRegistryKeySecretName
tools:
repository: milvusdb/milvus-config-tool
tag: v0.1.1
pullPolicy: IfNotPresent
# Global node selector
# If set, this will apply to all milvus components
# Individual components can be set to a different node selector
nodeSelector: {}
# Global tolerations
# If set, this will apply to all milvus components
# Individual components can be set to a different tolerations
tolerations: []
# Global affinity
# If set, this will apply to all milvus components
# Individual components can be set to a different affinity
affinity: {}
# Global labels and annotations
# If set, this will apply to all milvus components
labels: {}
annotations: {}
# Extra configs for milvus.yaml
# If set, this config will merge into milvus.yaml
# Please follow the config structure in the milvus.yaml
# at https://github.com/milvus-io/milvus/blob/master/configs/milvus.yaml
# Note: this config will be the top priority which will override the config
# in the image and helm chart.
extraConfigFiles:
user.yaml: |+
# For example enable rest http for milvus proxy
# proxy:
# http:
# enabled: true
## Expose the Milvus service to be accessed from outside the cluster (LoadBalancer service).
## or access it from within the cluster (ClusterIP service). Set the service type and the port to serve it.
## ref: http://kubernetes.io/docs/user-guide/services/
##
service:
type: ClusterIP
port: 19530
portName: milvus
nodePort: ""
annotations: {}
labels: {}
## List of IP addresses at which the Milvus service is available
## Ref: https://kubernetes.io/docs/user-guide/services/#external-ips
##
externalIPs: []
# - externalIp1
# LoadBalancerSourcesRange is a list of allowed CIDR values, which are combined with ServicePort to
# set allowed inbound rules on the security group assigned to the master load balancer
loadBalancerSourceRanges:
- 0.0.0.0/0
# Optionally assign a known public LB IP
# loadBalancerIP: 1.2.3.4
ingress:
enabled: false
annotations:
# Annotation example: set nginx ingress type
# kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/backend-protocol: GRPC
nginx.ingress.kubernetes.io/listen-ports-ssl: '[19530]'
nginx.ingress.kubernetes.io/proxy-body-size: 4m
nginx.ingress.kubernetes.io/ssl-redirect: "true"
labels: {}
rules:
- host: "milvus-example.local"
path: "/"
pathType: "Prefix"
# - host: "milvus-example2.local"
# path: "/otherpath"
# pathType: "Prefix"
tls: []
# - secretName: chart-example-tls
# hosts:
# - milvus-example.local
serviceAccount:
create: false
name:
annotations:
labels:
metrics:
enabled: true
serviceMonitor:
# Set this to `true` to create ServiceMonitor for Prometheus operator
enabled: false
interval: "30s"
scrapeTimeout: "10s"
# Additional labels that can be used so ServiceMonitor will be discovered by Prometheus
additionalLabels: {}
livenessProbe:
enabled: true
initialDelaySeconds: 90
periodSeconds: 30
timeoutSeconds: 5
successThreshold: 1
failureThreshold: 5
readinessProbe:
enabled: true
initialDelaySeconds: 90
periodSeconds: 10
timeoutSeconds: 5
successThreshold: 1
failureThreshold: 5
log:
level: "info"
file:
maxSize: 300 # MB
maxAge: 10 # day
maxBackups: 20
format: "text" # text/json
persistence:
mountPath: "/milvus/logs"
## If true, create/use a Persistent Volume Claim
## If false, use emptyDir
##
enabled: false
annotations:
helm.sh/resource-policy: keep
persistentVolumeClaim:
existingClaim: ""
## Milvus Logs Persistent Volume Storage Class
## If defined, storageClassName: <storageClass>
## If set to "-", storageClassName: "", which disables dynamic provisioning
## If undefined (the default) or set to null, no storageClassName spec is
## set, choosing the default provisioner.
## ReadWriteMany access mode required for milvus cluster.
##
storageClass:
accessModes: ReadWriteMany
size: 10Gi
subPath: ""
## Heaptrack traces all memory allocations and annotates these events with stack traces.
## See more: https://github.com/KDE/heaptrack
## Enable heaptrack in production is not recommended.
heaptrack:
image:
repository: milvusdb/heaptrack
tag: v0.1.0
pullPolicy: IfNotPresent
standalone:
replicas: 1 # Run standalone mode with replication disabled
resources: {}
# Set local storage size in resources
# limits:
# ephemeral-storage: 100Gi
nodeSelector: {}
affinity: {}
tolerations: []
extraEnv: []
heaptrack:
enabled: false
disk:
enabled: true
size:
enabled: false # Enable local storage size limit
profiling:
enabled: false # Enable live profiling
## Default message queue for milvus standalone
## Supported value: rocksmq, pulsar and kafka
messageQueue: rocksmq
persistence:
mountPath: "/var/lib/milvus"
## If true, alertmanager will create/use a Persistent Volume Claim
## If false, use emptyDir
##
enabled: true
annotations:
helm.sh/resource-policy: keep
persistentVolumeClaim:
existingClaim: ""
## Milvus Persistent Volume Storage Class
## If defined, storageClassName: <storageClass>
## If set to "-", storageClassName: "", which disables dynamic provisioning
## If undefined (the default) or set to null, no storageClassName spec is
## set, choosing the default provisioner.
##
storageClass:
accessModes: ReadWriteOnce
size: 50Gi
subPath: ""
proxy:
enabled: true
replicas: 1
resources: {}
nodeSelector: {}
affinity: {}
tolerations: []
extraEnv: []
heaptrack:
enabled: false
profiling:
enabled: false # Enable live profiling
http:
enabled: true # whether to enable http rest server
debugMode:
enabled: false
rootCoordinator:
enabled: true
# You can set the number of replicas greater than 1, only if enable active standby
replicas: 1 # Run Root Coordinator mode with replication disabled
resources: {}
nodeSelector: {}
affinity: {}
tolerations: []
extraEnv: []
heaptrack:
enabled: false
profiling:
enabled: false # Enable live profiling
activeStandby:
enabled: false # Enable active-standby when you set multiple replicas for root coordinator
service:
port: 53100
annotations: {}
labels: {}
clusterIP: ""
queryCoordinator:
enabled: true
# You can set the number of replicas greater than 1, only if enable active standby
replicas: 1 # Run Query Coordinator mode with replication disabled
resources: {}
nodeSelector: {}
affinity: {}
tolerations: []
extraEnv: []
heaptrack:
enabled: false
profiling:
enabled: false # Enable live profiling
activeStandby:
enabled: false # Enable active-standby when you set multiple replicas for query coordinator
service:
port: 19531
annotations: {}
labels: {}
clusterIP: ""
queryNode:
enabled: true
replicas: 1
resources: {}
# Set local storage size in resources
# limits:
# ephemeral-storage: 100Gi
nodeSelector: {}
affinity: {}
tolerations: []
extraEnv: []
heaptrack:
enabled: false
disk:
enabled: true # Enable querynode load disk index, and search on disk index
size:
enabled: false # Enable local storage size limit
profiling:
enabled: false # Enable live profiling
indexCoordinator:
enabled: true
# You can set the number of replicas greater than 1, only if enable active standby
replicas: 1 # Run Index Coordinator mode with replication disabled
resources: {}
nodeSelector: {}
affinity: {}
tolerations: []
extraEnv: []
heaptrack:
enabled: false
profiling:
enabled: false # Enable live profiling
activeStandby:
enabled: false # Enable active-standby when you set multiple replicas for index coordinator
service:
port: 31000
annotations: {}
labels: {}
clusterIP: ""
indexNode:
enabled: true
replicas: 1
resources: {}
# Set local storage size in resources
# limits:
# ephemeral-storage: 100Gi
nodeSelector: {}
affinity: {}
tolerations: []
extraEnv: []
heaptrack:
enabled: false
profiling:
enabled: false # Enable live profiling
disk:
enabled: true # Enable index node build disk vector index
size:
enabled: false # Enable local storage size limit
dataCoordinator:
enabled: true
# You can set the number of replicas greater than 1, only if enable active standby
replicas: 1 # Run Data Coordinator mode with replication disabled
resources: {}
nodeSelector: {}
affinity: {}
tolerations: []
extraEnv: []
heaptrack:
enabled: false
profiling:
enabled: true # Enable live profiling
activeStandby:
enabled: false # Enable active-standby when you set multiple replicas for data coordinator
service:
port: 13333
annotations: {}
labels: {}
clusterIP: ""
dataNode:
enabled: true
replicas: 1
resources: {}
nodeSelector: {}
affinity: {}
tolerations: []
extraEnv: []
heaptrack:
enabled: false
profiling:
enabled: false # Enable live profiling
## mixCoordinator contains all coord
## If you want to use mixcoord, enable this and disable all of other coords
mixCoordinator:
enabled: false
# You can set the number of replicas greater than 1, only if enable active standby
replicas: 1 # Run Mixture Coordinator mode with replication disabled
resources: {}
nodeSelector: {}
affinity: {}
tolerations: []
extraEnv: []
heaptrack:
enabled: false
profiling:
enabled: false # Enable live profiling
activeStandby:
enabled: false # Enable active-standby when you set multiple replicas for Mixture coordinator
service:
annotations: {}
labels: {}
clusterIP: ""
attu:
enabled: false
name: attu
image:
repository: zilliz/attu
tag: v2.2.8
pullPolicy: IfNotPresent
service:
annotations: {}
labels: {}
type: ClusterIP
port: 3000
# loadBalancerIP: ""
resources: {}
ingress:
enabled: false
annotations: {}
# Annotation example: set nginx ingress type
# kubernetes.io/ingress.class: nginx
labels: {}
hosts:
- milvus-attu.local
tls: []
# - secretName: chart-attu-tls
# hosts:
# - milvus-attu.local
## Configuration values for the minio dependency
## ref: https://github.com/minio/charts/blob/master/README.md
##
minio:
enabled: true
name: minio
mode: distributed
image:
tag: "RELEASE.2023-03-20T20-16-18Z"
pullPolicy: IfNotPresent
accessKey: minioadmin
secretKey: minioadmin
existingSecret: ""
bucketName: "milvus-bucket"
rootPath: file
useIAM: false
iamEndpoint: ""
podDisruptionBudget:
enabled: false
resources:
requests:
memory: 2Gi
gcsgateway:
enabled: false
replicas: 1
gcsKeyJson: "/etc/credentials/gcs_key.json"
projectId: ""
service:
type: ClusterIP
port: 9000
persistence:
enabled: true
existingClaim: ""
storageClass:
accessMode: ReadWriteOnce
size: 500Gi
livenessProbe:
enabled: true
initialDelaySeconds: 5
periodSeconds: 5
timeoutSeconds: 5
successThreshold: 1
failureThreshold: 5
readinessProbe:
enabled: true
initialDelaySeconds: 5
periodSeconds: 5
timeoutSeconds: 1
successThreshold: 1
failureThreshold: 5
startupProbe:
enabled: true
initialDelaySeconds: 0
periodSeconds: 10
timeoutSeconds: 5
successThreshold: 1
failureThreshold: 60
## Configuration values for the etcd dependency
## ref: https://artifacthub.io/packages/helm/bitnami/etcd
##
etcd:
enabled: true
name: etcd
replicaCount: 3
pdb:
create: false
image:
repository: "milvusdb/etcd"
tag: "3.5.5-r2"
pullPolicy: IfNotPresent
service:
type: ClusterIP
port: 2379
peerPort: 2380
auth:
rbac:
enabled: false
persistence:
enabled: true
storageClass:
accessMode: ReadWriteOnce
size: 10Gi
## Enable auto compaction
## compaction by every 1000 revision
##
autoCompactionMode: revision
autoCompactionRetention: "1000"
## Increase default quota to 4G
##
extraEnvVars:
- name: ETCD_QUOTA_BACKEND_BYTES
value: "4294967296"
- name: ETCD_HEARTBEAT_INTERVAL
value: "500"
- name: ETCD_ELECTION_TIMEOUT
value: "2500"
## Configuration values for the pulsar dependency
## ref: https://github.com/apache/pulsar-helm-chart
##
pulsar:
enabled: true
name: pulsar
fullnameOverride: ""
persistence: true
maxMessageSize: 5242880 # 5 * 1024 * 1024 Bytes, Maximum size of each message in pulsar.
rbac:
enabled: false
psp: false
limit_to_namespace: true
affinity:
anti_affinity: false
## enableAntiAffinity: no
components:
zookeeper: true
bookkeeper: true
# bookkeeper - autorecovery
autorecovery: true
broker: true
functions: false
proxy: true
toolset: false
pulsar_manager: false
monitoring:
prometheus: false
grafana: false
node_exporter: false
alert_manager: false
images:
broker:
repository: apachepulsar/pulsar
pullPolicy: IfNotPresent
tag: 2.8.2
autorecovery:
repository: apachepulsar/pulsar
tag: 2.8.2
pullPolicy: IfNotPresent
zookeeper:
repository: apachepulsar/pulsar
pullPolicy: IfNotPresent
tag: 2.8.2
bookie:
repository: apachepulsar/pulsar
pullPolicy: IfNotPresent
tag: 2.8.2
proxy:
repository: apachepulsar/pulsar
pullPolicy: IfNotPresent
tag: 2.8.2
pulsar_manager:
repository: apachepulsar/pulsar-manager
pullPolicy: IfNotPresent
tag: v0.1.0
zookeeper:
resources:
requests:
memory: 1024Mi
cpu: 0.3
configData:
PULSAR_MEM: >
-Xms1024m
-Xmx1024m
PULSAR_GC: >
-Dcom.sun.management.jmxremote
-Djute.maxbuffer=10485760
-XX:+ParallelRefProcEnabled
-XX:+UnlockExperimentalVMOptions
-XX:+DoEscapeAnalysis
-XX:+DisableExplicitGC
-XX:+PerfDisableSharedMem
-Dzookeeper.forceSync=no
pdb:
usePolicy: false
bookkeeper:
replicaCount: 3
volumes:
journal:
name: journal
size: 100Gi
ledgers:
name: ledgers
size: 200Gi
resources:
requests:
memory: 2048Mi
cpu: 1
configData:
PULSAR_MEM: >
-Xms4096m
-Xmx4096m
-XX:MaxDirectMemorySize=8192m
PULSAR_GC: >
-Dio.netty.leakDetectionLevel=disabled
-Dio.netty.recycler.linkCapacity=1024
-XX:+UseG1GC -XX:MaxGCPauseMillis=10
-XX:+ParallelRefProcEnabled
-XX:+UnlockExperimentalVMOptions
-XX:+DoEscapeAnalysis
-XX:ParallelGCThreads=32
-XX:ConcGCThreads=32
-XX:G1NewSizePercent=50
-XX:+DisableExplicitGC
-XX:-ResizePLAB
-XX:+ExitOnOutOfMemoryError
-XX:+PerfDisableSharedMem
-XX:+PrintGCDetails
nettyMaxFrameSizeBytes: "104867840"
pdb:
usePolicy: false
broker:
component: broker
podMonitor:
enabled: false
replicaCount: 1
resources:
requests:
memory: 4096Mi
cpu: 1.5
configData:
PULSAR_MEM: >
-Xms4096m
-Xmx4096m
-XX:MaxDirectMemorySize=8192m
PULSAR_GC: >
-Dio.netty.leakDetectionLevel=disabled
-Dio.netty.recycler.linkCapacity=1024
-XX:+ParallelRefProcEnabled
-XX:+UnlockExperimentalVMOptions
-XX:+DoEscapeAnalysis
-XX:ParallelGCThreads=32
-XX:ConcGCThreads=32
-XX:G1NewSizePercent=50
-XX:+DisableExplicitGC
-XX:-ResizePLAB
-XX:+ExitOnOutOfMemoryError
maxMessageSize: "104857600"
defaultRetentionTimeInMinutes: "10080"
defaultRetentionSizeInMB: "-1"
backlogQuotaDefaultLimitGB: "8"
ttlDurationDefaultInSeconds: "259200"
subscriptionExpirationTimeMinutes: "3"
backlogQuotaDefaultRetentionPolicy: producer_exception
pdb:
usePolicy: false
autorecovery:
resources:
requests:
memory: 512Mi
cpu: 1
proxy:
replicaCount: 1
podMonitor:
enabled: false
resources:
requests:
memory: 2048Mi
cpu: 1
service:
type: ClusterIP
ports:
pulsar: 6650
configData:
PULSAR_MEM: >
-Xms2048m -Xmx2048m
PULSAR_GC: >
-XX:MaxDirectMemorySize=2048m
httpNumThreads: "100"
pdb:
usePolicy: false
pulsar_manager:
service:
type: ClusterIP
pulsar_metadata:
component: pulsar-init
image:
# the image used for running `pulsar-cluster-initialize` job
repository: apachepulsar/pulsar
tag: 2.8.2
## Configuration values for the kafka dependency
## ref: https://artifacthub.io/packages/helm/bitnami/kafka
##
kafka:
enabled: false
name: kafka
replicaCount: 3
image:
repository: bitnami/kafka
tag: 3.1.0-debian-10-r52
## Increase graceful termination for kafka graceful shutdown
terminationGracePeriodSeconds: "90"
pdb:
create: false
## Enable startup probe to prevent pod restart during recovering
startupProbe:
enabled: true
## Kafka Java Heap size
heapOpts: "-Xmx4096m -Xms4096m"
maxMessageBytes: _10485760
defaultReplicationFactor: 3
offsetsTopicReplicationFactor: 3
## Only enable time based log retention
logRetentionHours: 168
logRetentionBytes: _-1
extraEnvVars:
- name: KAFKA_CFG_MAX_PARTITION_FETCH_BYTES
value: "5242880"
- name: KAFKA_CFG_MAX_REQUEST_SIZE
value: "5242880"
- name: KAFKA_CFG_REPLICA_FETCH_MAX_BYTES
value: "10485760"
- name: KAFKA_CFG_FETCH_MESSAGE_MAX_BYTES
value: "5242880"
- name: KAFKA_CFG_LOG_ROLL_HOURS
value: "24"
persistence:
enabled: true
storageClass:
accessMode: ReadWriteOnce
size: 300Gi
metrics:
## Prometheus Kafka exporter: exposes complimentary metrics to JMX exporter
kafka:
enabled: false
image:
repository: bitnami/kafka-exporter
tag: 1.4.2-debian-10-r182
## Prometheus JMX exporter: exposes the majority of Kafkas metrics
jmx:
enabled: false
image:
repository: bitnami/jmx-exporter
tag: 0.16.1-debian-10-r245
## To enable serviceMonitor, you must enable either kafka exporter or jmx exporter.
## And you can enable them both
serviceMonitor:
enabled: false
service:
type: ClusterIP
ports:
client: 9092
zookeeper:
enabled: true
replicaCount: 3
## Configuration values for the mysql dependency
## ref: https://artifacthub.io/packages/helm/bitnami/mysql
##
## MySQL used for meta store is testing internally
mysql:
enabled: false
name: mysql
image:
repository: bitnami/mysql
tag: 8.0.23-debian-10-r84
architecture: replication
auth:
rootPassword: "ChangeMe"
createDatabase: true
database: "milvus_meta"
maxOpenConns: 20
maxIdleConns: 5
primary:
name: primary
resources:
limits: {}
requests: {}
persistence:
enabled: true
storageClass: ""
accessModes:
- ReadWriteOnce
size: 100Gi
secondary:
name: secondary
replicaCount: 1
resources:
limits: {}
requests: {}
persistence:
enabled: true
storageClass: ""
accessModes:
- ReadWriteOnce
size: 100Gi
###################################
# External S3
# - these configs are only used when `externalS3.enabled` is true
###################################
externalS3:
enabled: false
host: ""
port: ""
accessKey: ""
secretKey: ""
useSSL: false
bucketName: ""
rootPath: ""
useIAM: false
cloudProvider: "aws"
iamEndpoint: ""
###################################
# GCS Gateway
# - these configs are only used when `minio.gcsgateway.enabled` is true
###################################
externalGcs:
bucketName: ""
###################################
# External etcd
# - these configs are only used when `externalEtcd.enabled` is true
###################################
externalEtcd:
enabled: false
## the endpoints of the external etcd
##
endpoints:
- localhost:2379
###################################
# External pulsar
# - these configs are only used when `externalPulsar.enabled` is true
###################################
externalPulsar:
enabled: false
host: localhost
port: 6650
maxMessageSize: 5242880 # 5 * 1024 * 1024 Bytes, Maximum size of each message in pulsar.
tenant: public
namespace: default
authPlugin: ""
authParams: ""
###################################
# External kafka
# - these configs are only used when `externalKafka.enabled` is true
###################################
externalKafka:
enabled: false
brokerList: localhost:9092
securityProtocol: SASL_SSL
sasl:
mechanisms: PLAIN
username: ""
password: ""
###################################
# External mysql
# - these configs are only used when `externalMysql.enabled` is true
###################################
externalMysql:
enabled: false
username: ""
password: ""
address: localhost
port: 3306
dbName: milvus_meta
maxOpenConns: 20
maxIdleConns: 5
milvus_manifest.yaml 默认配置
---
# Source: milvus/charts/minio/templates/serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: "my-release-minio"
namespace: "default"
labels:
app: minio
chart: minio-8.0.17
release: "my-release"
---
# Source: milvus/charts/minio/templates/secrets.yaml
apiVersion: v1
kind: Secret
metadata:
name: my-release-minio
labels:
app: minio
chart: minio-8.0.17
release: my-release
heritage: Helm
type: Opaque
data:
accesskey: "bWluaW9hZG1pbg=="
secretkey: "bWluaW9hZG1pbg=="
---
# Source: milvus/charts/minio/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: my-release-minio
labels:
app: minio
chart: minio-8.0.17
release: my-release
heritage: Helm
data:
initialize: |-
#!/bin/sh
set -e ; # Have script exit in the event of a failed command.
MC_CONFIG_DIR="/etc/minio/mc/"
MC="/usr/bin/mc --insecure --config-dir ${MC_CONFIG_DIR}"
# connectToMinio
# Use a check-sleep-check loop to wait for Minio service to be available
connectToMinio() {
SCHEME=$1
ATTEMPTS=0 ; LIMIT=29 ; # Allow 30 attempts
set -e ; # fail if we can't read the keys.
ACCESS=$(cat /config/accesskey) ; SECRET=$(cat /config/secretkey) ;
set +e ; # The connections to minio are allowed to fail.
echo "Connecting to Minio server: $SCHEME://$MINIO_ENDPOINT:$MINIO_PORT" ;
MC_COMMAND="${MC} config host add myminio $SCHEME://$MINIO_ENDPOINT:$MINIO_PORT $ACCESS $SECRET" ;
$MC_COMMAND ;
STATUS=$? ;
until [ $STATUS = 0 ]
do
ATTEMPTS=`expr $ATTEMPTS + 1` ;
echo \"Failed attempts: $ATTEMPTS\" ;
if [ $ATTEMPTS -gt $LIMIT ]; then
exit 1 ;
fi ;
sleep 2 ; # 1 second intervals between attempts
$MC_COMMAND ;
STATUS=$? ;
done ;
set -e ; # reset `e` as active
return 0
}
# checkBucketExists ($bucket)
# Check if the bucket exists, by using the exit code of `mc ls`
checkBucketExists() {
BUCKET=$1
CMD=$(${MC} ls myminio/$BUCKET > /dev/null 2>&1)
return $?
}
# createBucket ($bucket, $policy, $purge)
# Ensure bucket exists, purging if asked to
createBucket() {
BUCKET=$1
POLICY=$2
PURGE=$3
VERSIONING=$4
# Purge the bucket, if set & exists
# Since PURGE is user input, check explicitly for `true`
if [ $PURGE = true ]; then
if checkBucketExists $BUCKET ; then
echo "Purging bucket '$BUCKET'."
set +e ; # don't exit if this fails
${MC} rm -r --force myminio/$BUCKET
set -e ; # reset `e` as active
else
echo "Bucket '$BUCKET' does not exist, skipping purge."
fi
fi
# Create the bucket if it does not exist
if ! checkBucketExists $BUCKET ; then
echo "Creating bucket '$BUCKET'"
${MC} mb myminio/$BUCKET
else
echo "Bucket '$BUCKET' already exists."
fi
# set versioning for bucket
if [ ! -z $VERSIONING ] ; then
if [ $VERSIONING = true ] ; then
echo "Enabling versioning for '$BUCKET'"
${MC} version enable myminio/$BUCKET
elif [ $VERSIONING = false ] ; then
echo "Suspending versioning for '$BUCKET'"
${MC} version suspend myminio/$BUCKET
fi
else
echo "Bucket '$BUCKET' versioning unchanged."
fi
# At this point, the bucket should exist, skip checking for existence
# Set policy on the bucket
echo "Setting policy of bucket '$BUCKET' to '$POLICY'."
${MC} policy set $POLICY myminio/$BUCKET
}
# Try connecting to Minio instance
scheme=http
connectToMinio $scheme
---
# Source: milvus/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: my-release-milvus
data:
default.yaml: |+
# Copyright (C) 2019-2021 Zilliz. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software distributed under the License
# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
# or implied. See the License for the specific language governing permissions and limitations under the License.
etcd:
endpoints:
- my-release-etcd:2379
metastore:
type: etcd
minio:
address: my-release-minio
port: 9000
accessKeyID: minioadmin
secretAccessKey: minioadmin
useSSL: false
bucketName: milvus-bucket
rootPath: file
useIAM: false
iamEndpoint:
region:
useVirtualHost: false
mq:
type: rocksmq
messageQueue: rocksmq
rootCoord:
address: localhost
port: 53100
enableActiveStandby: false # Enable rootcoord active-standby
proxy:
port: 19530
internalPort: 19529
queryCoord:
address: localhost
port: 19531
enableActiveStandby: false # Enable querycoord active-standby
queryNode:
port: 21123
enableDisk: true # Enable querynode load disk index, and search on disk index
indexCoord:
address: localhost
port: 31000
enableActiveStandby: false # Enable indexcoord active-standby
indexNode:
port: 21121
enableDisk: true # Enable index node build disk vector index
dataCoord:
address: localhost
port: 13333
enableActiveStandby: false # Enable datacoord active-standby
dataNode:
port: 21124
log:
level: info
file:
rootPath: ""
maxSize: 300
maxAge: 10
maxBackups: 20
format: text
user.yaml: |-
# For example enable rest http for milvus proxy
# proxy:
# http:
# enabled: true
---
# Source: milvus/charts/minio/templates/pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-release-minio
annotations:
helm.sh/resource-policy: keep
labels:
app: minio
chart: minio-8.0.17
release: my-release
heritage: Helm
spec:
accessModes:
- "ReadWriteOnce"
resources:
requests:
storage: "500Gi"
---
# Source: milvus/templates/pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-release-milvus
annotations:
helm.sh/resource-policy: keep
labels:
helm.sh/chart: milvus-4.1.8
app.kubernetes.io/name: milvus
app.kubernetes.io/instance: my-release
app.kubernetes.io/version: "2.3.2"
app.kubernetes.io/managed-by: Helm
spec:
accessModes:
- "ReadWriteOnce"
resources:
requests:
storage: 50Gi
---
# Source: milvus/charts/etcd/templates/svc-headless.yaml
apiVersion: v1
kind: Service
metadata:
name: my-release-etcd-headless
namespace: default
labels:
app.kubernetes.io/name: etcd
helm.sh/chart: etcd-6.3.3
app.kubernetes.io/instance: my-release
app.kubernetes.io/managed-by: Helm
annotations:
service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
spec:
type: ClusterIP
clusterIP: None
publishNotReadyAddresses: true
ports:
- name: "client"
port: 2379
targetPort: client
- name: "peer"
port: 2380
targetPort: peer
selector:
app.kubernetes.io/name: etcd
app.kubernetes.io/instance: my-release
---
# Source: milvus/charts/etcd/templates/svc.yaml
apiVersion: v1
kind: Service
metadata:
name: my-release-etcd
namespace: default
labels:
app.kubernetes.io/name: etcd
helm.sh/chart: etcd-6.3.3
app.kubernetes.io/instance: my-release
app.kubernetes.io/managed-by: Helm
annotations:
spec:
type: ClusterIP
ports:
- name: "client"
port: 2379
targetPort: client
nodePort: null
- name: "peer"
port: 2380
targetPort: peer
nodePort: null
selector:
app.kubernetes.io/name: etcd
app.kubernetes.io/instance: my-release
---
# Source: milvus/charts/minio/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
name: my-release-minio
labels:
app: minio
chart: minio-8.0.17
release: my-release
heritage: Helm
spec:
type: ClusterIP
ports:
- name: http
port: 9000
protocol: TCP
targetPort: 9000
selector:
app: minio
release: my-release
---
# Source: milvus/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
name: my-release-milvus
labels:
helm.sh/chart: milvus-4.1.8
app.kubernetes.io/name: milvus
app.kubernetes.io/instance: my-release
app.kubernetes.io/version: "2.3.2"
app.kubernetes.io/managed-by: Helm
component: "standalone"
spec:
type: ClusterIP
ports:
- name: milvus
port: 19530
protocol: TCP
targetPort: milvus
- name: metrics
protocol: TCP
port: 9091
targetPort: metrics
selector:
app.kubernetes.io/name: milvus
app.kubernetes.io/instance: my-release
component: "standalone"
---
# Source: milvus/charts/minio/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-release-minio
labels:
app: minio
chart: minio-8.0.17
release: my-release
heritage: Helm
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 100%
maxUnavailable: 0
selector:
matchLabels:
app: minio
release: my-release
template:
metadata:
name: my-release-minio
labels:
app: minio
release: my-release
annotations:
checksum/secrets: aa3f4f64eb45653d3fee45079a6e55a9869ce76297baa50df3bc33192434d05e
checksum/config: ed4d4467dd70f3e0ed89e5d2bc3c4414b02a52fcf7db7f1b66b675b9016664a7
spec:
serviceAccountName: "my-release-minio"
securityContext:
runAsUser: 1000
runAsGroup: 1000
fsGroup: 1000
containers:
- name: minio
image: "minio/minio:RELEASE.2023-03-20T20-16-18Z"
imagePullPolicy: IfNotPresent
command:
- "/bin/sh"
- "-ce"
- "/usr/bin/docker-entrypoint.sh minio -S /etc/minio/certs/ server /export"
volumeMounts:
- name: export
mountPath: /export
ports:
- name: http
containerPort: 9000
livenessProbe:
httpGet:
path: /minio/health/live
port: http
scheme: HTTP
initialDelaySeconds: 5
periodSeconds: 5
timeoutSeconds: 5
successThreshold: 1
failureThreshold: 5
readinessProbe:
tcpSocket:
port: http
initialDelaySeconds: 5
periodSeconds: 5
timeoutSeconds: 1
successThreshold: 1
failureThreshold: 5
startupProbe:
tcpSocket:
port: http
initialDelaySeconds: 0
periodSeconds: 10
timeoutSeconds: 5
successThreshold: 1
failureThreshold: 60
env:
- name: MINIO_ACCESS_KEY
valueFrom:
secretKeyRef:
name: my-release-minio
key: accesskey
- name: MINIO_SECRET_KEY
valueFrom:
secretKeyRef:
name: my-release-minio
key: secretkey
resources:
requests:
memory: 2Gi
volumes:
- name: export
persistentVolumeClaim:
claimName: my-release-minio
- name: minio-user
secret:
secretName: my-release-minio
---
# Source: milvus/templates/standalone-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-release-milvus-standalone
labels:
helm.sh/chart: milvus-4.1.8
app.kubernetes.io/name: milvus
app.kubernetes.io/instance: my-release
app.kubernetes.io/version: "2.3.2"
app.kubernetes.io/managed-by: Helm
component: "standalone"
annotations:
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app.kubernetes.io/name: milvus
app.kubernetes.io/instance: my-release
component: "standalone"
template:
metadata:
labels:
app.kubernetes.io/name: milvus
app.kubernetes.io/instance: my-release
component: "standalone"
annotations:
checksum/config: bc6a7e82027efa3ad0df3b00d07c3ad1dcc40d7665f314e6d13a000fdd26aec2
spec:
serviceAccountName: default
initContainers:
- name: config
command:
- /cp
- /run-helm.sh,/merge
- /milvus/tools/run-helm.sh,/milvus/tools/merge
image: "milvusdb/milvus-config-tool:v0.1.1"
imagePullPolicy: IfNotPresent
volumeMounts:
- mountPath: /milvus/tools
name: tools
containers:
- name: standalone
image: "milvusdb/milvus:v2.3.2"
imagePullPolicy: IfNotPresent
args: [ "/milvus/tools/run-helm.sh", "milvus", "run", "standalone" ]
ports:
- name: milvus
containerPort: 19530
protocol: TCP
- name: metrics
containerPort: 9091
protocol: TCP
livenessProbe:
httpGet:
path: /healthz
port: metrics
initialDelaySeconds: 90
periodSeconds: 30
timeoutSeconds: 5
successThreshold: 1
failureThreshold: 5
readinessProbe:
httpGet:
path: /healthz
port: metrics
initialDelaySeconds: 90
periodSeconds: 10
timeoutSeconds: 5
successThreshold: 1
failureThreshold: 5
resources:
{}
env:
volumeMounts:
- mountPath: /milvus/tools
name: tools
- name: milvus-config
mountPath: /milvus/configs/default.yaml
subPath: default.yaml
readOnly: true
- name: milvus-config
mountPath: /milvus/configs/user.yaml
subPath: user.yaml
readOnly: true
- name: milvus-data-disk
mountPath: "/var/lib/milvus"
subPath:
- mountPath: /var/lib/milvus/data
name: disk
volumes:
- emptyDir: {}
name: tools
- name: milvus-config
configMap:
name: my-release-milvus
- name: milvus-data-disk
persistentVolumeClaim:
claimName: my-release-milvus
- name: disk
emptyDir: {}
---
# Source: milvus/charts/etcd/templates/statefulset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: my-release-etcd
namespace: default
labels:
app.kubernetes.io/name: etcd
helm.sh/chart: etcd-6.3.3
app.kubernetes.io/instance: my-release
app.kubernetes.io/managed-by: Helm
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: etcd
app.kubernetes.io/instance: my-release
serviceName: my-release-etcd-headless
podManagementPolicy: Parallel
updateStrategy:
type: RollingUpdate
template:
metadata:
labels:
app.kubernetes.io/name: etcd
helm.sh/chart: etcd-6.3.3
app.kubernetes.io/instance: my-release
app.kubernetes.io/managed-by: Helm
annotations:
spec:
affinity:
podAffinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- podAffinityTerm:
labelSelector:
matchLabels:
app.kubernetes.io/name: etcd
app.kubernetes.io/instance: my-release
namespaces:
- "default"
topologyKey: kubernetes.io/hostname
weight: 1
nodeAffinity:
securityContext:
fsGroup: 1001
serviceAccountName: "default"
containers:
- name: etcd
image: docker.io/milvusdb/etcd:3.5.5-r2
imagePullPolicy: "IfNotPresent"
securityContext:
runAsNonRoot: true
runAsUser: 1001
env:
- name: BITNAMI_DEBUG
value: "false"
- name: MY_POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: MY_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: ETCDCTL_API
value: "3"
- name: ETCD_ON_K8S
value: "yes"
- name: ETCD_START_FROM_SNAPSHOT
value: "no"
- name: ETCD_DISASTER_RECOVERY
value: "no"
- name: ETCD_NAME
value: "$(MY_POD_NAME)"
- name: ETCD_DATA_DIR
value: "/bitnami/etcd/data"
- name: ETCD_LOG_LEVEL
value: "info"
- name: ALLOW_NONE_AUTHENTICATION
value: "yes"
- name: ETCD_ADVERTISE_CLIENT_URLS
value: "http://$(MY_POD_NAME).my-release-etcd-headless.default.svc.cluster.local:2379"
- name: ETCD_LISTEN_CLIENT_URLS
value: "http://0.0.0.0:2379"
- name: ETCD_INITIAL_ADVERTISE_PEER_URLS
value: "http://$(MY_POD_NAME).my-release-etcd-headless.default.svc.cluster.local:2380"
- name: ETCD_LISTEN_PEER_URLS
value: "http://0.0.0.0:2380"
- name: ETCD_AUTO_COMPACTION_MODE
value: "revision"
- name: ETCD_AUTO_COMPACTION_RETENTION
value: "1000"
- name: ETCD_QUOTA_BACKEND_BYTES
value: "4294967296"
- name: ETCD_HEARTBEAT_INTERVAL
value: "500"
- name: ETCD_ELECTION_TIMEOUT
value: "2500"
envFrom:
ports:
- name: client
containerPort: 2379
protocol: TCP
- name: peer
containerPort: 2380
protocol: TCP
livenessProbe:
exec:
command:
- /opt/bitnami/scripts/etcd/healthcheck.sh
initialDelaySeconds: 60
periodSeconds: 30
timeoutSeconds: 10
successThreshold: 1
failureThreshold: 5
readinessProbe:
exec:
command:
- /opt/bitnami/scripts/etcd/healthcheck.sh
initialDelaySeconds: 60
periodSeconds: 20
timeoutSeconds: 10
successThreshold: 1
failureThreshold: 5
resources:
limits: {}
requests: {}
volumeMounts:
- name: data
mountPath: /bitnami/etcd
volumes:
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes:
- "ReadWriteOnce"
resources:
requests:
storage: "10Gi"