Qdrant-Vektordatenbank in GKE bereitstellen


In dieser Anleitung wird beschrieben, wie Sie einen Qdrant-Vektordatenbankcluster in Google Kubernetes Engine (GKE) bereitstellen.

Vektordatenbanken sind Datenspeicher, die speziell für die Verwaltung und Suche in großen Sammlungen von hochdimensionalen Vektoren entwickelt wurden. Diese Vektoren stellen Daten wie Text, Bilder, Audio, Video oder alle Daten dar, die numerisch codiert werden können. Im Gegensatz zu traditionellen Datenbanken, die auf genaue Übereinstimmungen beruhen, sind Vektordatenbanken auf die Suche nach ähnlichen Elementen oder das Identifizieren von Mustern in umfangreichen Datasets spezialisiert. Diese Eigenschaften machen Qdrant zu einer geeigneten Wahl für eine Vielzahl von Anwendungen, darunter neuronale Netzwerk- oder semantische Abgleichsfunktionen und Facettensuche. Qdrant dient nicht nur als Vektordatenbank, sondern auch als Suchmaschine für Vektorähnlichkeiten.

Diese Anleitung richtet sich an Cloud Platform-Administratoren und -Architekten, ML-Entwickler und MLOps-Experten (DevOps), die an der Bereitstellung von Qdrant-Datenbankclustern auf GKE interessiert sind.

Vorteile

Qdrant bietet folgende Vorteile:

  • Eine Vielzahl von Bibliotheken für verschiedene Programmiersprachen und eine offene API zur Einbindung in andere Dienste.
  • Horizontale Skalierung und Unterstützung für Fragmentierung und Replikation, die Skalierung und Hochverfügbarkeit vereinfacht.
  • Container- und Kubernetes-Unterstützung für die Bereitstellung und Verwaltung in modernen cloudnativen Umgebungen.
  • Flexible Nutzlasten mit erweiterter Filterung, um Suchkriterien genau anzupassen.
  • Verschiedene Quantisierungsoptionen und andere Optimierungen zur Senkung der Infrastrukturkosten und zur Verbesserung der Leistung.

Ziele

In dieser Anleitung erfahren Sie mehr über die folgenden Themen:

  • GKE-Infrastruktur für Qdrant planen und bereitstellen.
  • Stellen Sie den Operator StatefulHA bereit, um für Qdrant eine Hochverfügbarkeit zu gewährleisten.
  • Qdrant-Cluster bereitstellen und konfigurieren
  • Demo-Dataset hochladen und Suchanfrage ausführen.
  • Messwerte erfassen und ein Dashboard erstellen

Bereitstellungsarchitektur

Diese Architektur richtet einen fehlertoleranten, skalierbaren GKE-Cluster für Qdrant in mehreren Verfügbarkeitszonen ein. Dadurch wird die Betriebszeit und Verfügbarkeit mit Rolling Updates und minimalen Störungen sichergestellt. Dazu gehört die Verwendung des zustandsorientierten HA-Operators zur effizienten Failover-Verwaltung. Weitere Informationen finden Sie unter Regionale Cluster.

Architekturaufbau

Das folgende Diagramm zeigt einen Qdrant-Cluster, der auf mehreren Knoten und Zonen in einem GKE-Cluster ausgeführt wird:

Qdrant-Bereitstellungsarchitektur

In dieser Architektur wird das Qdrant-StatefulSet auf drei Knoten in drei verschiedenen Zonen bereitgestellt.

  • Sie können steuern, wie GKE Pods auf Knoten verteilt. Dazu konfigurieren Sie die erforderlichen Pod-Affinitätsregeln und Topologieverteilungsbeschränkungen in der Helm-Diagramm-Werte-Datei.
  • Wenn eine Zone ausfällt, plant GKE die Pods gemäß der empfohlenen Konfiguration auf neuen Knoten um.

Für die Datenpersistenz hat die Architektur in dieser Anleitung die folgenden Merkmale:

  • Für das Speichern von Daten werden regionale SSD-Laufwerke (benutzerdefinierte regional-pd StorageClass) verwendet. Wir empfehlen regionale SSD-Laufwerke für Datenbanken, da sie eine niedrige Latenz und hohe IOPS bieten.
  • Alle Festplattendaten werden zwischen primären und sekundären Zonen in der Region repliziert, wodurch die Toleranz gegenüber potenziellen Zonenausfällen erhöht wird.

Kosten

In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.

Neuen Google Cloud Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Nach Abschluss der in diesem Dokument beschriebenen Aufgaben können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.

