Ce tutoriel vous explique comment déployer un cluster de base de données vectorielle PostgreSQL sur Google Kubernetes Engine (GKE).
PostgreSQL est fourni avec un éventail de modules et d'extensions qui étendent les fonctionnalités de la base de données. Dans ce tutoriel, vous allez installer l'extension pgvector sur un cluster PostgreSQL existant déployé dans GKE. L'extension Pgvector vous permet de stocker des vecteurs dans les tables de base de données en ajoutant des types de vecteurs à PostgreSQL. Pgvector propose également des recherches de similarités en exécutant des requêtes SQL courantes.
Nous simplifions le déploiement de l'extension PGvector en déployant d'abord l'opérateur CloudnativePG, car l'opérateur fournit une version groupée de l'extension.
Ce tutoriel est destiné aux administrateurs et architectes de plate-forme cloud, aux ingénieurs en ML et aux professionnels du MLOps (DevOps) qui souhaitent déployer des clusters de base de données PostgreSQL sur GKE.
Objectifs
Dans ce tutoriel, vous allez apprendre à effectuer les opérations suivantes :
- Déployer l'infrastructure GKE pour PostgreSQL.
- Installer l'extension pgvector sur le cluster PostgreSQL déployé sur GKE.
- Déployer et configurer l'opérateur CloudNativePG PostgreSQL avec Helm.
- Importer un ensemble de données de démonstration et exécuter des requêtes de recherche avec un notebook Jupyter.
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
Pour obtenir une estimation des coûts en fonction de votre utilisation prévue, utilisez le simulateur de coût.
Une fois que vous avez terminé les tâches décrites dans ce document, supprimez les ressources que vous avez créées pour éviter que des frais vous soient facturés. Pour en savoir plus, consultez la section Effectuer un nettoyage.
Avant de commencer
Dans ce tutoriel, vous utilisez Cloud Shell pour exécuter des commandes. Cloud Shell est un environnement shell permettant de gérer les ressources hébergées sur Google Cloud. Il est doté des outils de ligne de commande préinstallés suivants : Google Cloud CLI, kubectl, Helm et Terraform. Si vous n'utilisez pas Cloud Shell, vous devez installer la Google Cloud CLI.
- Connectez-vous à votre compte Google Cloud . Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $de crédits sans frais pour exécuter, tester et déployer des charges de travail.
-
Installez la Google Cloud CLI.
-
Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.
-
Pour initialiser la gcloud CLI, exécutez la commande suivante :
gcloud init -
Créez ou sélectionnez un projet Google Cloud .
Rôles requis pour sélectionner ou créer un projet
- Sélectionnez un projet : la sélection d'un projet ne nécessite pas de rôle IAM spécifique. Vous pouvez sélectionner n'importe quel projet pour lequel un rôle vous a été attribué.
-
Créer un projet : pour créer un projet, vous devez disposer du rôle Créateur de projet (
roles/resourcemanager.projectCreator), qui contient l'autorisationresourcemanager.projects.create. Découvrez comment attribuer des rôles.
-
Créez un projet Google Cloud :
gcloud projects create PROJECT_ID
Remplacez
PROJECT_IDpar le nom du projet Google Cloud que vous créez. -
Sélectionnez le projet Google Cloud que vous avez créé :
gcloud config set project PROJECT_ID
Remplacez
PROJECT_IDpar le nom de votre projet Google Cloud .
-
Vérifiez que la facturation est activée pour votre projet Google Cloud .
Activez les API Cloud Resource Manager, Compute Engine, GKE et IAM Service Account Credentials :
Rôles requis pour activer les API
Pour activer les API, vous avez besoin du rôle IAM Administrateur Service Usage (
roles/serviceusage.serviceUsageAdmin), qui contient l'autorisationserviceusage.services.enable. Découvrez comment attribuer des rôles.gcloud services enable cloudresourcemanager.googleapis.com
compute.googleapis.com container.googleapis.com iamcredentials.googleapis.com -
Installez la Google Cloud CLI.
-
Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.
-
Pour initialiser la gcloud CLI, exécutez la commande suivante :
gcloud init -
Créez ou sélectionnez un projet Google Cloud .
Rôles requis pour sélectionner ou créer un projet
- Sélectionnez un projet : la sélection d'un projet ne nécessite pas de rôle IAM spécifique. Vous pouvez sélectionner n'importe quel projet pour lequel un rôle vous a été attribué.
-
Créer un projet : pour créer un projet, vous devez disposer du rôle Créateur de projet (
roles/resourcemanager.projectCreator), qui contient l'autorisationresourcemanager.projects.create. Découvrez comment attribuer des rôles.
-
Créez un projet Google Cloud :
gcloud projects create PROJECT_ID
Remplacez
PROJECT_IDpar le nom du projet Google Cloud que vous créez. -
Sélectionnez le projet Google Cloud que vous avez créé :
gcloud config set project PROJECT_ID
Remplacez
PROJECT_IDpar le nom de votre projet Google Cloud .
-
Vérifiez que la facturation est activée pour votre projet Google Cloud .
Activez les API Cloud Resource Manager, Compute Engine, GKE et IAM Service Account Credentials :
Rôles requis pour activer les API
Pour activer les API, vous avez besoin du rôle IAM Administrateur Service Usage (
roles/serviceusage.serviceUsageAdmin), qui contient l'autorisationserviceusage.services.enable. Découvrez comment attribuer des rôles.gcloud services enable cloudresourcemanager.googleapis.com
compute.googleapis.com container.googleapis.com iamcredentials.googleapis.com -
Attribuez des rôles à votre compte utilisateur. Exécutez la commande suivante une fois pour chacun des rôles IAM suivants :
roles/compute.securityAdmin, roles/compute.viewer, roles/container.clusterAdmin, roles/container.admin, roles/iam.serviceAccountAdmin, roles/iam.serviceAccountUsergcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
Remplacez les éléments suivants :
PROJECT_ID: ID de votre projetUSER_IDENTIFIER: identifiant de votre compte d'utilisateur. Par exemple,myemail@example.com.ROLE: rôle IAM que vous accordez à votre compte utilisateur.
Configurer votre environnement
Pour configurer votre environnement avec Cloud Shell, procédez comme suit :
Définissez des variables d'environnement pour votre projet, une région et un préfixe de ressource de cluster Kubernetes :
export PROJECT_ID=PROJECT_ID export KUBERNETES_CLUSTER_PREFIX=postgres export REGION=us-central1- Remplacez
PROJECT_IDpar l'ID de votre projet Google Cloud.
Ce tutoriel utilise la région
us-central1.- Remplacez
Clonez l'exemple de dépôt de code depuis GitHub :
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samplesAccédez au répertoire
postgres-pgvector:cd kubernetes-engine-samples/databases/postgres-pgvector
Créer l'infrastructure de votre cluster
Dans cette section, vous allez exécuter un script Terraform pour créer un cluster GKE régional, privé et à disponibilité élevée pour déployer votre base de données PostgreSQL.
Vous pouvez choisir de déployer PostgreSQL à l'aide d'un cluster Standard ou Autopilot. Chacun présente ses propres avantages et différents modèles de tarification.
Autopilot
Pour déployer l'infrastructure du cluster Autopilot, exécutez les commandes suivantes dans Cloud Shell :
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 remplace les variables suivantes lors de l'exécution :
GOOGLE_OAUTH_ACCESS_TOKENutilise la commandegcloud auth print-access-tokenpour récupérer un jeton d'accès qui authentifie les interactions avec diverses API Google Cloud.PROJECT_ID,REGIONetKUBERNETES_CLUSTER_PREFIXsont les variables d'environnement définies dans la section Configurer votre environnement et attribuées aux nouvelles variables pertinentes pour le cluster Autopilot que vous êtes en train de créer.
Lorsque vous y êtes invité, saisissez yes.
Terraform crée les ressources suivantes :
- Un réseau VPC personnalisé et un sous-réseau privé pour les nœuds Kubernetes
- Un routeur cloud pour accéder à Internet via la traduction d'adresse réseau (NAT)
- Un cluster GKE privé dans la région
us-central1. - Un
ServiceAccountavec les autorisations de journalisation et de surveillance pour le cluster - Configuration de Google Cloud Managed Service pour Prometheus pour la surveillance et les alertes relatives au cluster.
Le résultat ressemble à ce qui suit :
...
Apply complete! Resources: 11 added, 0 changed, 0 destroyed.
...
Standard
Pour déployer l'infrastructure du cluster standard, exécutez les commandes suivantes dans Cloud Shell :
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 remplace les variables suivantes lors de l'exécution :
GOOGLE_OAUTH_ACCESS_TOKENutilise la commandegcloud auth print-access-tokenpour récupérer un jeton d'accès qui authentifie les interactions avec diverses API Google Cloud.PROJECT_ID,REGIONetKUBERNETES_CLUSTER_PREFIXsont les variables d'environnement définies dans la section Configurer votre environnement et attribuées aux nouvelles variables pertinentes pour le cluster Standard que vous êtes en train de créer.
Lorsque vous y êtes invité, saisissez yes. L'exécution de ces commandes et le passage du cluster à l'état prêt peuvent prendre plusieurs minutes.
Terraform crée les ressources suivantes :
- Un réseau VPC personnalisé et un sous-réseau privé pour les nœuds Kubernetes
- Un routeur cloud pour accéder à Internet via la traduction d'adresse réseau (NAT)
- Un cluster GKE privé dans la région
us-central1avec l'autoscaling activé (un à deux nœuds par zone) - Un
ServiceAccountavec les autorisations de journalisation et de surveillance pour le cluster - Configuration de Google Cloud Managed Service pour Prometheus pour la surveillance et les alertes relatives au cluster.
Le résultat ressemble à ce qui suit :
...
Apply complete! Resources: 14 added, 0 changed, 0 destroyed.
...
Se connecter au cluster
Configurez kubectl pour récupérer les identifiants et communiquer avec votre nouveau cluster GKE :
gcloud container clusters get-credentials \
${KUBERNETES_CLUSTER_PREFIX}-cluster --location ${REGION} --project ${PROJECT_ID}
Déployer l'opérateur CloudNativePG
Déployez CloudNativePG sur votre cluster Kubernetes à l'aide d'un chart Helm :
Vérifiez la version de Helm :
helm versionMettez à jour la version si elle est antérieure à la version 3.13 :
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bashAjoutez le dépôt du chart Helm de l'opérateur CloudNativePG :
helm repo add cnpg https://cloudnative-pg.github.io/chartsDéployez l'opérateur CloudNativePG à l'aide de l'outil de ligne de commande Helm :
helm upgrade --install cnpg \ --namespace cnpg-system \ --create-namespace \ cnpg/cloudnative-pgLe résultat ressemble à ce qui suit :
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 ...
Déployer la base de données vectorielle PostgreSQL
Dans cette section, vous allez déployer la base de données vectorielle PostgreSQL.
Créez un espace de noms
pg-nspour la base de données :kubectl create ns pg-nsAppliquez le fichier manifeste pour déployer le cluster PostgreSQL. Le fichier manifeste du cluster active l'extension pgvector.
kubectl apply -n pg-ns -f manifests/01-basic-cluster/postgreSQL_cluster.yamlLe fichier manifeste
postgreSQL_cluster.yamldécrit le déploiement :Vérifiez l'état du cluster :
kubectl get cluster -n pg-ns --watchAttendez que le résultat affiche l'état
Cluster in healthy stateavant de passer à l'étape suivante.
Exécuter des requêtes avec un notebook Vertex AI Colab Enterprise
Dans cette section, vous allez importer des vecteurs dans une table PostgreSQL et exécuter des requêtes de recherche sémantique à l'aide de la syntaxe SQL.
Vous vous connectez à votre base de données PostgreSQL à l'aide de Colab Enterprise.
Vous utilisez un modèle d'exécution dédié pour déployer le postgres-vpc. Le notebook peut ainsi communiquer avec les ressources du cluster GKE.
Pour en savoir plus sur Vertex AI Colab Enterprise, consultez la documentation Colab Enterprise.
Créer un modèle d'environnement d'exécution
Pour créer un modèle d'exécution Colab Enterprise :
Dans la console Google Cloud , accédez à la page Modèles d'exécution de Colab Enterprise et assurez-vous que votre projet est sélectionné :
Cliquez sur add_box Nouveau modèle. La page Créer un modèle d'exécution s'affiche.
Dans la section Principes de base de l'exécution :
- Dans le champ Nom à afficher, saisissez
pgvector-connect. - Dans la liste déroulante Région, sélectionnez
us-central1. Il s'agit de la même région que votre cluster GKE.
- Dans le champ Nom à afficher, saisissez
Dans la section Configurer le calcul :
- Dans la liste déroulante Type de machine, sélectionnez
e2-standard-2. - Dans le champ Taille de disque disponible, saisissez
30.
- Dans la liste déroulante Type de machine, sélectionnez
Dans la section Mise en réseau et sécurité :
- Dans la liste déroulante Réseau, sélectionnez le réseau sur lequel réside votre cluster GKE.
- Dans la liste déroulante Sous-réseau, sélectionnez un sous-réseau correspondant.
- Décochez la case Activer l'accès Internet public.
Pour terminer la création du modèle d'exécution, cliquez sur Créer. Votre modèle d'exécution apparaît dans la liste sur l'onglet Modèles d'exécution.
Créer un environnement d'exécution
Pour créer un environnement d'exécution Colab Enterprise :
Dans la liste des modèles d'exécution, dans la colonne Actions du modèle que vous venez de créer, cliquez sur more_vert, puis sur Créer une exécution. Le volet Créer un environnement d'exécution Vertex AI s'affiche.
Pour créer un environnement d'exécution basé sur votre modèle, cliquez sur Créer.
Dans l'onglet Environnements d'exécution qui s'ouvre, attendez que l'état passe à Sain.
Importer le notebook
Pour importer le notebook dans Colab Enterprise :
Accédez à l'onglet Mes notebooks, puis cliquez sur Importer. Le volet Importer des notebooks s'affiche.
Dans Source d'importation, sélectionnez URL.
Sous URL de notebook, saisissez le lien suivant :
https://raw.githubusercontent.com/epam/kubernetes-engine-samples/internal_lb/databases/postgres-pgvector/manifests/02-notebook/vector-database.ipynbCliquez sur Importer.
Se connecter à l'environnement d'exécution et exécuter des requêtes
Pour vous connecter à l'environnement d'exécution et exécuter des requêtes :
Dans le notebook, à côté du bouton Connecter, cliquez sur arrow_drop_down Options de connexion supplémentaires. Le volet Se connecter à l'environnement d'exécution Vertex AI s'affiche.
Sélectionnez Se connecter à un environnement d'exécution, puis Se connecter à un environnement d'exécution existant.
Sélectionnez l'environnement d'exécution que vous avez lancé, puis cliquez sur Connect (Se connecter).
Pour exécuter les cellules du notebook, cliquez sur le bouton Exécuter la cellule à côté de chaque cellule de code.
Le notebook contient à la fois des cellules de code et du texte qui décrit chaque bloc de code. L'exécution d'une cellule de code exécute ses commandes et affiche un résultat. Vous pouvez exécuter les cellules dans l'ordre ou exécuter des cellules individuelles selon vos besoins.
Effectuer un nettoyage
Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.
Supprimer le projet
Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.
Supprimer un projet Google Cloud :
gcloud projects delete PROJECT_ID
Si vous avez supprimé le projet, le nettoyage est terminé. Si vous n'avez pas supprimé le projet, suivez les étapes ci-après afin de supprimer les ressources individuelles.
Supprimer des ressources individuelles
Définissez les variables d'environnement.
export PROJECT_ID=${PROJECT_ID} export KUBERNETES_CLUSTER_PREFIX=postgres export REGION=us-central1Exécutez la commande
terraform destroy: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}Remplacez
FOLDERpargke-autopilotougke-standard, selon le type de cluster GKE que vous avez créé.Lorsque vous y êtes invité, saisissez
yes.
Étapes suivantes
- Découvrez comment déployer des clusters PostgreSQL sur GKE à l'aide de l'opérateur CloudNativePG.
- Découvrez les bonnes pratiques pour le déploiement de bases de données sur GKE.
- Découvrez des solutions pour exécuter des charges de travail utilisant beaucoup de données avec GKE.