Ce tutoriel explique comment déployer un cluster de base de données vectorielles Elasticsearch sur Google Kubernetes Engine (GKE).
Les bases de données vectorielles sont des data stores spécialement conçus pour gérer de vastes collections de vecteurs de grande dimension et faire des recherches dans celles-ci. Ces vecteurs représentent des données telles que du texte, des images, de l'audio, des vidéos ou toute autre donnée pouvant être encodée numériquement. Contrairement aux bases de données relationnelles qui reposent sur des correspondances exactes, les bases de données vectorielles sont spécialisées dans la recherche d'éléments similaires ou dans l'identification de modèles dans des ensembles de données volumineux.
Elasticsearch est une base de données vectorielles qui combine des fonctionnalités de recherche et d'analyse. Elle est fournie avec une API REST ouverte pour la gestion de clusters. Elle est compatible avec les requêtes structurées, les requêtes en texte intégral et les requêtes complexes. Elasticsearch vous permet d'effectuer des recherches d'expressions, de similarités et de préfixes à l'aide de suggestions de saisie semi-automatique.
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 Qdrant sur GKE.
Avantages
Elasticsearch offre les avantages suivants :
- Large éventail de bibliothèques pour différents langages de programmation et API ouverte à intégrer à d'autres services
- Scaling horizontal, et compatibilité avec la segmentation et la réplication afin de faciliter le scaling et la haute disponibilité
- Équilibrage de clusters multinœuds pour une utilisation optimale des ressources
- Prise en charge des conteneurs et de Kubernetes pour une intégration parfaite dans des environnements cloud natifs modernes.
Objectifs
Dans ce tutoriel, vous allez apprendre à effectuer les opérations suivantes :
- Planifier et déployer l'infrastructure GKE pour Elasticsearch.
- Déployer et configurer Elasticsearch dans un cluster GKE.
- Déployer l'opérateur StatefulHA pour garantir la haute disponibilité d'Elasticsearch.
- Importer un ensemble de données de démonstration et exécuter une requête de recherche.
- Collectez et visualisez des métriques dans un tableau de bord.
Architecture de déploiement
Dans ce tutoriel, vous allez déployer un cluster GKE régional à disponibilité élevée pour Elasticsearch, avec plusieurs nœuds Kubernetes répartis sur plusieurs zones de disponibilité. Cette configuration permet d'assurer la tolérance aux pannes, l'évolutivité et la redondance géographique. Il permet d'effectuer des mises à jour et des opérations de maintenance progressives tout en fournissant des contrats de niveau de service en matière de disponibilité et de disponibilité. Pour en savoir plus, consultez la page Clusters régionaux.
Lorsqu'un nœud devient inaccessible, un pod de ce nœud n'est pas reprogrammé immédiatement. Avec les pods utilisant un StatefulSet, la suppression et le replanification des pods d'application sur de nouveaux nœuds peuvent prendre plus de huit minutes.
Pour résoudre ce problème, l'opérateur StatefulHA effectue les opérations suivantes :
- Résout le délai de replanification, gère les paramètres de basculement et réduit le temps de récupération avec
.forceDeleteStrategy
: paramètresAfterNodeUnreachable
. - Garantit que l'application du StatefulSet utilise un disque persistant régional.
- Étend GKE avec une ressource HighAvailabilityApplication personnalisée déployée dans le même espace de noms qu'Elasticsearch. Cela permet à l'opérateur StatefulHA de surveiller les événements de basculement et d'y répondre.
Le schéma suivant montre un cluster Elasticsearch s'exécutant sur plusieurs nœuds et zones dans un cluster GKE :
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
Une fois que vous avez terminé les tâches décrites dans ce document, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Pour en savoir plus, consultez la section Effectuer un nettoyage.
L'utilisation d'Elasticsearch est gratuite dans le cadre de la licence publique côté serveur (SSPL, Server Side Public License).
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.
- 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.
-
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, 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 - Install the Google Cloud CLI.
-
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, 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 -
Grant roles to your user account. Run the following command once for each of the following IAM roles:
role/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
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
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=elasticsearch export REGION=us-central1
- Remplacez
PROJECT_ID
par l'ID de votre projet Google Cloud.
Ce tutoriel utilise la région
us-central1
pour créer les ressources de déploiement.- Remplacez
Vérifiez la version de Helm :
helm version
Mettez à jour la version si elle est antérieure à la version 3.13 :
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
Clonez l'exemple de dépôt de code depuis GitHub :
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
Accédez au répertoire
elasticsearch
pour commencer à créer des ressources de déploiement :cd kubernetes-engine-samples/databases/elasticsearch
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 Elasticsearch.
Vous pouvez choisir de déployer Elasticsearch à l'aide d'un cluster Standard ou Autopilot. Chacun présente ses propres avantages et différents modèles de tarification.
Autopilot
Le schéma suivant présente un cluster GKE Autopilot déployé dans le projet.
Pour déployer l'infrastructure du cluster, exécutez les commandes suivantes dans Cloud Shell :
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 remplace les variables suivantes lors de l'exécution :
GOOGLE_OAUTH_ACCESS_TOKEN
utilise la commandegcloud auth print-access-token
pour récupérer un jeton d'accès qui authentifie les interactions avec diverses API Google Cloud.PROJECT_ID
,REGION
etKUBERNETES_CLUSTER_PREFIX
sont 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
.
Le résultat ressemble à ce qui suit :
...
Apply complete! Resources: 9 added, 0 changed, 0 destroyed.
Outputs:
kubectl_connection_command = "gcloud container clusters get-credentials elasticsearch-cluster --region us-central1"
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
ServiceAccount
avec 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.
Standard
Le schéma suivant présente un cluster GKE régional privé Standard déployé dans trois zones différentes.
Pour déployer l'infrastructure du cluster, exécutez les commandes suivantes dans Cloud Shell :
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 remplace les variables suivantes lors de l'exécution :
GOOGLE_OAUTH_ACCESS_TOKEN
utilise la commandegcloud auth print-access-token
pour récupérer un jeton d'accès qui authentifie les interactions avec diverses API Google Cloud.PROJECT_ID
,REGION
etKUBERNETES_CLUSTER_PREFIX
sont 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.
Le résultat ressemble à ce qui suit :
...
Apply complete! Resources: 10 added, 0 changed, 0 destroyed.
Outputs:
kubectl_connection_command = "gcloud container clusters get-credentials elasticsearch-cluster --region us-central1"
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
avec l'autoscaling activé (un à deux nœuds par zone) - Un
ServiceAccount
avec 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.
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 --region ${REGION}
Déployer la base de données Elasticsearch et l'opérateur StatefulHA
Dans cette section, vous allez déployer la base de données Elasticsearch (en mode cluster) et l'opérateur StatefulHA sur votre cluster GKE à l'aide du chart Helm d'opérateur ECK.
Le déploiement crée un cluster GKE avec la configuration suivante :
- Trois instances dupliquées des nœuds Elasticsearch.
- DaemonSet permettant de modifier les paramètres de mémoire virtuelle, afin d'optimiser les performances d'Elasticsearch.
- Configuration de NodeAffinity et PodAntiAffinity pour garantir une distribution appropriée entre les nœuds Kubernetes, en optimisant l'utilisation des pools de nœuds et en maximisant la disponibilité dans les différentes zones.
- Un opérateur HA avec état qui gère les processus de basculement et garantit la haute disponibilité.
- Pour l'authentification, la base de données crée des secrets Kubernetes avec des identifiants, des mots de passe et des certificats d'authentification.
Pour déployer la base de données Elasticsearch à l'aide du chart Helm, procédez comme suit :
Activez le module complémentaire StatefulHA :
Autopilot
GKE active automatiquement le module complémentaire
StatefulHA
lors de la création du cluster.Standard
Exécutez la commande ci-dessous.
gcloud container clusters update ${KUBERNETES_CLUSTER_PREFIX}-cluster \ --project=${PROJECT_ID} \ --region=${REGION} \ --update-addons=StatefulHA=ENABLED
L'exécution de cette commande et le passage du cluster à l'état prêt peuvent prendre 15 minutes.
Créez une définition de ressource personnalisée (CRD) Elastic Cloud sur Kubernetes (ECK) :
kubectl apply -f https://download.elastic.co/downloads/eck/2.11.1/crds.yaml
Déployez l'opérateur ECK :
kubectl apply -f https://download.elastic.co/downloads/eck/2.11.1/operator.yaml
Créez l'espace de noms
elastic
pour la base de données :kubectl create ns elastic
Installez la ressource
HighAvailabilityApplication
(HAA), qui définit les règles de basculement pour Elasticsearch.kubectl apply -n elastic -f manifests/01-regional-pd/ha-app.yaml
Le fichier manifeste
ha-app.yaml
décrit la ressourceHighAvailabilityApplication
:Appliquez le fichier manifeste pour créer un disque SSD persistant régional
StorageClass
:kubectl apply -n elastic -f manifests/01-regional-pd/regional-pd.yaml
Le fichier manifeste
regional-pd.yaml
décrit le disque SSD persistantStorageClass
:Déployez la ressource DaemonSet pour définir la mémoire virtuelle dans chaque nœud :
kubectl apply -n elastic -f manifests/02-elasticsearch/mmap-count.yaml
Le fichier manifeste
mmap-count.yaml
décrit l'objetDaemonSet
:Appliquez le fichier manifeste pour déployer le cluster Elasticsearch :
kubectl apply -n elastic -f manifests/02-elasticsearch/elasticsearch.yaml
Le fichier manifeste
elasticsearch.yaml
décrit le déploiement :Attendez quelques minutes que le cluster Elasticsearch démarre complètement.
Vérifiez l'état du déploiement :
kubectl get elasticsearch -n elastic --watch
Le résultat ressemble à ce qui suit, si la base de données
elasticsearch
est bien déployée :NAME HEALTH NODES VERSION PHASE AGE elasticsearch-ha green 3 8.11.4 Ready 2m30s
Attendez que
HEALTH
apparaisse commegreen
. Appuyez sur Ctrl+C pour quitter la commande si nécessaire.Pour vérifier si les règles de basculement sont appliquées, décrivez la ressource et confirmez
Status: Message: Application is protected
.kubectl describe highavailabilityapplication elasticsearch-ha-es-main -n elastic
Le résultat est semblable à celui-ci :
Status: Conditions: Last Transition Time: 2024-02-01T13:27:50Z Message: Application is protected Observed Generation: 1 Reason: ApplicationProtected Status: True Type: Protected Events: <none>
Une fois que GKE a démarré les charges de travail, vérifiez qu'il a créé les charges de travail Elasticsearch :
kubectl get pod,svc,statefulset,pdb,secret,daemonset -n elastic
Le résultat ressemble à ce qui suit :
NAME READY STATUS RESTARTS AGE pod/elasticsearch-ha-es-main-0 2/2 Running 0 7m16s pod/elasticsearch-ha-es-main-1 2/2 Running 0 7m16s pod/elasticsearch-ha-es-main-2 2/2 Running 0 7m16s pod/max-map-count-setter-28wt9 1/1 Running 0 7m27s pod/max-map-count-setter-cflsw 1/1 Running 0 7m27s pod/max-map-count-setter-gzq9k 1/1 Running 0 7m27s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/elasticsearch-ha-es-http ClusterIP 10.52.8.28 <none> 9200/TCP 7m18s service/elasticsearch-ha-es-internal-http ClusterIP 10.52.3.48 <none> 9200/TCP 7m18s service/elasticsearch-ha-es-main ClusterIP None <none> 9200/TCP 7m16s service/elasticsearch-ha-es-transport ClusterIP None <none> 9300/TCP 7m18s NAME READY AGE statefulset.apps/elasticsearch-ha-es-main 3/3 7m16s NAME MIN AVAILABLE MAX UNAVAILABLE ALLOWED DISRUPTIONS AGE poddisruptionbudget.policy/elasticsearch-ha-es-default 2 N/A 1 7m16s NAME TYPE DATA AGE secret/elasticsearch-ha-es-elastic-user Opaque 1 7m18s secret/elasticsearch-ha-es-file-settings Opaque 1 7m16s secret/elasticsearch-ha-es-http-ca-internal Opaque 2 7m17s secret/elasticsearch-ha-es-http-certs-internal Opaque 3 7m17s secret/elasticsearch-ha-es-http-certs-public Opaque 2 7m17s secret/elasticsearch-ha-es-internal-users Opaque 4 7m18s secret/elasticsearch-ha-es-main-es-config Opaque 1 7m16s secret/elasticsearch-ha-es-main-es-transport-certs Opaque 7 7m16s secret/elasticsearch-ha-es-remote-ca Opaque 1 7m16s secret/elasticsearch-ha-es-transport-ca-internal Opaque 2 7m16s secret/elasticsearch-ha-es-transport-certs-public Opaque 1 7m16s secret/elasticsearch-ha-es-xpack-file-realm Opaque 4 7m18s NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE daemonset.apps/max-map-count-setter 6 6 6 6 6 <none> 13m
Les ressources GKE suivantes sont créées pour le cluster Elasticsearch :
- Le
StatefulSet
Elasticsearch qui contrôle trois instances répliquées de pod. - Un DaemonSet pour configurer les paramètres de mémoire virtuelle.
- Services permettant de se connecter à Elasticsearch.
- Secrets avec identifiants de super-utilisateur et certificats liés au service.
- Le pod de l'opérateur HA avec état et la ressource
HighlyAvailableApplication
, qui surveillent activement l'application Elasticsearch.
Importer l'ensemble de données de démonstration et exécuter des requêtes de recherche avec un notebook Jupyter
Dans cette section, vous allez importer des vecteurs dans des documents Elasticsearch et effectuer des requêtes de recherche sémantique à l'aide du client Python Elasticsearch officiel. Dans Elasticsearch, un document est composé de différents champs, chacun associé à la valeur correspondante. Pour utiliser efficacement Elasticsearch, nous vous recommandons de structurer vos données dans ces documents, qui sont ensuite indexés à des fins de recherche.
Dans cet exemple, vous utilisez un ensemble de données issu d'un fichier CSV contenant une liste de livres de différents genres. Elasticsearch sert de moteur de recherche, et le pod que vous créez sert de client interrogeant la base de données Elasticsearch.
Créez les ConfigMaps
books-dataset
etnotebook
, puis exécutez le pod Jupyter pour interagir avec votre cluster Elasticsearch :kubectl create -n elastic configmap books-dataset --from-file=manifests/03-notebook/dataset.csv kubectl create -n elastic configmap notebook --from-file=manifests/03-notebook/vector-database.ipynb kubectl apply -n elastic -f manifests/03-notebook/jupyter.yaml
- Le secret
elasticsearch-ha-es-elastic-user
créé précédemment est installé sur le pod client en tant que variable d'environnementPW
. - Le fichier ConfigMap
books-dataset
contient un fichiercsv
avec des données de livre pour l'index Elasticsearch. - Le fichier ConfigMap
notebook
contient le notebook Jupyter permettant de créer l'index Elasticsearch à partir debooks-dataset
.
Le fichier manifeste
jupyter.yaml
décrit le déploiementnotebook
et son service :- Le secret
Attendez que GKE démarre le pod Jupyter :
kubectl wait pods -l app=jupyter-notebook --for condition=Ready --timeout=300s -n elastic
Obtenez l'URL avec le jeton d'accès pour vous connecter à Jupyter :
export EXTERNAL_IP=$(kubectl -n elastic get svc notebook --output jsonpath='{.status.loadBalancer.ingress[0].ip}') kubectl logs deploy/notebook -n elastic| grep '^ .*http://127'|sed "s|127.0.0.1|${EXTERNAL_IP}|"
Ouvrez cette URL et cliquez sur le fichier
vector-database.ipynb
.Cliquez sur Run > Run all Cells (Exécuter > Exécuter toutes les cellules). Jupyter exécute le code et effectue une requête de recherche sur le texte
drama about people and unhappy love
.Cette requête effectue une recherche sémantique sur votre index
books
dans Elasticsearch, récupérant au maximum deux résultats ayant le score de correspondance le plus élevé pertinent pour votre requête.Le résultat ressemble à ce qui suit :
Title: Romeo and Juliet, Author: William Shakespeare, Paul Werstine (Editor), Barbara A. Mowat (Editor), Paavo Emil Cajander (Translator), score: 1.8473973 In Romeo and Juliet, Shakespeare creates a violent world, in which two young people fall in love. It is not simply that their families disapprove; the Montagues and the Capulets are engaged in a blood feud.In this death-filled setting, the movement from love at first sight to the lovers' final union in death seems almost inevitable. And yet, this play set in an extraordinary world has become the quintessential story of young love. In part because of its exquisite language, it is easy to respond as if it were about all young lovers. --------- Title: A Midsummer Night's Dream, Author: William Shakespeare, Paul Werstine (Editor), Barbara A. Mowat (Editor), Catherine Belsey (Contributor), score: 1.8415744 Shakespeare's intertwined love polygons begin to get complicated from the start--Demetrius and Lysander both want Hermia but she only has eyes for Lysander. Bad news is, Hermia's father wants Demetrius for a son-in-law. On the outside is Helena, whose unreturned love burns hot for Demetrius. Hermia and Lysander plan to flee from the city under cover of darkness but are pursued by an enraged Demetrius (who is himself pursued by an enraptured Helena). In the forest, unbeknownst to the mortals, Oberon and Titania (King and Queen of the faeries) are having a spat over a servant boy. The plot twists up when Oberon's head mischief-maker, Puck, runs loose with a flower which causes people to fall in love with the first thing they see upon waking. Throw in a group of labourers preparing a play for the Duke's wedding (one of whom is given a donkey's head and Titania for a lover by Puck) and the complications become fantastically funny. ---------
Afficher les métriques Prometheus pour votre cluster
Le cluster GKE est configuré avec Google Cloud Managed Service pour Prometheus, ce qui permet de collecter des métriques au format Prometheus. Ce service fournit une solution entièrement gérée pour la surveillance et les alertes, permettant la collecte, le stockage et l'analyse des métriques du cluster et de ses applications.
Le schéma suivant montre comment Prometheus collecte les métriques pour votre cluster :
Le cluster privé GKE du schéma contient les composants suivants :
- Pods Elasticsearch qui exposent des métriques sur le chemin d'accès
/
et le port9114
. Ces métriques sont fournies par le conteneur side-car nommémetrics
, qui contient elasticsearch_exporter. - Collecteurs basés sur Prometheus qui traitent les métriques à partir du pod Elasticsearch.
- Une ressource PodMonitoring qui envoie des métriques à Cloud Monitoring.
La configuration du cluster définit un conteneur side-car avec un exportateur de métriques au format Prometheus :
apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
name: elasticsearch-ha
spec:
...
nodeSets:
- name: main
...
podTemplate:
spec:
containers:
...
- name: metrics
image: quay.io/prometheuscommunity/elasticsearch-exporter:v1.7.0
command:
- /bin/elasticsearch_exporter
- --es.ssl-skip-verify
- --es.uri=https://$(ES_USER):$(ES_PASSWORD)@localhost:9200
...
env:
- name: ES_USER
value: "elastic"
- name: ES_PASSWORD
valueFrom:
secretKeyRef:
name: elasticsearch-ha-es-elastic-user
key: elastic
Pour exporter et afficher les métriques, procédez comme suit :
Créez la ressource
PodMonitoring
pour extraire les métriques parlabelSelector
:kubectl apply -n elastic -f manifests/04-prometheus-metrics/pod-monitoring.yaml
Le fichier manifeste
pod-monitoring.yaml
décrit la ressourcePodMonitoring
:Après quelques minutes, le tableau de bord intégré "Présentation de Elasticsearch Prometheus" s'affiche.
Pour afficher plus de graphiques liés aux données, importez un tableau de bord Cloud Monitoring personnalisé avec les configurations définies dans
dashboard.json
:gcloud --project "${PROJECT_ID}" monitoring dashboards create --config-from-file monitoring/dashboard.json
Une fois la commande exécutée, accédez aux tableaux de bord Cloud Monitoring :
Dans la liste des tableaux de bord, ouvrez le tableau de bord
ElasticSearch Overview
. La collecte et l'affichage des métriques peuvent prendre une à deux minutes.Le tableau de bord affiche le nombre de métriques clés :
- Index
- Documents et segments
- Opérations en attente
- Exécuter des nœuds avec leur état
Sauvegarder la configuration de votre cluster
La fonctionnalité Sauvegarde pour GKE vous permet de planifier des sauvegardes régulières de l'intégralité de la configuration de votre cluster GKE, y compris les charges de travail déployées et leurs données.
Dans ce tutoriel, vous allez configurer un plan de sauvegarde pour votre cluster GKE afin d'effectuer des sauvegardes de toutes les charges de travail, y compris les secrets et les volumes, tous les jours à 3h. Pour assurer une gestion efficace du stockage, les sauvegardes de plus de trois jours sont automatiquement supprimées.
Activez la fonctionnalité Sauvegarde pour GKE pour votre cluster :
gcloud container clusters update ${KUBERNETES_CLUSTER_PREFIX}-cluster \ --project=${PROJECT_ID} \ --region=${REGION} \ --update-addons=BackupRestore=ENABLED
Créez un plan de sauvegarde avec une programmation quotidienne pour tous les espaces de noms du 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
La commande utilise les variables d'environnement pertinentes lors de l'exécution.
Le format du nom du cluster est associé à votre projet et à votre région, comme suit :
projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_NAME
Lorsque vous y êtes invité, saisissez
y.
. Le résultat ressemble à ce qui suit :Create request issued for: [elasticsearch-cluster-backup] Waiting for operation [projects/PROJECT_ID/locations/us-central1/operations/operation-1706528750815-610142ffdc9ac-71be4a05-f61c99fc] to complete...⠹
Cette opération peut prendre quelques minutes. Une fois l'exécution terminée, le résultat ressemble à ce qui suit :
Created backup plan [elasticsearch-cluster-backup].
Vous pouvez voir le plan de sauvegarde
elasticsearch-cluster-backup
que vous venez de créer dans la console Sauvegarde pour GKE.
Si vous souhaitez restaurer les configurations de sauvegarde enregistrées, consultez la page Restaurer une sauvegarde.
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.
Delete a Google Cloud project:
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=elasticsearch export REGION=us-central1
Exécutez la commande
terraform destroy
: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}
Remplacez
FOLDER
pargke-autopilot
ougke-standard
, selon le type de cluster GKE que vous avez créé.Lorsque vous y êtes invité, saisissez
yes
.Recherchez tous les disques non associés :
export disk_list=$(gcloud compute disks list --filter="-users:* AND labels.name=${KUBERNETES_CLUSTER_PREFIX}-cluster" --format "value[separator=|](name,region)")
Supprimez les disques :
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
Supprimez le dépôt GitHub :
rm -r ~/kubernetes-engine-samples/
Étapes suivantes
- Découvrez le logiciel Open Source Elasticsearch.
- 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.