In dieser Anleitung wird beschrieben, wie Sie einen Weaviate-Vektordatenbankcluster in Google Kubernetes Engine (GKE) bereitstellen.
Weaviate ist eine Open-Source-Vektordatenbank mit geringer Latenz und grundlegender Unterstützung für verschiedene Medientypen wie Text und Bilder. Es unterstützt die semantische Suche, die Beantwortung von Fragen und die Klassifizierung. Weaviate basiert vollständig auf Go und speichert sowohl Objekte als auch Vektoren. So können Sie die Vektorsuche, die Stichwortsuche und eine Kombination aus beidem als Hybridsuche verwenden. Aus Infrastruktursicht ist Weaviate eine cloudnative und fehlertolerante Datenbank. Die Fehlertoleranz wird durch eine leaderlose Architektur erreicht, in der jeder Knoten des Datenbankclusters Lese- und Schreibanfragen verarbeiten kann, wodurch ein Single Point of Failure ausgeschlossen wird.
Diese Anleitung richtet sich an Cloud Platform-Administratoren und -Architekten, ML-Entwickler und MLOps-Experten (DevOps), die an der Bereitstellung von Vektordatenbankclustern auf GKE interessiert sind.
Vorteile
Weaviate bietet folgende Vorteile:
- Bibliotheken für verschiedene Programmiersprachen und eine offene API zur Einbindung in andere Dienste.
- Horizontale Skalierung.
- Ein ausgewogenes Verhältnis zwischen Kosteneffizienz und Abfragegeschwindigkeit, insbesondere bei großen Datasets. Sie können festlegen, wie viele Daten im Arbeitsspeicher und wie viele auf der Festplatte gespeichert werden.
Ziele
In dieser Anleitung erfahren Sie mehr über die folgenden Themen:
- GKE-Infrastruktur für Weaviate planen und bereitstellen.
- Weaviate-Datenbank in einem GKE-Cluster bereitstellen und konfigurieren.
- Führen Sie ein Notebook aus, um Beispielvektoreinbettungen in Ihrer Datenbank zu generieren und zu speichern und vektorbasierte Suchanfragen auszuführen.
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.
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.
Hinweis
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.
- Melden Sie sich in Ihrem Google Cloud -Konto an. Wenn Sie mit Google Cloudnoch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
-
Installieren Sie die Google Cloud CLI.
-
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init -
Erstellen Sie ein Google Cloud Projekt oder wählen Sie eines aus.
Rollen, die zum Auswählen oder Erstellen eines Projekts erforderlich sind
- Projekt auswählen: Für die Auswahl eines Projekts ist keine bestimmte IAM-Rolle erforderlich. Sie können jedes Projekt auswählen, für das Ihnen eine Rolle zugewiesen wurde.
-
Projekt erstellen: Zum Erstellen eines Projekts benötigen Sie die Rolle „Projektersteller“ (
roles/resourcemanager.projectCreator), die die Berechtigungresourcemanager.projects.createenthält. Weitere Informationen zum Zuweisen von Rollen
-
So erstellen Sie ein Google Cloud -Projekt:
gcloud projects create PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch einen Namen für das Google Cloud -Projekt, das Sie erstellen. -
Wählen Sie das von Ihnen erstellte Google Cloud Projekt aus:
gcloud config set project PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch den Namen Ihres Projekts in Google Cloud .
-
Prüfen Sie, ob für Ihr Google Cloud Projekt die Abrechnung aktiviert ist.
Aktivieren Sie die Cloud Resource Manager API, die Compute Engine API, die GKE API und die IAM Service Account Credentials API:
Rollen, die zum Aktivieren von APIs erforderlich sind
Zum Aktivieren von APIs benötigen Sie die IAM-Rolle „Service Usage-Administrator“ (
roles/serviceusage.serviceUsageAdmin), die die Berechtigungserviceusage.services.enableenthält. Weitere Informationen zum Zuweisen von Rollengcloud services enable cloudresourcemanager.googleapis.com
compute.googleapis.com container.googleapis.com iamcredentials.googleapis.com -
Installieren Sie die Google Cloud CLI.
-
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init -
Erstellen Sie ein Google Cloud Projekt oder wählen Sie eines aus.
Rollen, die zum Auswählen oder Erstellen eines Projekts erforderlich sind
- Projekt auswählen: Für die Auswahl eines Projekts ist keine bestimmte IAM-Rolle erforderlich. Sie können jedes Projekt auswählen, für das Ihnen eine Rolle zugewiesen wurde.
-
Projekt erstellen: Zum Erstellen eines Projekts benötigen Sie die Rolle „Projektersteller“ (
roles/resourcemanager.projectCreator), die die Berechtigungresourcemanager.projects.createenthält. Weitere Informationen zum Zuweisen von Rollen
-
So erstellen Sie ein Google Cloud -Projekt:
gcloud projects create PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch einen Namen für das Google Cloud -Projekt, das Sie erstellen. -
Wählen Sie das von Ihnen erstellte Google Cloud Projekt aus:
gcloud config set project PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch den Namen Ihres Projekts in Google Cloud .
-
Prüfen Sie, ob für Ihr Google Cloud Projekt die Abrechnung aktiviert ist.
Aktivieren Sie die Cloud Resource Manager API, die Compute Engine API, die GKE API und die IAM Service Account Credentials API:
Rollen, die zum Aktivieren von APIs erforderlich sind
Zum Aktivieren von APIs benötigen Sie die IAM-Rolle „Service Usage-Administrator“ (
roles/serviceusage.serviceUsageAdmin), die die Berechtigungserviceusage.services.enableenthält. Weitere Informationen zum Zuweisen von Rollengcloud services enable cloudresourcemanager.googleapis.com
compute.googleapis.com container.googleapis.com iamcredentials.googleapis.com -
Weisen Sie Ihrem Nutzerkonto Rollen zu. Führen Sie den folgenden Befehl für jede der folgenden IAM-Rollen einmal aus:
roles/compute.securityAdmin, roles/compute.viewer, roles/container.clusterAdmin, roles/container.admin, roles/iam.serviceAccountAdmin, roles/iam.serviceAccountUser, roles/monitoring.viewergcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
Ersetzen Sie Folgendes:
PROJECT_ID: Ihre Projekt-ID.USER_IDENTIFIER: Die Kennung für Ihr Nutzerkonto . Beispiel:myemail@example.comROLE: Die IAM-Rolle, die Sie Ihrem Nutzerkonto zuweisen.
Umgebung einrichten
So richten Sie Ihre Umgebung mit Cloud Shell ein:
Legen Sie Umgebungsvariablen für Ihr Projekt, Ihre Region und ein Kubernetes-Clusterressourcenpräfix fest:
export PROJECT_ID=PROJECT_ID export KUBERNETES_CLUSTER_PREFIX=weaviate export REGION=us-central1Ersetzen Sie
PROJECT_IDdurch Ihre Google CloudProjekt-ID.In dieser Anleitung wird die Region
us-central1verwendet, um Ihre Bereitstellungsressourcen zu erstellen.Prüfen Sie die Helm-Version:
helm versionAktualisieren Sie die Version, wenn sie älter als 3.13 ist:
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bashKlonen Sie das Beispielcode-Repository aus GitHub:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samplesRufen Sie das Verzeichnis
weaviateauf:cd kubernetes-engine-samples/databases/weaviate
Clusterinfrastruktur erstellen
In diesem Abschnitt führen Sie ein Terraform-Skript aus, um einen privaten, hochverfügbaren regionalen GKE-Cluster zum Bereitstellen Ihrer Weaviate-Datenbank zu erstellen.
Sie können Weaviate mit einem Standard- oder Autopilot-Cluster bereitstellen. Jede hat ihre eigenen Vorteile und unterschiedliche Preismodelle.
Autopilot
Das folgende Diagramm zeigt einen im Projekt bereitgestellten Autopilot-GKE-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}
GKE ersetzt die folgenden Variablen zur Laufzeit:
GOOGLE_OAUTH_ACCESS_TOKENruft mit dem Befehlgcloud auth print-access-tokenein Zugriffstoken ab, das Interaktionen mit verschiedenen Google Cloud APIs authentifiziert.PROJECT_ID,REGIONundKUBERNETES_CLUSTER_PREFIXsind 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 weaviate-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
ServiceAccountmit 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.
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}
GKE ersetzt die folgenden Variablen zur Laufzeit:
GOOGLE_OAUTH_ACCESS_TOKENruft mit dem Befehlgcloud auth print-access-tokenein Zugriffstoken ab, das Interaktionen mit verschiedenen Google Cloud APIs authentifiziert.PROJECT_ID,REGIONundKUBERNETES_CLUSTER_PREFIXsind 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 weaviate-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-central1mit aktiviertem Autoscaling (ein bis zwei Knoten pro Zone). - Ein
ServiceAccountmit 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}
Weaviate-Datenbank in Ihrem Cluster bereitstellen
So stellen Sie die Weaviate-Datenbank mithilfe des Helm-Diagramms in Ihrem GKE-Cluster bereit:
Fügen Sie das Helm-Diagramm-Repository der Weaviate-Datenbank hinzu, bevor Sie es in Ihrem GKE-Cluster bereitstellen können:
helm repo add weaviate https://weaviate.github.io/weaviate-helmErstellen Sie den Namespace
weaviatefür die Datenbank:kubectl create ns weaviateErstellen Sie ein Secret zum Speichern des API-Schlüssels:
kubectl create secret generic apikeys --from-literal=AUTHENTICATION_APIKEY_ALLOWED_KEYS=$(openssl rand -base64 32) -n weaviateStellen Sie einen internen Load Balancer bereit, um von innerhalb des virtuellen Netzwerks auf Weaviate zuzugreifen:
kubectl apply -n weaviate -f manifests/05-ilb/ilb.yamlDas Manifest
ilb.yamlbeschreibt den Load-Balancer-Dienst:Wenden Sie das Manifest an, um den Weaviate-Cluster bereitzustellen:
helm upgrade --install "weaviate" weaviate/weaviate \ --namespace "weaviate" \ --values ./manifests/01-basic-cluster/weaviate_cluster.yamlDas
weaviate_cluster.yaml-Manifest beschreibt das Deployment. Ein Deployment ist ein Kubernetes-API-Objekt, mit dem Sie mehrere Replikate von Pods ausführen können, die auf die Knoten in einem Cluster verteilt sind:Warten Sie einige Minuten, bis der Weaviate-Cluster vollständig gestartet wurde.
Prüfen Sie den Bereitstellungsstatus:
kubectl get weaviate -n weaviate --watchWenn die
weaviate-Datenbank erfolgreich bereitgestellt wurde, sieht die Ausgabe in etwa so aus:NAME: weaviate LAST DEPLOYED: Tue Jun 18 13:15:53 2024 NAMESPACE: weaviate STATUS: deployed REVISION: 1 TEST SUITE: NoneWarten Sie, bis Kubernetes die Ressourcen startet:
kubectl wait pods -l app.kubernetes.io/name=weaviate --for condition=Ready --timeout=300s -n weaviate
Abfragen mit einem Vertex AI Colab Enterprise-Notebook ausführen
In diesem Abschnitt wird beschrieben, wie Sie mit Colab Enterprise eine Verbindung zu Ihrer Weaviate-Datenbank herstellen.
Sie können eine spezielle Runtime-Vorlage auf dem weaviate-vpc bereitzustellen, damit das Notebook mit Ressourcen im GKE-Cluster kommunizieren kann.
Weitere Informationen zu Vertex AI Colab Enterprise finden Sie in der Colab Enterprise-Dokumentation.
Laufzeitvorlage erstellen.
So erstellen Sie eine Colab Enterprise-Laufzeitvorlage:
Rufen Sie in der Google Cloud Console die Seite Laufzeitvorlagen für Colab Enterprise auf und prüfen Sie, ob Ihr Projekt ausgewählt ist:
Klicken Sie auf add_box Neue Vorlage. Die Seite Neue Laufzeitvorlage erstellen wird angezeigt.
Im Abschnitt Laufzeitgrundlagen:
- Geben Sie im Feld Anzeigename den Wert
weaviate-connectein. - Wählen Sie in der Drop-down-Liste Region
us-central1aus. Es ist dieselbe Region wie Ihr GKE-Cluster.
- Geben Sie im Feld Anzeigename den Wert
Im Abschnitt Compute konfigurieren:
- Wählen Sie in der Drop-down-Liste Maschinentyp die Option
e2-standard-2aus. - Geben Sie im Feld Laufwerkgröße den Wert
30ein.
- Wählen Sie in der Drop-down-Liste Maschinentyp die Option
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.
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:
Klicken Sie in der Liste der Laufzeitvorlagen für die gerade erstellte Vorlage in der Spalte Aktionen auf more_vert und dann auf Laufzeit erstellen. Der Bereich Vertex AI-Laufzeit erstellen wird angezeigt.
Klicken Sie auf Erstellen, um eine Laufzeit auf Grundlage Ihrer Vorlage zu erstellen.
Warten Sie auf dem Tab Laufzeiten, bis der Status zu Fehlerfrei wechselt.
Notebook importieren
So importieren Sie das Notebook in Colab Enterprise:
Rufen Sie den Tab Meine Notebooks auf und klicken Sie auf Importieren. Der Bereich Notebooks importieren wird angezeigt.
Wählen Sie unter Importquelle die Option URL aus.
Geben Sie unter Notebook-URLs den folgenden Link ein:
https://raw.githubusercontent.com/GoogleCloudPlatform/kubernetes-engine-samples/main/databases/weaviate/manifests/02-notebook/vector-database.ipynbKlicken Sie auf Importieren.
Mit der Laufzeit verbinden und Abfragen ausführen
So stellen Sie eine Verbindung zur Laufzeit her und führen Abfragen aus:
Klicken Sie im Notebook neben dem Button Verbinden auf das arrow_drop_down Zusätzliche Verbindungsoptionen. Der Bereich Mit Vertex AI-Laufzeit verbinden wird angezeigt.
Wählen Sie Mit einer Laufzeit verbinden und dann Mit einer vorhandenen Laufzeit verbinden aus.
Wählen Sie die Laufzeit aus, die Sie gestartet haben, und klicken Sie auf Verbinden.
Klicken Sie zum Ausführen der Notebook-Zellen neben jeder Codezelle auf den Button Zelle ausführen.
Das Notebook enthält sowohl Codezellen als auch Text, der jeden Codeblock 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:
Der private GKE-Cluster im Diagramm enthält die folgenden Komponenten:
- Weaviate-Pods, die Messwerte für den Pfad
/metricsund den Port2112verfügbar machen. - Prometheus-basierte Collectors, die die Messwerte aus den Weaviate-Pods verarbeiten.
- Eine PodMonitoring-Ressource, die Messwerte an Cloud Monitoring sendet.
So exportieren Sie die Messwerte und zeigen sie an:
Erstellen Sie die
PodMonitoring-Ressource, um Messwerte nachlabelSelectorzu extrahieren:kubectl apply -n weaviate -f manifests/03-prometheus-metrics/pod-monitoring.yamlDas
pod-monitoring.yaml-Manifest beschreibt diePodMonitoring-Ressource:So importieren Sie ein benutzerdefiniertes Cloud Monitoring-Dashboard mit den in
dashboard.jsondefinierten Konfigurationen:gcloud --project "${PROJECT_ID}" monitoring dashboards create --config-from-file monitoring/dashboard.jsonNachdem der Befehl erfolgreich ausgeführt wurde, rufen Sie die Cloud Monitoring-Dashboards auf:
Öffnen Sie in der Liste der Dashboards das
Weaviate Overview-Dashboard. Es kann einige Zeit dauern, bis Messwerte erfasst und angezeigt werden. Im Dashboard werden die Anzahl der Shards, Vektoren und die Latenz von Vorgängen angezeigt.
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.
Google Cloud -Projekt löschen:
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
Umgebungsvariablen festlegen
export PROJECT_ID=${PROJECT_ID} export KUBERNETES_CLUSTER_PREFIX=weaviate export REGION=us-central1Führen Sie den Befehl
terraform destroyaus: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
FOLDERje nach Typ des von Ihnen erstellten GKE-Clusters durchgke-autopilotodergke-standard.Geben Sie bei Aufforderung
yesein.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)")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 doneGitHub-Repository löschen:
rm -r ~/kubernetes-engine-samples/