Articles de blog

Comment déployer Elasticsearch sur GCP GKE Autopilot

Découvrez comment déployer un cluster Elasticsearch sur GCP en utilisant GKE Autopilot et ECK pour une configuration Elasticsearch partiellement gérée.

Dans cet article, nous allons découvrir comment déployer Elasticsearch sur Google Cloud Kubernetes (GKE) en utilisant Autopilot.

Pour Elasticsearch, nous allons utiliser Elastic Cloud on Kubernetes (ECK), qui est l’opérateur Kubernetes officiel d’Elasticsearch et qui simplifie l’orchestration des déploiements Kubernetes pour tous les composants Elastic Stack.

Pour en savoir plus sur la façon de déployer des clusters Elasticsearch sur différentes infrastructures GCP, vous pouvez consulter nos articles de prise en main pour Google Cloud Compute et Google Cloud Marketplace.

Effort de déploiement d'Elasticsearch

Procédure de déploiement Elasticsearch ECK

Qu'est-ce que GKE Autopilot ?

Google Kubernetes Engine (GKE) Autopilot offre une expérience Kubernetes entièrement gérée où Google prend en charge la configuration du cluster, la gestion des nœuds, la sécurité et la mise à l'échelle, tandis que les développeurs se concentrent sur le déploiement des applications, permettant aux équipes de passer du code à la production en quelques minutes grâce à de bonnes pratiques intégrées.

Conteneurs GKE Autopilot.

Source : https://cloud.google.com/blog/products/containers-kubernetes/introducing-gke-autopilot

Quand utiliser l’ECK dans Google Cloud ?

Elastic Cloud on Kubernetes (ECK) est parfaitement adapté aux entreprises qui disposent d'une infrastructure Kubernetes existante et souhaitent déployer Elasticsearch avec des fonctionnalités avancées telles que des rôles de nœuds dédiés, la haute disponibilité et l'automatisation.

Comment configurer ECK dans Google Cloud ?

1. Connectez-vous à la Google Cloud Console.

2. En haut à droite, cliquez sur le bouton Cloud Shell pour accéder à la console, et déployez le cluster GKE à partir de là. Sinon, vous pouvez utiliser la CLI gcloud.

N'oubliez pas de remplacer l'identifiant du projet par le vôtre pendant le tutoriel.

Comment configurer Elasticsearch sur GCP GKE Autopilot.

3. Activez l'API Google Kubernetes Engine.

Activation de l'API Google Kubernetes Engine

Cliquez sur Suivant.

L'API Kubernetes Engine devrait désormais apparaître comme activée lorsque vous recherchez cette API.

API Kubernetes Engine

4. Dans Cloud Shell, créez un cluster Autopilot. Nous le nommerons autopilot-cluster-1, et remplacerons également autopilot-test par l'identifiant de votre projet.

gcloud beta container --project "autopilot-test-457216" clusters create-auto "autopilot-cluster-1" --region "us-central1" --release-channel "regular" --tier "standard" --enable-ip-access --no-enable-google-cloud-access --network "projects/autopilot-test-457216/global/networks/default" --subnetwork "projects/autopilot-test-457216/regions/us-central1/subnetworks/default" --cluster-ipv4-cidr "/17" --binauthz-evaluation-mode=DISABLED

5. Attendez qu le cluster soit prêt. La création prend environ 10 minutes.

Image d'une configuration de cluster Autopilot

Un message de confirmation s’affiche après avoir correctement configuré le cluster.

6. Configurez l'accès à la ligne de commande kubectl.

gcloud container clusters get-credentials autopilot-cluster-1 --region us-central1 --project autopilot-test-457216

Vous devriez voir :

Entrée kubeconfig générée pour autopilot-cluster-1

7. Installez l’opérateur Elastic Cloud on Kubernetes (ECK).

# Install ECK Custom Resource Definitions
kubectl create -f https://download.elastic.co/downloads/eck/2.16.1/crds.yaml

# Install the ECK operator
kubectl apply -f https://download.elastic.co/downloads/eck/2.16.1/operator.yaml

8. Créons une instance Elasticsearch à nœud unique avec les valeurs par défaut.

Si vous souhaitez consulter quelques recettes pour différentes configurations, suivez ce lien.

Gardez à l’esprit que si vous ne spécifiez pas de storageClass, ECK utilisera celui défini par défaut, qui, pour GKE, est standard-rwo et qui utilise le disque persistant Compute Engine CSI Driver, et créera un volume de 1 Go avec celui-ci.

cat <<EOF | kubectl apply -f -
apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
  name: quickstart
spec:
  version: 9.0.0
  nodeSets:
  - name: default
    count: 1
    config:
      node.store.allow_mmap: false
EOF

Nous avons désactivé nmap, car la machine GKE par défaut a une valeur de vm.max_map_count trop basse. Il est recommandé de ne pas la désactiver pour la production, mais d'augmenter la valeur de vm.max_map_count. Vous pouvez en savoir plus sur la façon de procéder ici.

9. Déployons également un cluster Kibana à nœud unique. Pour Kibana, nous ajouterons un équilibreur de charge qui nous donnera une adresse IP externe que nous pourrons utiliser pour accéder à Kibana depuis notre appareil.

