Skip to main content

Certification track: Professional Cloud Database Engineer (PCDE) · AI Tooling

Qdrant Common — Shared Application Configuration

Qdrant_Common is the shared application layer for Qdrant. It is not deployed on its own; instead it supplies the Qdrant-specific configuration that both Qdrant_GKE and Qdrant_CloudRun build on, so the two platform variants behave identically where it matters. End users never configure this layer directly — it has no deployment UI inputs of its own — but understanding what it provides explains the defaults you see in the platform docs.

For the infrastructure that actually provisions and runs Qdrant, see the platform guides (Qdrant_GKE, Qdrant_CloudRun) and the foundation guides (App_GKE, App_CloudRun, App_Common).


1. What this layer provides

AreaProvided by Qdrant_CommonWhere it surfaces
Container imagePins the official qdrant/qdrant image and the build that extends itcontainer_image output of the platform deployment
No SQL databaseFixes database_type = "NONE" — Qdrant is a self-contained storeNo Cloud SQL instance or database credentials are created
No RedisNo cache dependency — Qdrant manages its own in-memory structuresenable_redis is hard-coded to false in wrapper modules
Storage pathSets QDRANT__STORAGE__STORAGE_PATH=/qdrant/storage aligned with the GCS FUSE or PVC mountContainer environment; GCS bucket / PVC mount in platform guides
HTTP portSets QDRANT__SERVICE__HTTP_PORT=6333 explicitlyContainer environment
API key (optional)Generates a 32-character API key, stores it in Secret Manager, and injects it as QDRANT__SERVICE__API_KEYRetrieve via Secret Manager (see below)
Object storageDeclares the Cloud Storage storage bucket (<prefix>-storage) at /qdrant/storagestorage_buckets output
Health probesSupplies the default startup (/readyz) and liveness (/livez) probe configuration with distinct endpoints§Observability in the platform guides

2. API key in Secret Manager

When enable_api_key = true, a 32-character alphanumeric API key is generated and stored as a Secret Manager secret. It is never set in plain text. Retrieve it after deployment:

# The secret name follows the deployment's resource prefix; list and read it:
gcloud secrets list --project "$PROJECT" --filter="name~api-key"
gcloud secrets versions access latest --secret=<api-key-secret> --project "$PROJECT"

Once retrieved, pass it in all REST and gRPC calls:

# REST example:
curl -H "api-key: <key>" https://<qdrant-url>/collections

# Python client:
# qdrant_client.QdrantClient(host="...", api_key="<key>")

The API key secret ID is reported as qdrant_api_key_secret_id in the GKE platform deployment outputs. See App_Common for the shared secret and Workload Identity model.


3. Storage — no SQL database, GCS FUSE or PVC

Qdrant manages its own embedded storage engine. There is no Cloud SQL database and no database bootstrap job. On first start, Qdrant initialises its storage directory at /qdrant/storage automatically.

Two persistent storage backends are available:

Cloud Storage via GCS FUSE (default): Qdrant_Common always declares a <prefix>-storage bucket. When enable_gcs_storage_volume = true (the default), the bucket is mounted at /qdrant/storage via the GCS FUSE CSI driver. This is the default for Qdrant_CloudRun and for Qdrant_GKE without a StatefulSet PVC.

StatefulSet PVC (GKE only, recommended for production): When Qdrant_GKE is deployed with stateful_pvc_enabled = true, it passes enable_gcs_storage_volume = false to Qdrant_Common. This prevents a double-mount conflict at /qdrant/storage between the PVC and the GCS FUSE volume. The bucket is still provisioned (for backup use), but not mounted as a live data path.

Explore storage resources:

# GCS FUSE storage bucket
gcloud storage buckets list --project "$PROJECT"
gcloud storage ls gs://<prefix>-storage/collections/

# PVC status (GKE only)
kubectl get pvc -n "$NAMESPACE"

4. Core application settings

Qdrant_Common establishes the Qdrant baseline environment so the application comes up correctly on first boot:

  • Storage pathQDRANT__STORAGE__STORAGE_PATH=/qdrant/storage is always injected and aligned with the GCS FUSE mount point or the StatefulSet PVC mount path.
  • HTTP portQDRANT__SERVICE__HTTP_PORT=6333 is always injected explicitly.
  • gRPC disabled by defaultQDRANT__SERVICE__GRPC_PORT is intentionally not set. Neither the default GKE ClusterIP/LoadBalancer Service nor Cloud Run exposes port 6334. Enable via environment_variables = { QDRANT__SERVICE__GRPC_PORT = "6334" } in the GKE wrapper and configure a second Service port manually if gRPC is needed.
  • No initialization job — Qdrant requires no database bootstrap. If initialization_jobs is non-empty in the wrapper, those jobs are passed through; otherwise no job is created.
  • Image sourceQdrant_Common uses image_source = "custom" so the foundation runs a Cloud Build pipeline to mirror the qdrant/qdrant image into Artifact Registry before deployment.

5. Health probe behaviour

Qdrant exposes two dedicated health endpoints with distinct purposes:

EndpointPurposeUsed by
/readyzReadiness — returns 200 only when all collections are fully loaded and Qdrant is ready to serve trafficStartup probe
/livezLiveness — always returns 200 as long as the Qdrant process is alive, regardless of collection load stateLiveness probe

Critical distinction: Qdrant temporarily marks itself not-ready while loading large collections from storage. If /readyz were the liveness target, Kubernetes and Cloud Run would interpret the temporary 503 as a container failure and restart the pod or instance — which in turn triggers another full collection reload, creating a restart loop. Always use /livez for liveness.

Both Qdrant_GKE and Qdrant_CloudRun use HTTP probes (not TCP), because Qdrant does not issue HTTP→HTTPS redirects and the probe traffic is unaffected by TLS settings.


6. Object storage

A dedicated Cloud Storage storage bucket (<prefix>-storage) is declared here and provisioned by the foundation. The bucket uses STANDARD storage class with public_access_prevention = "enforced". List it with:

gcloud storage buckets list --project "$PROJECT"
gcloud storage ls gs://<prefix>-storage/

The workload service account is granted read/write access via Workload Identity by the foundation module. For GCS FUSE operation, additional IAM roles are handled automatically.


For the Qdrant-specific, user-facing configuration (variables by group, outputs, and how to explore each service from the Console and CLI), see the platform guides: Qdrant_GKE and Qdrant_CloudRun.