In dieser Anleitung wird beschrieben, wie Sie einen PostgreSQL-Vektordatenbankcluster in Google Kubernetes Engine (GKE) bereitstellen.
PostgreSQL bietet eine Reihe von Modulen und Erweiterungen, die die Funktionalität der Datenbank erweitern. In dieser Anleitung installieren Sie die Erweiterung pgvector in einem vorhandenen PostgreSQL-Cluster, der in GKE bereitgestellt wird. Mit der Pgvector-Erweiterung können Sie Vektoren in den Datenbanktabellen speichern, indem Sie PostgreSQL Vektortypen hinzufügen. pgvector bietet auch Ähnlichkeitssuchen durch Ausführen gängiger SQL-Abfragen.
Wir vereinfachen die Bereitstellung der PGvector-Erweiterung, indem wir zuerst den CloudnativePG-Operator bereitstellen, da der Operator eine gebündelte Version der Erweiterung bereitstellt.
Diese Anleitung richtet sich an Cloud Platform-Administratoren und -Architekten, ML-Entwickler und MLOps-Experten (DevOps), die an der Bereitstellung von PostgreSQL-Datenbankclustern auf GKE interessiert sind.
Lernziele
In dieser Anleitung erfahren Sie mehr über die folgenden Themen:
- GKE-Infrastruktur für PostgreSQL bereitstellen
- Installieren Sie die pgvector-Erweiterung auf dem PostgreSQL-Cluster, der in GKE bereitgestellt wird.
- CloudNativePG PostgreSQL-Operator mit Helm bereitstellen und konfigurieren
- Ein Demo-Dataset hochladen und Suchanfragen mit Jupyter-Notebook ausfü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.
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.
- 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.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Resource Manager, Compute Engine, GKE, and IAM Service Account Credentials APIs:
gcloud services enable cloudresourcemanager.googleapis.com
compute.googleapis.com container.googleapis.com iamcredentials.googleapis.com -
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Resource Manager, Compute Engine, GKE, and IAM Service Account Credentials APIs:
gcloud services enable cloudresourcemanager.googleapis.com
compute.googleapis.com container.googleapis.com iamcredentials.googleapis.com -
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/compute.securityAdmin, roles/compute.viewer, roles/container.clusterAdmin, roles/container.admin, roles/iam.serviceAccountAdmin, roles/iam.serviceAccountUser
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
- Replace
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
- Replace
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=postgres export REGION=us-central1
- Ersetzen Sie
PROJECT_ID
durch Ihre Projekt-ID. Google Cloud
In dieser Anleitung wird die Region
us-central1
verwendet.- Ersetzen Sie
Klonen Sie das Beispielcode-Repository aus GitHub:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
Rufen Sie das Verzeichnis
postgres-pgvector
auf:cd kubernetes-engine-samples/databases/postgres-pgvector
Clusterinfrastruktur erstellen
In diesem Abschnitt führen Sie ein Terraform-Skript aus, um einen privaten, hochverfügbaren regionalen GKE-Cluster zum Bereitstellen Ihrer PostgreSQL-Datenbank zu erstellen.
Sie können PostgreSQL mit einem Standard- oder Autopilot-Cluster bereitstellen. Jede hat ihre eigenen Vorteile und unterschiedliche Preismodelle.
Autopilot
Führen Sie die folgenden Befehle in Cloud Shell aus, um die Autopilot-Clusterinfrastruktur bereitzustellen:
export GOOGLE_OAUTH_ACCESS_TOKEN=$(gcloud auth print-access-token)
terraform -chdir=../postgresql-cloudnativepg/terraform/gke-autopilot init
terraform -chdir=../postgresql-cloudnativepg/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_TOKEN
ruft mit dem Befehlgcloud auth print-access-token
ein Zugriffstoken ab, das Interaktionen mit verschiedenen Google Cloud APIs authentifiziert.PROJECT_ID
,REGION
undKUBERNETES_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.
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.
Die Ausgabe sieht in etwa so aus:
...
Apply complete! Resources: 11 added, 0 changed, 0 destroyed.
...
Standard
Führen Sie die folgenden Befehle in der Cloud Shell aus, um die Infrastruktur des Standardclusters bereitzustellen:
export GOOGLE_OAUTH_ACCESS_TOKEN=$(gcloud auth print-access-token)
terraform -chdir=../postgresql-cloudnativepg/terraform/gke-standard init
terraform -chdir=../postgresql-cloudnativepg/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_TOKEN
ruft mit dem Befehlgcloud auth print-access-token
ein Zugriffstoken ab, das Interaktionen mit verschiedenen Google Cloud APIs authentifiziert.PROJECT_ID
,REGION
undKUBERNETES_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.
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.
Die Ausgabe sieht in etwa so aus:
...
Apply complete! Resources: 14 added, 0 changed, 0 destroyed.
...
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 --region ${REGION} --project ${PROJECT_ID}
CloudNativePG-Operator bereitstellen
Stellen Sie die CloudNativePG mithilfe eines Helm-Diagramms in Ihrem Kubernetes-Cluster bereit:
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
Fügen Sie das Helm-Diagramm-Repository für den CloudNativePG-Operator hinzu:
helm repo add cnpg https://cloudnative-pg.github.io/charts
Stellen Sie den CloudNativePG-Operator mit dem Helm-Befehlszeilentool bereit:
helm upgrade --install cnpg \ --namespace cnpg-system \ --create-namespace \ cnpg/cloudnative-pg
Die Ausgabe sieht in etwa so aus:
Release "cnpg" does not exist. Installing it now. NAME: cnpg LAST DEPLOYED: Fri Oct 13 13:52:36 2023 NAMESPACE: cnpg-system STATUS: deployed REVISION: 1 TEST SUITE: None ...
PostgreSQL-Vektordatenbank bereitstellen
In diesem Abschnitt stellen Sie die PostgreSQL-Vektordatenbank bereit.
Erstellen Sie einen Namespace
pg-ns
für die Datenbank:kubectl create ns pg-ns
Wenden Sie das Manifest an, um den PostgreSQL-Cluster bereitzustellen: Das Clustermanifest aktiviert die pgvector-Erweiterung.
kubectl apply -n pg-ns -f manifests/01-basic-cluster/postgreSQL_cluster.yaml
Das
postgreSQL_cluster.yaml
-Manifest beschreibt das Deployment:Prüfen Sie den Clusterstatus:
kubectl get cluster -n pg-ns --watch
Warten Sie, bis die Ausgabe den Status
Cluster in healthy state
anzeigt, bevor Sie mit dem nächsten Schritt fortfahren.
Abfragen mit einem Vertex AI Colab Enterprise-Notebook ausführen
In diesem Abschnitt laden Sie Vektoren in eine PostgreSQL-Tabelle hoch und führen semantische Suchanfragen mit SQL-Syntax aus.
Sie stellen mit Colab Enterprise eine Verbindung zu Ihrer PostgreSQL-Datenbank her.
Sie verwenden eine spezielle Runtime-Vorlage, um die Bereitstellung auf dem postgres-vpc
vorzunehmen, 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 Colab Enterprise-Seite Laufzeitvorlagen 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
pgvector-connect
ein. - Wählen Sie in der Drop-down-Liste Region
us-central1
aus. 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-2
aus. - Geben Sie im Feld Laufwerkgröße den Wert
30
ein.
- 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:
Klicken Sie auf den Tab Meine Notebooks und dann 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/epam/kubernetes-engine-samples/internal_lb/databases/postgres-pgvector/manifests/02-notebook/vector-database.ipynb
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:
Klicken Sie im Notebook neben der Schaltfläche Verbinden auf 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 Connect (Verbinden).
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.
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
Umgebungsvariablen festlegen
export PROJECT_ID=${PROJECT_ID} export KUBERNETES_CLUSTER_PREFIX=postgres export REGION=us-central1
Führen Sie den Befehl
terraform destroy
aus:export GOOGLE_OAUTH_ACCESS_TOKEN=$(gcloud auth print-access-token) terraform -chdir=../postgresql-cloudnativepg/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 durchgke-autopilot
odergke-standard
.Geben Sie bei Aufforderung
yes
ein.