Ce tutoriel vous explique comment exécuter Elastic Stack sur GKE à l'aide de l'opérateur Elastic Cloud sur Kubernetes (ECK).
Elastic Stack est une solution Open Source populaire utilisée pour la journalisation, la surveillance et l'analyse des données en temps réel. En utilisant Elastic Stack sur GKE, vous pouvez bénéficier de l'évolutivité et de la fiabilité fournies par GKE Autopilot, ainsi que des puissantes fonctionnalités d'Elastic Stack.
Ce tutoriel est destiné aux administrateurs Kubernetes ou aux ingénieurs en fiabilité des sites.
Préparer l'environnement
Dans ce tutoriel, vous utilisez Cloud Shell pour gérer les ressources hébergées sur Google Cloud. Cloud Shell est préinstallé avec les logiciels dont vous avez besoin dans ce tutoriel, y compris kubectl
, Helm et gcloud CLI.
Pour configurer votre environnement avec Cloud Shell, procédez comme suit :
Lancez une session Cloud Shell depuis la console Google Cloud en cliquant sur
Activer Cloud Shell dans la consoleGoogle Cloud . Une session s'ouvre dans le volet inférieur de la console Google Cloud .
Ajoutez un dépôt de chart Helm et mettez-le à jour :
helm repo add elastic https://helm.elastic.co helm repo update
Clonez le dépôt GitHub.
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.git
Accédez au répertoire de travail :
cd kubernetes-engine-samples/observability/elastic-stack-tutorial
Créer un cluster GKE
Créez un cluster GKE avec la collecte de métriques du plan de contrôle activée :
gcloud container clusters create-auto elk-stack \
--location="us-central1" \
--monitoring="SYSTEM,WORKLOAD,API_SERVER,SCHEDULER,CONTROLLER_MANAGER"
Déployer l'opérateur ECK
Elastic Cloud sur Kubernetes (ECK) est une plate-forme de déploiement et de gestion de clusters Elastic Stack sur Kubernetes.
ECK automatise le déploiement et la gestion des clusters Elastic Stack, ce qui simplifie le processus de configuration et de maintenance de Elastic Stack sur Kubernetes. Il fournit un ensemble de ressources Kubernetes personnalisées que vous pouvez utiliser pour créer et configurer Elasticsearch, Kibana, Application Performance Management Server et d'autres composants Elastic Stack dans Kubernetes. Cela permet aux développeurs et aux équipes DevOps de configurer et de gérer des clusters Elastic Stack à grande échelle.
ECK est compatible avec plusieurs nœuds Elasticsearch, le basculement automatique des applications, les mises à niveau fluides et le chiffrement SSL. ECK inclut également des fonctionnalités qui vous permettent de surveiller et de dépanner les performances d'Elasticsearch.
Installez le chart Helm ECK :
helm upgrade --install "elastic-operator" "elastic/eck-operator" \ --version="2.8.0" \ --create-namespace \ --namespace="elastic-system" \ --set="resources.limits.cpu=250m" \ --set="resources.limits.memory=512Mi" \ --set="resources.limits.ephemeral-storage=1Gi" \ --set="resources.requests.cpu=250m" \ --set="resources.requests.memory=512Mi" \ --set="resources.requests.ephemeral-storage=1Gi"
Attendez que l'opérateur soit prêt :
watch kubectl get pods -n elastic-system
Le résultat ressemble à ce qui suit :
NAME READY STATUS RESTARTS AGE elastic-operator-0 1/1 Running 0 31s
Lorsque l'opérateur
STATUS
estRunning
, revenez à la ligne de commande en appuyant surCtrl+C
.
Configurer Elastic Stack avec ECK
En utilisant Elastic Stack avec Elasticsearch, Kibana et Elastic Agent en mode parc, vous pouvez configurer une solution puissante, évolutive et entièrement gérée pour gérer et visualiser des données à l'aide de Kibana.
Kibana est un outil d'analyse et de visualisation de données Open Source qui vous permet de rechercher, d'analyser et de visualiser des données dans Elasticsearch.
L'agent Elastic est un transporteur de données léger qui collecte les données provenant de différentes sources, telles que les journaux ou les métriques, et les envoie automatiquement à Elasticsearch.
Elastic Fleet est un mode de fonctionnement dans lequel les agents Elastic se rapportent à un serveur central de parc qui gère leur configuration et leur gestion. Le serveur de parc simplifie le déploiement, la configuration et le scaling des agents Elastic, ce qui facilite la gestion des déploiements complexes et de grande envergure.
L'autoscaling Elasticsearch est une fonctionnalité d'auto-surveillance qui permet de signaler quand des ressources supplémentaires sont nécessaires en fonction d'une règle définie par l'opérateur. Par exemple, une règle peut spécifier qu'un certain niveau doit évoluer en fonction de l'espace disque disponible. Elasticsearch peut surveiller l'espace disque et suggérer un scaling s'il prédit une pénurie, bien qu'il incombe encore à l'opérateur d'ajouter les ressources nécessaires. Pour en savoir plus sur l'autoscaling Elasticsearch, consultez la page Autoscaling dans la documentation d'Elasticsearch.
Configurer un cluster Elasticsearch
Elasticsearch fournit un moteur de recherche et d'analyse RESTful distribué, conçu pour stocker et rechercher rapidement et efficacement de grands volumes de données.
Lorsque vous déployez Elastic Stack sur Kubernetes, vous devez gérer les paramètres de VM, en particulier le vm.max_map_count setting
, requis par Elasticsearch. vm.max_map_count
spécifie le nombre de zones de mémoire qu'un processus peut allouer à un fichier. Elasticsearch doit avoir cette valeur définie sur au moins 262144
pour fonctionner de manière optimale. Pour en savoir plus, consultez la section Mémoire virtuelle de la documentation ECK.
Examinez le fichier manifeste suivant :
Ce fichier manifeste décrit un DaemonSet qui configure directement le paramètre du noyau sur l'hôte. Un DaemonSet est un contrôleur Kubernetes qui garantit qu'une copie d'un pod s'exécute sur chaque nœud d'un cluster.
Le fichier manifeste précédent figure sur une liste d'autorisation pour s'exécuter sur Autopilot. Ne modifiez pas ce fichier manifeste, ni les images de conteneur.
Appliquez ce fichier manifeste à votre cluster :
kubectl apply -f max-map-count-setter-ds.yaml
Examinez le fichier manifeste suivant :
Ce fichier manifeste définit un cluster Elasticsearch avec les champs suivants :
initContainers
: attend que les paramètres du noyau de l'hôte de mémoire virtuelle changent.podDisruptionBudget
: indique que le cluster ne sera pas détruit pendant le processus de défragmentation des pods.config.node.roles
: configuration des rôles de nœud Elasticsearch. Pour en savoir plus sur les rôles de nœud, consultez la section Nœud dans la documentation d'Elasticsearch.
Appliquez ce fichier manifeste à votre cluster :
kubectl apply -f elasticsearch.yaml
Attendez que le cluster Elasticsearch soit prêt :
watch kubectl --namespace elastic-system get elasticsearches.elasticsearch.k8s.elastic.co
Le résultat ressemble à ce qui suit :
NAME HEALTH NODES VERSION PHASE AGE elasticsearch green 3 8.8.0 Ready 5m3s
Une fois le cluster Elasticsearch
HEALTH
défini surgreen
et la valeur dePHASE
définie surReady
, revenez à la ligne de commande en appuyant surCtrl+C
.
Configurer Kibana
Examinez le fichier manifeste suivant :
Ce fichier manifeste décrit une ressource personnalisée Kibana qui configure les règles d'agent pour le serveur de parcs et les agents.
Appliquez ce fichier manifeste à votre cluster :
kubectl apply -f kibana.yaml
Attendez que les pods soient prêts :
watch kubectl --namespace elastic-system get kibanas.kibana.k8s.elastic.co
Le résultat ressemble à ce qui suit :
NAME HEALTH NODES VERSION AGE kibana green 1 8.8.0 6m47s
Lorsque la valeur
HEALTH
des pods estgreen
, revenez à la ligne de commande en appuyant surCtrl+C
.
Configurer un équilibreur de charge pour accéder à Kibana
Pour accéder à Kibana, créez un objet Kubernetes, un certificat géré par Google, une adresse IP globale et une zone DNS.
Créez une adresse IP externe globale :
gcloud compute addresses create "elastic-stack" --global
Créez une zone gérée et un jeu d'enregistrements dans Cloud DNS :
gcloud dns managed-zones create "elk" \ --description="DNS Zone for Airflow" \ --dns-name="elk.BASE_DOMAIN" \ --visibility="public" gcloud dns record-sets create "elk.BASE_DOMAIN" \ --rrdatas="$(gcloud compute addresses describe "elastic-stack" --global --format="value(address)")" \ --ttl="300" \ --type="A" \ --zone="elk"
Déléguez la zone DNS en tant que sous-domaine du domaine de base en créant un jeu d'enregistrements NS avec une liste de serveurs de noms. Vous pouvez obtenir la liste des serveurs de noms à l'aide de la commande suivante :
gcloud dns record-sets describe elk.BASE_DOMAIN \ --type="NS" \ --zone="elk" \ --format="value(DATA)"
Examinez le fichier manifeste suivant :
Ce fichier manifeste décrit un certificat géré qui provisionne un certificat SSL pour établir la connexion TLS.
Appliquez le fichier manifeste à votre cluster :
kubectl apply -f ingress.yaml
Configurer les agents Elastic
Examinez le fichier manifeste suivant :
Ce fichier manifeste décrit un agent Elastic qui configure un serveur de parc avec ECK.
Appliquez ce fichier manifeste à votre cluster :
kubectl apply -f fleet-server-and-agents.yaml
Attendez que les pods soient prêts :
watch kubectl --namespace elastic-system get agents.agent.k8s.elastic.co
Le résultat ressemble à ce qui suit :
NAME HEALTH AVAILABLE EXPECTED VERSION AGE elastic-agent green 5 5 8.8.0 14m fleet-server green 1 1 8.8.0 16m
Lorsque la valeur
HEALTH
des pods estgreen
, revenez à la ligne de commande en appuyant surCtrl+C
.
Configurer la journalisation et la surveillance
Elastic Stack peut utiliser l'exportateur kube-state-metrics pour collecter des métriques au niveau du cluster.
Installer kube-state-metrics :
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update helm install kube-state-metrics prometheus-community/kube-state-metrics --namespace elastic-system
Obtenez les identifiants utilisateur
elastic
Kibana par défaut :kubectl get secret elasticsearch-es-elastic-user -o yaml -n elastic-system -o jsonpath='{.data.elastic}' | base64 -d
Ouvrez
https://elk.BASE_DOMAIN
dans votre navigateur et connectez-vous à Kibana avec les identifiants.Dans le menu, sélectionnez Analytics, puis Tableaux de bord.
Dans le champ de texte de recherche, saisissez Présentation de Kubernetes et sélectionnez Tableau de bord "Présentation" pour afficher les métriques de base.
Certains panneaux du tableau de bord peuvent ne présenter aucun message de données ni d'erreur, car GKE limite l'accès à certains points de terminaison du plan de contrôle permettant à Kibana d'obtenir les métriques du cluster.