cat <<EOF | kubectl apply -f -
apiVersion: kibana.k8s.elastic.co/v1
kind: Kibana
metadata:
  name: quickstart
spec:
  version: 9.0.0
  http:
    service:
      metadata:
        annotations:
          cloud.google.com/l4-rbs: "enabled"
      spec:
        type: LoadBalancer
  count: 1
  elasticsearchRef:
    name: quickstart
EOF

Notez l'annotation :

cloud.google.com/l4-rbs: "enabled"

Cette adresse est très importante car elle indique à Autopilot de fournir un équilibreur de charge accessible au public. Si l'adresse IP n'est pas définie, l'équilibreur de charge sera interne.

10. Vérifiez que vos pods sont en cours d'exécution.

kubectl get pods

11. Vous pouvez également run kubectl get elasticsearch et kubectl get kibana pour des statistiques plus spécifiques, telles que la version d'Elasticsearch, les nœuds et l'état d'intégrité.

12. Accédez à vos services.

kubectl get svc

Cela vous indiquera l'URL externe de Kibana sous EXTERNAL-IP. Le provisionnement de l'équilibreur de charge prend quelques minutes. Copiez la valeur de EXTERNAL-IP.

13. Obtenez le mot de passe Elasticsearch pour l’utilisateur "elastic" :

kubectl get secret quickstart-es-elastic-user -o=jsonpath='{.data.elastic}' | base64 --decode

14. Accédez à Kibana depuis votre navigateur :

  • URL : https://<EXTERNAL_IP>:5601

  • Nom d'utilisateur:elastic

  • Mot de passe : 28Pao50lr2GpyguX470L2uj5 (de l’étape précédente)

Écran de bienvenue Elastic

15. En accédant depuis votre navigateur, l'écran de bienvenue apparaît.

Page d'accueil d'Elasticsearch

Si vous souhaitez modifier les spécifications du cluster Elasticsearch, comme modifier ou redimensionner les nœuds, vous pouvez réappliquer le fichier manifeste yml avec les nouveaux paramètres :

cat <<EOF | kubectl apply -f -
apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
  name: quickstart
spec:
  version: 9.0.0
  nodeSets:
    - name: default
      count: 2
      config:
        node.store.allow_mmap: false
      podTemplate:
        spec:
          containers:
            - name: elasticsearch
              resources:
                requests:
                  memory: 1.5Gi
                  cpu: 2
                limits:
                  memory: 1.5Gi
                  cpu: 2
EOF

Dans cet exemple, nous allons ajouter un nœud supplémentaire et modifier la mémoire vive et le processeur. Comme vous pouvez le voir, kubectl get elasticsearch affiche maintenant 2 nœuds :

Il en va de même pour Kibana :

cat <<EOF | kubectl apply -f -
apiVersion: kibana.k8s.elastic.co/v1
kind: Kibana
metadata:
  name: quickstart
spec:
  version: 9.0.0
  http:
    service:
      metadata:
        annotations:
          cloud.google.com/l4-rbs: "enabled"
      spec:
        type: LoadBalancer
  count: 1
  elasticsearchRef:
    name: quickstart
  podTemplate:
    spec:
      containers:
        - name: kibana
          env:
            - name: NODE_OPTIONS
              value: "--max-old-space-size=1024"
          resources:
            requests:
              memory: 0.5Gi
              cpu: 0.5
            limits:
              memory: 1Gi
              cpu: 1
EOF

Nous pouvons ajuster le processeur/la RAM du conteneur ainsi que l'utilisation de la mémoire Node.js (max-old-space-size).

N'oubliez pas que les revendications de volume existantes ne peuvent pas être réduites. Après avoir appliqué la mise à jour, l'opérateur effectuera les modifications avec un temps de perturbation minimal.

N’oubliez pas de supprimer le cluster une fois les tests terminés pour éviter des coûts inutiles.

gcloud container clusters delete autopilot-cluster-1

Étapes suivantes

Si vous souhaitez en savoir plus sur Kubernetes et Google Kubernetes Engine, consultez ces articles :

Pour aller plus loin

Comprendre la notation Elasticsearch et l'API Explain

Kofi Bartlett

Comment migrer des données entre différentes versions d'Elasticsearch & entre clusters

Kofi Bartlett

Présentation de l'interface utilisateur des règles de requête Elasticsearch dans Kibana

Jhon Guzmán

Elasticsearch en JavaScript dans les règles de l'art, partie II

Jeffrey Rengifo

Mise en œuvre de la recherche sémantique : Construire une recherche de recettes avec Elasticsearch

Andre Luiz

Prêt à créer des expériences de recherche d'exception ?

Une recherche suffisamment avancée ne se fait pas avec les efforts d'une seule personne. Elasticsearch est alimenté par des data scientists, des ML ops, des ingénieurs et bien d'autres qui sont tout aussi passionnés par la recherche que vous. Mettons-nous en relation et travaillons ensemble pour construire l'expérience de recherche magique qui vous permettra d'obtenir les résultats que vous souhaitez.

Jugez-en par vous-même