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

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.

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.

3. Activez 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.

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=DISABLED5. Attendez qu le cluster soit prêt. La création prend environ 10 minutes.

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-457216Vous 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.yaml8. 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
EOFNous 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
EOFNotez 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)

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

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
EOFDans 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
EOFNous 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 :




