# k8s/vec/qdrant/pvc.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: { name: qdrant-data, namespace: db} spec: accessModes: ["ReadWriteOnce"] storageClassName: local-ssd-hetzner resources: { requests: { storage: 20Gi } } --- # k8s/vec/qdrant/deploy.yaml apiVersion: apps/v1 kind: Deployment metadata: { name: qdrant, namespace: db} spec: replicas: 1 selector: { matchLabels: { app: qdrant } } template: metadata: { labels: { app: qdrant } } spec: containers: - name: qdrant image: qdrant/qdrant:latest ports: - { containerPort: 6333 } # HTTP + Web UI - { containerPort: 6334 } # gRPC volumeMounts: - { name: data, mountPath: /qdrant/storage } volumes: - name: data persistentVolumeClaim: { claimName: qdrant-data } --- apiVersion: v1 kind: Service metadata: { name: qdrant, namespace: db} spec: selector: { app: qdrant } ports: - { name: http, port: 80, targetPort: 6333 } - { name: grpc, port: 6334, targetPort: 6334 } --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: qdrant namespace: db annotations: { cert-manager.io/cluster-issuer: letsencrypt-prod } spec: ingressClassName: nginx tls: [{ hosts: ["vector.betelgeusebytes.io"], secretName: qdrant-tls }] rules: - host: vector.betelgeusebytes.io http: paths: - path: / pathType: Prefix backend: { service: { name: qdrant, port: { number: 80 } } } --- # PV apiVersion: v1 kind: PersistentVolume metadata: name: pv-qdrant spec: capacity: storage: 20Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain storageClassName: local-ssd-hetzner local: path: /mnt/local-ssd/qdrant nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - hetzner-2