Hinweise

In dieser Anleitung verwenden Sie Cloud Shell zum Ausführen von Befehlen. Cloud Shell ist eine Shell-Umgebung für die Verwaltung von Ressourcen, die in Google Cloudgehostet werden. Es ist bei Google Cloud CLI, kubectl, Helm und Terraform-Befehlszeilentools vorinstalliert. Wenn Sie Cloud Shell nicht verwenden, müssen Sie die Google Cloud CLI installieren.

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.

  3. Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  4. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  5. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Resource Manager, Compute Engine, GKE, IAM Service Account Credentials, and Backup for GKE APIs:

    gcloud services enable cloudresourcemanager.googleapis.com compute.googleapis.com container.googleapis.com iamcredentials.googleapis.com gkebackup.googleapis.com
  8. Install the Google Cloud CLI.

  9. Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  10. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  11. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  12. Verify that billing is enabled for your Google Cloud project.

  13. Enable the Resource Manager, Compute Engine, GKE, IAM Service Account Credentials, and Backup for GKE APIs:

    gcloud services enable cloudresourcemanager.googleapis.com compute.googleapis.com container.googleapis.com iamcredentials.googleapis.com gkebackup.googleapis.com
  14. Grant roles to your user account. Run the following command once for each of the following IAM roles: roles/storage.objectViewer, roles/container.admin, roles/iam.serviceAccountAdmin, roles/compute.admin, roles/gkebackup.admin, roles/monitoring.viewer

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

    Replace the following:

    • PROJECT_ID: your project ID.
    • USER_IDENTIFIER: the identifier for your user account—for example, [email protected].
    • ROLE: the IAM role that you grant to your user account.
  15. Umgebung einrichten

    So richten Sie Ihre Umgebung mit Cloud Shell ein:

    1. Legen Sie Umgebungsvariablen für Ihr Projekt, Ihre Region und ein Kubernetes-Clusterressourcenpräfix fest:

      Für diese Anleitung verwenden Sie die Region us-central1, um Ihre Bereitstellungsressourcen zu erstellen.

      export PROJECT_ID=PROJECT_ID
      export KUBERNETES_CLUSTER_PREFIX=qdrant
      export REGION=us-central1
      
      • Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID. Google Cloud
    2. Prüfen Sie die Helm-Version:

      helm version
      

      Aktualisieren Sie die Version, wenn sie älter als 3.13 ist:

      curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
      
    3. Klonen Sie das Beispielcode-Repository aus GitHub:

      git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
      
    4. Wechseln Sie in das Verzeichnis qdrant, um mit dem Erstellen der Bereitstellungsressourcen zu beginnen:

      cd kubernetes-engine-samples/databases/qdrant
      

    Clusterinfrastruktur erstellen

    In diesem Abschnitt führen Sie ein Terraform-Skript aus, um einen privaten, hochverfügbaren regionalen GKE-Cluster zum Bereitstellen Ihrer Qdrant-Datenbank zu erstellen.

    Sie können Qdrant mit einem Standard- oder Autopilot-Cluster bereitstellen. Jede hat ihre eigenen Vorteile und unterschiedliche Preismodelle.

    Autopilot

    Das folgende Diagramm zeigt einen regionalen Autopilot-GKE-Cluster, der in drei verschiedenen Zonen bereitgestellt wird.

    GKE Autopilot-Cluster

    Führen Sie die folgenden Befehle in Cloud Shell aus, um die Clusterinfrastruktur bereitzustellen:

    export GOOGLE_OAUTH_ACCESS_TOKEN=$(gcloud auth print-access-token)
    terraform -chdir=terraform/gke-autopilot init
    terraform -chdir=terraform/gke-autopilot apply \
    -var project_id=${PROJECT_ID} \
    -var region=${REGION} \
    -var cluster_prefix=${KUBERNETES_CLUSTER_PREFIX}
    

    Die folgenden Variablen werden zur Laufzeit ersetzt:

    • GOOGLE_OAUTH_ACCESS_TOKEN: Wird durch ein Zugriffstoken ersetzt, das mit dem Befehl gcloud auth print-access-token abgerufen wird, um Interaktionen mit verschiedenen Google Cloud APIs zu authentifizieren.
    • PROJECT_ID, REGION und KUBERNETES_CLUSTER_PREFIX sind die im Abschnitt Umgebung einrichten definierten Umgebungsvariablen und den neuen relevanten Variablen für den Autopilot-Cluster zugewiesen, den Sie erstellen.

    Geben Sie bei Aufforderung yes ein.

    Die Ausgabe sieht in etwa so aus:

    ...
    Apply complete! Resources: 9 added, 0 changed, 0 destroyed.
    
    Outputs:
    
    kubectl_connection_command = "gcloud container clusters get-credentials qdrant-cluster --region us-central1"
    

    Terraform erstellt die folgenden Ressourcen:

    • Ein benutzerdefiniertes VPC-Netzwerk und ein privates Subnetz für die Kubernetes-Knoten
    • Ein Cloud Router für den Zugriff auf das Internet über Network Address Translation (NAT).
    • Ein privater GKE-Cluster in der Region us-central1.
    • Ein ServiceAccount mit Logging- und Monitoring-Berechtigungen für den Cluster.
    • Google Cloud Managed Service for Prometheus-Konfiguration für Clustermonitoring und Benachrichtigungen.

    Standard

    Das folgende Diagramm zeigt einen privaten Standard-GKE-Cluster, der in drei verschiedenen Zonen bereitgestellt wird.

    GKE-Standardcluster

    Führen Sie die folgenden Befehle in Cloud Shell aus, um die Clusterinfrastruktur bereitzustellen:

    export GOOGLE_OAUTH_ACCESS_TOKEN=$(gcloud auth print-access-token)
    terraform -chdir=terraform/gke-standard init
    terraform -chdir=terraform/gke-standard apply \
    -var project_id=${PROJECT_ID} \
    -var region=${REGION} \
    -var cluster_prefix=${KUBERNETES_CLUSTER_PREFIX}
    

    Die folgenden Variablen werden zur Laufzeit ersetzt:

    • GOOGLE_OAUTH_ACCESS_TOKEN wird durch ein Zugriffstoken ersetzt, das mit dem Befehl gcloud auth print-access-token abgerufen wird, um Interaktionen mit verschiedenen Google Cloud APIs zu authentifizieren.
    • PROJECT_ID, REGION und KUBERNETES_CLUSTER_PREFIX sind die im Abschnitt Umgebung einrichten definierten Umgebungsvariablen und den neuen relevanten Variablen für den Standard-Cluster zugewiesen, den Sie erstellen.

    Geben Sie bei Aufforderung yes ein. Es kann einige Minuten dauern, bis diese Befehle abgeschlossen sind und der Cluster den Status „Bereit“ anzeigt.

    Die Ausgabe sieht in etwa so aus:

    ...
    Apply complete! Resources: 10 added, 0 changed, 0 destroyed.
    
    Outputs:
    
    kubectl_connection_command = "gcloud container clusters get-credentials qdrant-cluster --region us-central1"
    

    Terraform erstellt die folgenden Ressourcen:

    • Ein benutzerdefiniertes VPC-Netzwerk und ein privates Subnetz für die Kubernetes-Knoten
    • Ein Cloud Router für den Zugriff auf das Internet über Network Address Translation (NAT).
    • Ein privater GKE-Cluster in der Region us-central1 mit aktiviertem Autoscaling (ein bis zwei Knoten pro Zone).
    • Ein ServiceAccount mit Logging- und Monitoring-Berechtigungen für den Cluster.
    • Google Cloud Managed Service for Prometheus-Konfiguration für Clustermonitoring und Benachrichtigungen.

    Mit dem Cluster verbinden

    Konfigurieren Sie kubectl so, dass Anmeldedaten abgerufen und mit Ihrem neuen GKE-Cluster kommuniziert wird:

    gcloud container clusters get-credentials \
        ${KUBERNETES_CLUSTER_PREFIX}-cluster --location ${REGION}
    

    Qdrant-Datenbank in Ihrem Cluster bereitstellen

    In dieser Anleitung stellen Sie die Qdrant-Datenbank (im verteilten Modus) und den zustandsorientierten HA-Operator mithilfe des Helm-Diagramms auf Ihrem GKE-Cluster bereit.

    Das Deployment erstellt einen GKE-Cluster mit der folgenden Konfiguration:

    • Drei Replikate der Qdrant-Knoten.
    • Toleranzen, Knotenaffinitäten und Einschränkungen für die Topologieverteilung sind konfiguriert, um eine ordnungsgemäße Verteilung auf Kubernetes-Knoten zu gewährleisten. Dabei werden die Knotenpools und verschiedenen Verfügbarkeitszonen genutzt.
    • Für die Datenspeicherung wird ein RePD-Volume mit dem SSD-Festplattentyp bereitgestellt.
    • Ein zustandsorientierter HA-Operator wird verwendet, um Failover-Prozesse zu verwalten und Hochverfügbarkeit zu gewährleisten. Ein StatefulSet ist ein Kubernetes-Controller, der für jeden seiner Pods eine dauerhafte eindeutige Identität beibehält.
    • Zur Authentifizierung erstellt die Datenbank ein Kubernetes-Secret mit dem API-Schlüssel.

    So verwenden Sie das Helm-Diagramm, um die Qdrant-Datenbank bereitzustellen:

    1. StatefulHA-Add-on aktivieren:

      Autopilot

      GKE aktiviert das Add-on StatefulHA bei der Clustererstellung automatisch.

      Standard

      Führen Sie dazu diesen Befehl aus:

      gcloud container clusters update ${KUBERNETES_CLUSTER_PREFIX}-cluster \
          --project=${PROJECT_ID} \
          --location=${REGION} \
          --update-addons=StatefulHA=ENABLED
      

      Es kann 15 Minuten dauern, bis dieser Befehl abgeschlossen ist und der Cluster den Status „Bereit“ anzeigt.

    2. Fügen Sie das Helm-Diagramm-Repository der Qdrant-Datenbank hinzu, bevor Sie es in Ihrem GKE-Cluster bereitstellen können:

      helm repo add qdrant https://qdrant.github.io/qdrant-helm
      
    3. Erstellen Sie den Namespace qdrant für die Datenbank:

      kubectl create ns qdrant
      
    4. Wenden Sie das Manifest an, um einen regionalen nichtflüchtigen SSD-Speicher StorageClass zu erstellen:

      kubectl apply -n qdrant -f manifests/01-regional-pd/regional-pd.yaml
      

      Das Manifest regional-pd.yaml beschreibt den nichtflüchtigen SSD-Speicher StorageClass:

      apiVersion: storage.k8s.io/v1
      kind: StorageClass
      allowVolumeExpansion: true
      metadata:
        name: ha-regional
      parameters:
        replication-type: regional-pd
        type: pd-ssd
        availability-class: regional-hard-failover
      provisioner: pd.csi.storage.gke.io
      reclaimPolicy: Retain
      volumeBindingMode: WaitForFirstConsumer
    5. Stellen Sie eine Kubernetes-Configmap mit einer metrics-Sidecar-Konfiguration und einem Qdrant-Cluster mit Helm bereit:

      kubectl apply -n qdrant -f manifests/03-prometheus-metrics/metrics-cm.yaml
      helm install qdrant-database qdrant/qdrant -n qdrant \
      -f manifests/02-values-file/values.yaml
      

      Das metrics-cm.yaml-Manifest beschreibt den metrics-Sidecar ConfigMap:

      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: nginx-conf
      data:
        default.conf.template: |
          server {
            listen 80;
            location / {
              proxy_pass http://localhost:6333/metrics;
              proxy_http_version 1.1;
              proxy_set_header Host $http_host;
              proxy_set_header api-key ${QDRANT_APIKEY};
              proxy_set_header X-Forwarded-For $remote_addr;
            }
          }

      Das values.yaml-Manifest beschreibt die Konfiguration des Qdrant-Clusters :

      replicaCount: 3
      
      config:
        service:
          enable_tls: false
        cluster:
          enabled: true
        storage:
          optimizers:
            deleted_threshold: 0.5
            vacuum_min_vector_number: 1500
            default_segment_number: 2
            max_segment_size_kb: null
            memmap_threshold_kb: null
            indexing_threshold_kb: 25000
            flush_interval_sec: 5
            max_optimization_threads: 1
      
      livenessProbe:
        enabled: true
        initialDelaySeconds: 60
      
      resources:
        limits:
          cpu: "2"
          memory: 4Gi
        requests:
          cpu: "1"
          memory: 4Gi
      
      tolerations:
        - key: "app.stateful/component"
          operator: "Equal"
          value: "qdrant"
          effect: NoSchedule
      
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 1
            preference:
              matchExpressions:
              - key: "app.stateful/component"
                operator: In
                values:
                - "qdrant"
      
      topologySpreadConstraints:
        - maxSkew: 1
          topologyKey: "topology.kubernetes.io/zone"
          whenUnsatisfiable: ScheduleAnyway
          labelSelector:
            matchLabels:
              app.kubernetes.io/name: qdrant
              app.kubernetes.io/instance: qdrant
      
      podDisruptionBudget:
        enabled: true
        maxUnavailable: 1
      
      persistence:
        accessModes: ["ReadWriteOnce"]
        size: 10Gi
        storageClassName: ha-regional
      
      apiKey: true
      
      sidecarContainers:
        - name: metrics
          image: nginx:1.28
          resources:
            requests:
              memory: "128Mi"
              cpu: "250m"
            limits:
              memory: "128Mi"
              cpu: "500m"
          ports:
          - containerPort: 80
          env:
          - name: QDRANT_APIKEY 
            valueFrom:
              secretKeyRef:
                name: qdrant-database-apikey          
                key: api-key
          volumeMounts:
              - name: nginx-conf
                mountPath: /etc/nginx/templates/default.conf.template
                subPath: default.conf.template
                readOnly: true
      additionalVolumes:
        - name: nginx-conf
          configMap:
            name: nginx-conf
            items:
              - key: default.conf.template
                path: default.conf.template 

      Diese Konfiguration aktiviert den Clustermodus, sodass Sie einen hochverfügbaren und verteilten Qdrant-Cluster einrichten können.

    6. Fügen Sie dem StatefulSet von Qdrant ein Label hinzu:

      kubectl label statefulset qdrant-database examples.ai.gke.io/source=qdrant-guide -n qdrant
      
    7. Stellen Sie einen internen Load Balancer bereit, um auf Ihre Qdrant-Datenbank zuzugreifen, die in derselben VPC wie Ihr GKE-Cluster ausgeführt wird:

      kubectl apply -n qdrant -f manifests/02-values-file/ilb.yaml
      

      Das ilb.yaml-Manifest beschreibt den LoadBalancer-Service:

      apiVersion: v1
      kind: Service
      metadata:
        annotations:
          #cloud.google.com/neg: '{"ingress": true}'
          networking.gke.io/load-balancer-type: "Internal"
        labels:
          app.kubernetes.io/name: qdrant
        name: qdrant-ilb
      spec:
        ports:
        - name: http
          port: 6333
          protocol: TCP
          targetPort: 6333
        - name: grpc
          port: 6334
          protocol: TCP
          targetPort: 6334
        selector:
          app: qdrant
          app.kubernetes.io/instance: qdrant-database
        type: LoadBalancer
    8. Prüfen Sie den Bereitstellungsstatus:

      helm ls -n qdrant
      

      Wenn die qdrant-Datenbank erfolgreich bereitgestellt wurde, sieht die Ausgabe in etwa so aus:

      NAME    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
      qdrant-database  qdrant          1               2024-02-06 20:21:15.737307567 +0000 UTC deployed        qdrant-0.7.6    v1.7.4
      
    9. Warten Sie, bis GKE die erforderlichen Arbeitslasten gestartet hat:

      kubectl wait pods -l app.kubernetes.io/instance=qdrant-database --for condition=Ready --timeout=300s -n qdrant
      

      Die Verarbeitung dieses Befehls kann einige Minuten dauern.

    10. Prüfen Sie, nachdem GKE die Arbeitslasten gestartet hat, ob GKE die Qdrant-Arbeitslasten erstellt hat:

      kubectl get pod,svc,statefulset,pdb,secret -n qdrant
      
    11. Starten Sie die HighAvailabilityApplication-Ressource (HAA) für Qdrant:

      kubectl apply -n qdrant -f manifests/01-regional-pd/ha-app.yaml
      

      Das ha-app.yaml-Manifest beschreibt die HighAvailabilityApplication-Ressource:

      kind: HighAvailabilityApplication
      apiVersion: ha.gke.io/v1
      metadata:
        name: qdrant-database
        namespace: qdrant
      spec:
        resourceSelection:
          resourceKind: StatefulSet
        policy:
          storageSettings:
            requireRegionalStorage: true
          failoverSettings:
            forceDeleteStrategy: AfterNodeUnreachable
            afterNodeUnreachable:
              afterNodeUnreachableSeconds: 20 # 60 seconds total

      Die folgenden GKE-Ressourcen werden für den Qdrant-Cluster erstellt:

      • Die Qdrant-StatefulSet, die drei Pod-Replikate steuert.
      • A PodDisruptionBudget, wodurch maximal ein nicht verfügbares Replikat garantiert wird.
      • Der Dienst qdrant-database, der den Qdrant-Port für eingehende Verbindungen und die Replikation zwischen Knoten freigibt.
      • Der qdrant-database-headless-Dienst, der die Liste der laufenden Qdrant-Pods bereitstellt.
      • Das qdrant-database-apikey-Secret, das eine sichere Datenbankverbindung ermöglicht.
      • Zustandsorientierter HA-Operator-Pod und HighlyAvailableApplication-Ressource, die die Qdrant-Anwendung aktiv überwachen. Die Ressource HighlyAvailableApplication definiert Failover-Regeln, die auf Qdrant angewendet werden.
    12. Wenn Sie prüfen möchten, ob die Failover-Regeln angewendet werden, beschreiben Sie die Ressource und bestätigen Sie Status: Message: Application is protected.

      kubectl describe highavailabilityapplication qdrant-database -n qdrant
      

      Die Ausgabe sieht etwa so aus:

      Status:
      Conditions:
          Last Transition Time:  2023-11-30T09:54:52Z
          Message:               Application is protected
          Observed Generation:   1
          Reason:                ApplicationProtected
          Status:                True
          Type:                  Protected
      

    Abfragen mit Vertex AI Colab Enterprise-Notebook ausführen

    Qdrant organisiert Vektoren und Nutzlasten in Sammlungen. Vektoreinbettung ist eine Technik, bei der Wörter oder Entitäten als numerische Vektoren dargestellt werden, wobei ihre semantischen Beziehungen erhalten bleiben. Dies ist für Ähnlichkeitssuchen wichtig, da es das Finden von Ähnlichkeiten anhand von Bedeutung statt exakter Übereinstimmungen ermöglicht. Aufgaben wie Such- und Empfehlungssysteme werden dadurch effektiver und differenzierter.

    In diesem Abschnitt erfahren Sie, wie Sie Vektoren in eine neue Qdrant-Sammlung hochladen und Suchanfragen ausführen.

    In diesem Beispiel verwenden Sie ein Dataset aus einer CSV-Datei, die eine Liste von Büchern verschiedener Genres enthält. Sie erstellen ein Colab Enterprise-Notebook, um eine Suchanfrage in der Qdrant-Datenbank auszuführen.

    Weitere Informationen zu Vertex AI Colab Enterprise finden Sie in der Colab Enterprise-Dokumentation.

    Laufzeitvorlage erstellen.

    So erstellen Sie eine Colab Enterprise-Laufzeitvorlage:

    1. Rufen Sie in der Google Cloud -Console die Colab Enterprise-Seite Laufzeitvorlagen auf und prüfen Sie, ob Ihr Projekt ausgewählt ist:

      Zu Laufzeitvorlagen

    2. Klicken Sie auf  Neue Vorlage. Die Seite Neue Laufzeitvorlage erstellen wird angezeigt.

    3. Im Abschnitt Laufzeitgrundlagen:

      • Geben Sie im Feld Anzeigename den Wert qdrant-connect ein.
      • Wählen Sie in der Drop-down-Liste Region us-central1 aus. Es ist dieselbe Region wie Ihr GKE-Cluster.
    4. Im Abschnitt Compute konfigurieren:

      • Wählen Sie in der Drop-down-Liste Maschinentyp die Option e2-standard-2 aus.
      • Geben Sie im Feld Laufwerkgröße den Wert 30 ein.
    5. Im Abschnitt Netzwerk und Sicherheit:

      • Wählen Sie in der Drop-down-Liste Netzwerk das Netzwerk aus, in dem sich Ihr GKE-Cluster befindet.
      • Wählen Sie in der Drop-down-Liste Subnetzwerk ein entsprechendes Subnetzwerk aus.
      • Entfernen Sie das Häkchen aus dem Kästchen Öffentlichen Internetzugriff aktivieren.
    6. Klicken Sie auf Erstellen, um die Erstellung der Laufzeitvorlage abzuschließen. Ihre Laufzeitvorlage wird auf dem Tab Laufzeitvorlagen in der Liste angezeigt.

    Laufzeit erstellen

    So erstellen Sie eine Colab Enterprise-Laufzeit:

    1. Klicken Sie in der Liste der Laufzeitvorlagen für die gerade erstellte Vorlage in der Spalte Aktionen auf  und dann auf Laufzeit erstellen. Der Bereich Vertex AI-Laufzeit erstellen wird angezeigt.

    2. Klicken Sie auf Erstellen, um eine Laufzeit auf Grundlage Ihrer Vorlage zu erstellen.

    3. Warten Sie auf dem Tab Laufzeiten, bis der Status zu Fehlerfrei wechselt.

    Notebook importieren

    So importieren Sie das Notebook in Colab Enterprise:

    1. Klicken Sie auf den Tab Meine Notebooks und dann auf Importieren. Der Bereich Notebooks importieren wird angezeigt.

    2. Wählen Sie unter Importquelle die Option URL aus.

    3. Geben Sie unter Notebook-URLs den folgenden Link ein:

      https://raw.githubusercontent.com/GoogleCloudPlatform/kubernetes-engine-samples/refs/heads/main/databases/qdrant/manifests/04-notebook/vector-database.ipynb
      
    4. Klicken Sie auf Importieren.

    Mit der Laufzeit verbinden und Abfragen ausführen

    So stellen Sie eine Verbindung zur Laufzeit her und führen Abfragen aus:

    1. Klicken Sie im Notebook neben der Schaltfläche Verbinden auf  Zusätzliche Verbindungsoptionen. Der Bereich Mit Vertex AI-Laufzeit verbinden wird angezeigt.

    2. Wählen Sie Mit einer Laufzeit verbinden und dann Mit einer vorhandenen Laufzeit verbinden aus.

    3. Wählen Sie die Laufzeit aus, die Sie gestartet haben, und klicken Sie auf Connect (Verbinden).

    4. Klicken Sie zum Ausführen der Notebook-Zellen neben jeder Codezelle auf die Schaltfläche Zelle ausführen.

    Das Notebook enthält sowohl Codezellen als auch Text, der die einzelnen Codeblöcke beschreibt. Wenn Sie eine Codezelle ausführen, werden die darin enthaltenen Befehle ausgeführt und eine Ausgabe wird angezeigt. Sie können die Zellen der Reihe nach oder nach Bedarf einzeln ausführen.

    Prometheus-Messwerte für Ihren Cluster aufrufen

    Der GKE-Cluster wird mit Google Cloud Managed Service for Prometheus konfiguriert, der die Erfassung von Messwerten im Prometheus-Format ermöglicht. Dieser Dienst bietet eine vollständig verwaltete Lösung für Monitoring und Benachrichtigungen, die die Erfassung, Speicherung und Analyse von Messwerten aus dem Cluster und seinen Anwendungen ermöglicht.

    Das folgende Diagramm zeigt, wie Prometheus Messwerte für Ihren Cluster erfasst:

    Erfassung von Prometheus-Messwerten

    Der private GKE-Cluster im Diagramm enthält die folgenden Komponenten:

    • Qdrant-Pods, die Messwerte für den Pfad / und den Port 80 verfügbar machen. Diese Messwerte werden vom Sidecar-Container namens metrics bereitgestellt.
    • Prometheus-basierte Collectors, die die Messwerte aus den Qdrant-Pods verarbeiten.
    • Eine PodMonitoring-Ressource, die Messwerte an Cloud Monitoring sendet.

    So exportieren Sie die Messwerte und zeigen sie an:

    1. Erstellen Sie die PodMonitoring-Ressource, um Messwerte nach labelSelector zu extrahieren:

      kubectl apply -n qdrant -f manifests/03-prometheus-metrics/pod-monitoring.yaml
      

      Das pod-monitoring.yaml-Manifest beschreibt die PodMonitoring-Ressource:

      apiVersion: monitoring.googleapis.com/v1
      kind: PodMonitoring
      metadata:
        name: qdrant
      spec:
        selector:
          matchLabels:
            app: qdrant
            app.kubernetes.io/instance: qdrant-database
        endpoints:
        - port: 80
          interval: 30s
          path: / 
    2. Erstellen Sie ein Cloud Monitoring-Dashboard mit den in dashboard.json definierten Konfigurationen :

      gcloud --project "${PROJECT_ID}" monitoring dashboards create --config-from-file monitoring/dashboard.json
      
    3. Nachdem der Befehl erfolgreich ausgeführt wurde, rufen Sie die Cloud Monitoring-Dashboards auf:

      Zur Dashboard-Übersicht

    4. Öffnen Sie in der Liste der Dashboards das Qdrant Overview-Dashboard. Es kann ein bis zwei Minuten dauern, bis Messwerte erfasst und angezeigt werden.

      Im Dashboard wird die Anzahl der wichtigsten Messwerte angezeigt:

      • Sammlungen
      • Eingebettete Vektoren
      • Ausstehende Vorgänge
      • Ausgeführte Knoten

    Clusterkonfiguration sichern

    Mit dem Feature Sicherung für GKE können Sie regelmäßige Sicherungen Ihrer gesamten GKE-Clusterkonfiguration planen, einschließlich der bereitgestellten Arbeitslasten und deren Daten.

    In dieser Anleitung konfigurieren Sie einen Sicherungsplan für Ihren GKE-Cluster, um täglich um 3:00 Uhr alle Arbeitslasten, einschließlich Secrets und Volumes, zu sichern. Um eine effiziente Speicherverwaltung zu gewährleisten, würden Sicherungen, die älter als drei Tage sind, automatisch gelöscht.

    So konfigurieren Sie Sicherungspläne:

    1. Aktivieren Sie das Feature "Sicherung für GKE" für Ihren Cluster:

      gcloud container clusters update ${KUBERNETES_CLUSTER_PREFIX}-cluster \
      --project=${PROJECT_ID} \
      --location=${REGION} \
      --update-addons=BackupRestore=ENABLED
      
    2. Erstellen Sie einen Sicherungsplan mit einem täglichen Zeitplan für alle Namespaces im Cluster:

      gcloud beta container backup-restore backup-plans create ${KUBERNETES_CLUSTER_PREFIX}-cluster-backup \
      --project=${PROJECT_ID} \
      --location=${REGION} \
      --cluster="projects/${PROJECT_ID}/locations/${REGION}/clusters/${KUBERNETES_CLUSTER_PREFIX}-cluster" \
      --all-namespaces \
      --include-secrets \
      --include-volume-data \
      --cron-schedule="0 3 * * *" \
      --backup-retain-days=3
      

      Der Befehl verwendet zur Laufzeit die relevanten Umgebungsvariablen.

      Das Format des Clusternamens bezieht sich auf Ihr Projekt und Ihre Region:

      projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_NAME
      

      Geben Sie bei Aufforderung y. ein. Die Ausgabe sieht in etwa so aus:

      Create request issued for: [qdrant-cluster-backup]
      Waiting for operation [projects/PROJECT_ID/locations/us-central1/operations/operation-1706528750815-610142ffdc9ac-71be4a05-f61c99fc] to complete...⠹
      

      Dieser Vorgang kann einige Minuten dauern. Nach Abschluss der Ausführung sieht die Ausgabe in etwa so aus:

      Created backup plan [qdrant-cluster-backup].
      
    3. Der neu erstellte Sicherungsplan qdrant-cluster-backup wird in der Console von Backup for GKE aufgeführt.

      Zu „Sicherung für GKE“

    Informationen zum Wiederherstellen der gespeicherten Sicherungskonfigurationen finden Sie unter Sicherung wiederherstellen.

    Bereinigen

    Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.

    Projekt löschen

    Sie vermeiden weitere Kosten am einfachsten, wenn Sie das für die Anleitung erstellte Projekt löschen.

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

    Wenn Sie das Projekt gelöscht haben, ist die Bereinigung abgeschlossen. Wenn Sie das Projekt nicht gelöscht haben, fahren Sie mit dem Löschen der einzelnen Ressourcen fort.

    Einzelne Ressourcen löschen

    1. Umgebungsvariablen festlegen

      export PROJECT_ID=${PROJECT_ID}
      export KUBERNETES_CLUSTER_PREFIX=qdrant
      export REGION=us-central1
      
    2. Führen Sie den Befehl terraform destroy aus:

      export GOOGLE_OAUTH_ACCESS_TOKEN=$(gcloud auth print-access-token)
      terraform  -chdir=terraform/FOLDER destroy \
      -var project_id=${PROJECT_ID} \
      -var region=${REGION} \
      -var cluster_prefix=${KUBERNETES_CLUSTER_PREFIX}
      

      Ersetzen Sie FOLDER je nach Typ des von Ihnen erstellten GKE-Clusters durch gke-autopilot oder gke-standard.

      Geben Sie bei Aufforderung yes ein.

    3. Alle nicht angehängten Laufwerke suchen:

      export disk_list=$(gcloud compute disks list --filter="-users:* AND labels.name=${KUBERNETES_CLUSTER_PREFIX}-cluster" --format "value[separator=|](name,region)")
      
    4. Laufwerke löschen:

      for i in $disk_list; do
       disk_name=$(echo $i| cut -d'|' -f1)
       disk_region=$(echo $i| cut -d'|' -f2|sed 's|.*/||')
       echo "Deleting $disk_name"
       gcloud compute disks delete $disk_name --region $disk_region --quiet
      done
      
    5. GitHub-Repository löschen:

      rm -r ~/kubernetes-engine-samples/
      

    Nächste Schritte