Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Changelog

## [qdrant-1.20.0](https://github.com/qdrant/qdrant-helm/tree/qdrant-1.20.0) (2026-10-22)

- Update Qdrant to v1.20.0

## [qdrant-1.19.2](https://github.com/qdrant/qdrant-helm/tree/qdrant-1.19.2) (2026-10-06)

- Update Qdrant to v1.19.2
Expand Down
6 changes: 2 additions & 4 deletions charts/qdrant/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
# Changelog

## [qdrant-1.19.2](https://github.com/qdrant/qdrant-helm/tree/qdrant-1.19.2) (2026-10-06)
## [qdrant-1.20.0](https://github.com/qdrant/qdrant-helm/tree/qdrant-1.20.0) (2026-10-22)

- Update Qdrant to v1.19.2
- Support exisiting ServiceAccount [#482](https://github.com/qdrant/qdrant-helm/pull/482)
- Support templating in env valueFrom [#509](https://github.com/qdrant/qdrant-helm/pull/509)
- Update Qdrant to v1.20.0
16 changes: 3 additions & 13 deletions charts/qdrant/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,20 +13,10 @@ maintainers:
url: https://github.com/qdrant
icon: https://qdrant.github.io/qdrant-helm/logo_with_text.svg
type: application
version: 1.19.2
appVersion: v1.19.2
version: 1.20.0
appVersion: v1.20.0
annotations:
artifacthub.io/category: database
artifacthub.io/changes: |
- kind: added
description: Update Qdrant to v1.19.2
- kind: added
description: Support exisiting ServiceAccount
links:
- name: GitHub Pull Request
url: https://github.com/qdrant/qdrant-helm/pull/482
- kind: added
description: Support templating in env valueFrom
links:
- name: GitHub Pull Request
url: https://github.com/qdrant/qdrant-helm/pull/509
description: Update Qdrant to v1.20.0
77 changes: 77 additions & 0 deletions test/integration/multi_node_api_key.bats
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
setup_file() {
# Using a custom namespace to avoid side effects with other tests
kubectl create ns qdrant-multinode-apikey
# No --wait: non-zero peers may crash once if they start before the bootstrap peer is reachable,
# which makes helm's wait fail, while the rollout recovers after the restart.
helm upgrade --install qdrant charts/qdrant -n qdrant-multinode-apikey --set replicaCount=2 --set apiKey=foobar
kubectl rollout status statefulset qdrant -n qdrant-multinode-apikey --timeout 3m
}

@test "all peers join the cluster" {
for i in $(seq 1 30); do
run kubectl exec -n default curl -- curl -s http://qdrant.qdrant-multinode-apikey:6333/cluster -H 'api-key: foobar' --fail-with-body
peers=$(echo "${output}" | grep -o '"uri"' | wc -l)
if [ "${peers}" -eq 2 ]; then
return 0
fi
sleep 2
done
echo "Expected 2 peers, got ${peers}: ${output}"
return 1
}

@test "replicated collection works with internal auth" {
run kubectl exec -n default curl -- curl -s -X PUT http://qdrant.qdrant-multinode-apikey:6333/collections/test_collection -H 'api-key: foobar' -H 'Content-Type: application/json' --fail-with-body \
--data-raw '{"vectors": {"size": 4, "distance": "Dot"}, "shard_number": 2, "replication_factor": 2}'
[ $status -eq 0 ]
[[ "${output}" =~ .*\"status\":\"ok\".* ]]

# Wait until all shard replicas are active on both peers
for i in $(seq 1 30); do
run kubectl exec -n default curl -- curl -s http://qdrant-0.qdrant-headless.qdrant-multinode-apikey:6333/collections/test_collection/cluster -H 'api-key: foobar' --fail-with-body
active=$(echo "${output}" | grep -o '"state":"Active"' | wc -l)
if [ "${active}" -eq 4 ]; then
break
fi
sleep 2
done
[ "${active}" -eq 4 ]

# Writes are forwarded to the replica on the other peer via the internal p2p API
run kubectl exec -n default curl -- curl -s -X PUT "http://qdrant.qdrant-multinode-apikey:6333/collections/test_collection/points?wait=true" -H 'api-key: foobar' -H 'Content-Type: application/json' --fail-with-body \
--data-raw '{"points": [{"id": 1, "vector": [0.05, 0.61, 0.76, 0.74]}, {"id": 2, "vector": [0.19, 0.81, 0.75, 0.11]}, {"id": 3, "vector": [0.36, 0.55, 0.47, 0.94]}]}'
[ $status -eq 0 ]
[[ "${output}" =~ .*\"status\":\"completed\".* ]]

# Every peer holds a full copy and must see all points
for pod in qdrant-0 qdrant-1; do
run kubectl exec -n default curl -- curl -s -X POST "http://${pod}.qdrant-headless.qdrant-multinode-apikey:6333/collections/test_collection/points/count" -H 'api-key: foobar' -H 'Content-Type: application/json' --fail-with-body \
--data-raw '{"exact": true}'
[ $status -eq 0 ]
[[ "${output}" =~ .*\"count\":3.* ]]
done
}

@test "no warnings in logs" {
for pod in qdrant-0 qdrant-1; do
run kubectl logs -n qdrant-multinode-apikey ${pod}
[ $status -eq 0 ]
# Ignore transient connection errors while the other peer is still starting up
warnings=$(echo "${output}" | grep -E "WARN|ERROR" | grep -v "Failed to send message to .* error: transport error" || true)
if [[ -n "${warnings}" ]]; then
echo "Found warning output in ${pod}:"
echo "${warnings}"
return 1
fi
done
}

@test "helm test - multi node with api key" {
run helm test qdrant -n qdrant-multinode-apikey --logs
[ $status -eq 0 ]
}

teardown_file() {
helm uninstall qdrant -n qdrant-multinode-apikey
kubectl delete ns qdrant-multinode-apikey
}
Loading