Skip to content

Commit 9c81483

Browse files
authored
fix: add sealed secrets (#503)
* fix: db password & milvus secret * fix: milvus start error * fix: node isolation tolerations for all scenarios - Makefile: move args file cleanup from datamate target to install target - Makefile: milvus can now source /tmp/datamate-helm-args.sh before cleanup - scripts/k8s/node-setup.sh: export HELM_MILVUS_TOLERATIONS in skip path - deployment/helm/milvus/values.yaml: default tolerations to [] (no isolation) Root cause: /tmp/datamate-helm-args.sh deleted in datamate-k8s-install, before milvus-k8s-install could source it. When node isolation was active, milvus received no tolerations and pods couldn't schedule on tainted nodes. Also: Milvus chart had hardcoded tolerations (anchored YAML reference), causing SchedulingDisabled even without node isolation configured. Now supports all 4 scenarios: - Open source + no isolation → no tolerations, any node (default) ✅ - Open source + isolation → tolerations applied to datamate + milvus ✅ - Commercial + no isolation → no tolerations ✅ - Commercial + isolation → tolerations for sealed-secrets + datamate + milvus ✅ Args file lifecycle: node-setup.sh creates → sealed-secrets sources → datamate sources → milvus sources → install target cleans up * fix: add milvus sub-chart tolerations for etcd and minio - scripts/k8s/node-setup.sh: add etcd.tolerations and minio.tolerations - Sub-charts don't inherit parent chart tolerations in Helm Symptom: milvus-etcd and milvus-minio stuck Pending with '0/1 nodes are available: 1 node(s) had untolerated taint(s)' when node isolation is active Root cause: --set-string tolerations[0]... only sets milvus main chart, but etcd and minio are sub-charts with their own tolerations: [] Fix: generate --set-string etcd.tolerations[0]... and --set-string minio.tolerations[0]... alongside milvus tolerations Note: milvus-standalone CrashLoopBackOff is a Milvus v2.6.5 ARM64 bug (goroutine deadlock in streaming_node_manager), NOT node isolation * fix: remove label by default
1 parent ce3ab33 commit 9c81483

9 files changed

Lines changed: 343 additions & 111 deletions

File tree

Makefile

Lines changed: 31 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,7 @@ ifeq ($(origin INSTALLER), undefined)
233233
else
234234
$(MAKE) datamate-$(INSTALLER)-install
235235
$(MAKE) milvus-$(INSTALLER)-install
236+
@rm -f /tmp/datamate-helm-args.sh
236237
endif
237238

238239
.PHONY: uninstall-%
@@ -357,8 +358,8 @@ VALID_K8S_TARGETS := datamate deer-flow milvus label-studio data-juicer mineru m
357358
exit 1; \
358359
fi
359360
@if [ "$*" = "label-studio" ]; then \
360-
kubectl apply -f deployment/kubernetes/sealed-secrets/label-studio.yaml; \
361-
helm upgrade label-studio deployment/helm/label-studio/ -n $(NAMESPACE) --install; \
361+
if [ -f /tmp/datamate-helm-args.sh ]; then source /tmp/datamate-helm-args.sh; fi; \
362+
helm upgrade label-studio deployment/helm/label-studio/ -n $(NAMESPACE) --install $${HELM_LABEL_STUDIO_TOLERATIONS:-}; \
362363
elif [ "$*" = "mineru" ] || [ "$*" = "mineru-910B" ] || [ "$*" = "mineru-910C" ]; then \
363364
kubectl apply -f deployment/kubernetes/mineru/deploy-910.yaml -n $(NAMESPACE); \
364365
elif [ "$*" = "mineru-310P" ]; then \
@@ -370,32 +371,41 @@ VALID_K8S_TARGETS := datamate deer-flow milvus label-studio data-juicer mineru m
370371
if [ -f /tmp/datamate-helm-args.sh ]; then \
371372
source /tmp/datamate-helm-args.sh; \
372373
fi; \
373-
kubectl apply -f deployment/kubernetes/sealed-secrets/datamate.yaml; \
374-
if [ -n "$$HELM_NODE_SELECTOR_ARGS" ] || [ -n "$$$HELM_TOLERATIONS_ARGS" ]; then \
375-
helm upgrade datamate deployment/helm/datamate/ -n $(NAMESPACE) --install --set global.image.repository=$(REGISTRY) --set public.secrets.create=false $$HELM_NODE_SELECTOR_ARGS $$HELM_TOLERATIONS_ARGS; \
374+
chmod +x scripts/k8s/collect-secrets.sh; \
375+
eval $$(NAMESPACE=$(NAMESPACE) bash scripts/k8s/collect-secrets.sh); \
376+
if [ "$$SECRETS_CREATE" = "SKIP" ]; then \
377+
echo "[SKIP] Secrets collection failed — skipping datamate Helm install"; \
378+
rm -f /tmp/datamate-helm-args.sh; \
379+
exit 0; \
380+
fi; \
381+
if [ -n "$$HELM_VALUES_FILE" ] && [ -f "$$HELM_VALUES_FILE" ]; then \
382+
HELM_EXTRA_ARGS="-f $$HELM_VALUES_FILE"; \
383+
else \
384+
HELM_EXTRA_ARGS=""; \
385+
fi; \
386+
if [ -n "$$HELM_NODE_SELECTOR_ARGS" ] || [ -n "$$HELM_TOLERATIONS_ARGS" ]; then \
387+
helm upgrade datamate deployment/helm/datamate/ -n $(NAMESPACE) --install --force --set global.image.repository=$(REGISTRY) --set public.secrets.create=$$SECRETS_CREATE --set public.persistentVolumeClaim.accessModes=ReadWriteOnce $$HELM_EXTRA_ARGS $$HELM_NODE_SELECTOR_ARGS $$HELM_TOLERATIONS_ARGS; \
376388
else \
377-
helm upgrade datamate deployment/helm/datamate/ -n $(NAMESPACE) --install --set global.image.repository=$(REGISTRY) --set public.secrets.create=false; \
389+
helm upgrade datamate deployment/helm/datamate/ -n $(NAMESPACE) --install --force --set global.image.repository=$(REGISTRY) --set public.secrets.create=$$SECRETS_CREATE --set public.persistentVolumeClaim.accessModes=ReadWriteOnce $$HELM_EXTRA_ARGS; \
378390
fi; \
379-
rm -f /tmp/datamate-helm-args.sh; \
391+
rm -f /tmp/datamate-secret-values-*.yaml; \
380392
elif [ "$*" = "deer-flow" ]; then \
381393
cp runtime/deer-flow/.env deployment/helm/deer-flow/charts/public/.env; \
382394
cp runtime/deer-flow/conf.yaml deployment/helm/deer-flow/charts/public/conf.yaml; \
383395
helm upgrade deer-flow deployment/helm/deer-flow -n $(NAMESPACE) --install --set global.image.repository=$(REGISTRY); \
384396
elif [ "$*" = "milvus" ]; then \
385-
kubectl apply -f deployment/kubernetes/sealed-secrets/milvus.yaml 2>/dev/null || true; \
386-
ACCESSKEY=$$(kubectl get secret milvus-minio-secret -n $(NAMESPACE) -o jsonpath='{.data.accessKey}' 2>/dev/null | base64 -d 2>/dev/null || echo ""); \
387-
SECRETKEY=$$(kubectl get secret milvus-minio-secret -n $(NAMESPACE) -o jsonpath='{.data.secretKey}' 2>/dev/null | base64 -d 2>/dev/null || echo ""); \
388-
if [ -n "$$ACCESSKEY" ] && [ -n "$$SECRETKEY" ]; then \
389-
helm upgrade milvus deployment/helm/milvus -n $(NAMESPACE) --install \
390-
--set minio.accessKey=$$ACCESSKEY \
391-
--set minio.secretKey=$$SECRETKEY; \
392-
else \
393-
echo "[ERROR] milvus-minio-secret not found or empty in namespace $(NAMESPACE)"; \
394-
echo " Please ensure Sealed Secrets Controller is running and the secret was decrypted."; \
395-
echo " For local dev: kubectl create secret generic milvus-minio-secret \\"; \
396-
echo " --from-literal=accessKey=<key> --from-literal=secretKey=<key> -n $(NAMESPACE)"; \
397-
exit 1; \
397+
chmod +x scripts/k8s/collect-secrets.sh; \
398+
bash scripts/k8s/collect-secrets.sh --component milvus -n $(NAMESPACE); \
399+
MILVUS_MINIO_ACCESS_KEY=$$(kubectl get secret milvus-minio-secret -n $(NAMESPACE) -o jsonpath='{.data.accesskey}' | base64 -d); \
400+
MILVUS_MINIO_SECRET_KEY=$$(kubectl get secret milvus-minio-secret -n $(NAMESPACE) -o jsonpath='{.data.secretkey}' | base64 -d); \
401+
if [ -f /tmp/datamate-helm-args.sh ]; then \
402+
source /tmp/datamate-helm-args.sh; \
398403
fi; \
404+
helm upgrade milvus deployment/helm/milvus -n $(NAMESPACE) --install \
405+
--set minio.accessKey="$$MILVUS_MINIO_ACCESS_KEY" \
406+
--set minio.secretKey="$$MILVUS_MINIO_SECRET_KEY" \
407+
--set log.persistence.persistentVolumeClaim.accessModes=ReadWriteOnce \
408+
$$HELM_MILVUS_TOLERATIONS; \
399409
elif [ "$*" = "data-juicer" ] || [ "$*" = "dj" ]; then \
400410
kubectl apply -f deployment/kubernetes/data-juicer/deploy.yaml -n $(NAMESPACE); \
401411
fi
@@ -416,13 +426,8 @@ VALID_K8S_TARGETS := datamate deer-flow milvus label-studio data-juicer mineru m
416426
elif [ "$*" = "mineru-310P" ]; then \
417427
kubectl delete -f deployment/kubernetes/mineru/deploy-310.yaml -n $(NAMESPACE); \
418428
elif [ "$*" = "datamate" ]; then \
419-
echo ""; \
420-
echo "Remove node configuration (labels/taints)? (y/n) [n]"; \
421-
read -p "> " CLEANUP_NODES; \
422-
if [ "$$CLEANUP_NODES" = "y" ] || [ "$$CLEANUP_NODES" = "Y" ]; then \
423-
$(MAKE) node-cleanup; \
424-
fi; \
425429
helm uninstall datamate -n $(NAMESPACE) --ignore-not-found; \
430+
$(MAKE) node-cleanup; \
426431
elif [ "$*" = "deer-flow" ]; then \
427432
helm uninstall deer-flow -n $(NAMESPACE) --ignore-not-found; \
428433
elif [ "$*" = "milvus" ]; then \

deployment/helm/datamate/values.yaml

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,16 @@ public:
5050
database: 1Gi
5151
operator: 1Gi
5252
secrets:
53-
create: false # Managed by SealedSecret (deployment/kubernetes/sealed-secrets/)
53+
# Set to false when using Sealed Secrets (managed by install script)
54+
create: false
5455
data:
55-
DB_PASSWORD: "" # Set via secrets.yaml or --set
56-
CERT_PASS: "" # Set via secrets.yaml for encrypted SSL keys
56+
DB_PASSWORD: "" # Set via install script or --set
57+
CERT_PASS: "" # Set via install script for encrypted SSL keys
5758
DOMAIN: ""
5859
HOME_PAGE_URL: ""
60+
JWT_SECRET: "" # Auto-generated by install script
61+
LABEL_STUDIO_PASSWORD: "" # Set via install script
62+
LABEL_STUDIO_USER_TOKEN: "" # Auto-generated by install script
5963

6064
datasetVolume: &datasetVolume
6165
name: dataset-volume

deployment/helm/label-studio/templates/deployment.yaml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,18 @@ spec:
9191
mountPath: /label-studio/local
9292
resources:
9393
{{- toYaml .Values.resources | nindent 12 }}
94+
{{- with .Values.nodeSelector }}
95+
nodeSelector:
96+
{{- toYaml . | nindent 8 }}
97+
{{- end }}
98+
{{- with .Values.affinity }}
99+
affinity:
100+
{{- toYaml . | nindent 8 }}
101+
{{- end }}
102+
{{- with .Values.tolerations }}
103+
tolerations:
104+
{{- toYaml . | nindent 8 }}
105+
{{- end }}
94106
volumes:
95107
- name: data
96108
persistentVolumeClaim:

deployment/helm/milvus/values.yaml

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,9 @@ fullnameOverride: ""
66

77
## Define toleration for node isolation
88
## This anchor can be referenced throughout the configuration
9-
nodeIsolationTolerations: &nodeIsolationTolerations
10-
- key: "node-role.kubernetes.io/datamate"
11-
operator: "Equal"
12-
value: "true"
13-
effect: "NoSchedule"
9+
## NOTE: Default is empty array - tolerations should be set via Helm --set
10+
## during install if node isolation is configured
11+
nodeIsolationTolerations: &nodeIsolationTolerations []
1412

1513
## Enable or disable Milvus Cluster mode
1614
cluster:
@@ -39,7 +37,9 @@ nodeSelector: {}
3937
# Global tolerations
4038
# If set, this will apply to all milvus components
4139
# Individual components can be set to a different tolerations
42-
tolerations: *nodeIsolationTolerations
40+
# Default: empty (no tolerations) - allows scheduling on any node
41+
# Set via --set tolerations[0].key=... during install if node isolation is needed
42+
tolerations: []
4343

4444
# Global affinity
4545
# If set, this will apply to all milvus components
@@ -219,7 +219,7 @@ log:
219219
## ReadWriteMany access mode required for milvus cluster.
220220
##
221221
storageClass:
222-
accessModes: ReadWriteMany
222+
accessModes: ReadWriteOnce
223223
size: 10Gi
224224
subPath: ""
225225
storagePath:
@@ -617,7 +617,7 @@ attu:
617617
# - secretName: chart-attu-tls
618618
# hosts:
619619
# - milvus-attu.local
620-
620+
621621
route:
622622
enabled: false
623623
host: ""
@@ -645,7 +645,7 @@ minio:
645645
pullPolicy: IfNotPresent
646646
accessKey: "" # Set via secrets.yaml or --set
647647
secretKey: "" # Set via secrets.yaml or --set
648-
existingSecret: ""
648+
existingSecret: milvus-minio-secret
649649
bucketName: "milvus-bucket"
650650
rootPath: file
651651
useIAM: false
@@ -1297,7 +1297,7 @@ kafka:
12971297
zookeeper:
12981298
enabled: true
12991299
replicaCount: 3
1300-
image:
1300+
image:
13011301
repository: bitnamilegacy/zookeeper
13021302
tag: 3.7.0
13031303

deployment/kubernetes/sealed-secrets/datamate.yaml

Lines changed: 0 additions & 27 deletions
This file was deleted.

deployment/kubernetes/sealed-secrets/label-studio.yaml

Lines changed: 0 additions & 23 deletions
This file was deleted.

deployment/kubernetes/sealed-secrets/milvus.yaml

Lines changed: 0 additions & 22 deletions
This file was deleted.

0 commit comments

Comments
 (0)