Technique

Tutoriel sur l'observabilité Kubernetes : configuration du cluster k8s et déploiement de l'application de démonstration

Ce blog vous montrera comment configurer l'environnement que vous utiliserez pour la série de blogs de tutoriels sur l'observabilité de Kubernetes. Si vous n'avez pas vu la Partie 1 : monitoring et analyse des logs, veuillez commencer ici, étant donné que cet article complète la série et n'est pas censé être indépendant. Une fois que vous avez consulté cet article, revenez ici pour savoir comment configurer votre environnement de tutoriel.

1re étape : lancez-vous avec le déploiement d'Elasticsearch Service

Le moyen le plus facile d'utiliser la Suite Elastic pour ce tutoriel est de vous lancer avec un essai gratuit de 14 jours de notre Elasticsearch Service sur Elastic Cloud. En quelques clics (pas besoin de carte bancaire), votre cluster sera opérationnel. Ou, si vous préférez, téléchargez la Suite Elastic, puis installez-la localement. Il est possible de modifier facilement toutes les instructions de ce tutoriel pour travailler avec un cluster Elasticsearch autonome sur votre propre matériel. 

2e étape : configuration du cluster Kubernetes à nœud unique Minikube

Maintenant que votre déploiement de la Suite Elastic est opérationnel, passons à l'environnement Minikube.

Préparation d'un environnement Kubernetes

Cette présentation vous aidera à configurer un environnement Minikube à nœud unique pour exécuter le reste des activités du tutoriel, comme la capture de logs, d'indicateurs et de données de performances applicatives. Tandis qu'il y a d'autres moyens de créer un environnement qui prend en charge le tutoriel, comme les cours Strigo.io, GKE, les hébergements AWS autonomes, cet exemple présente la création d'un environnement hôte Debian 9 avec des captures d'écran prises depuis Google Cloud.

Remarque : si vous avez votre propre cluster Kubernetes dans l'un des environnements de cloud, ou vos propres serveurs, vous pouvez ignorer cette partie. Effectuez uniquement ces étapes si vous n'avez pas votre propre cluster Kubernetes sous la main.

Configuration initiale

Créez un serveur Debian 9. Commencez par des spécifications plus basses, puis augmentez-les si vous en avez besoin. Voici les spécifications requises :

  • 2 ou 4 processeurs ;
  • RAM de 8 ou 16 Go ;
  • espace disque de 100 Go ;
  • Linux OS Debian 9 (Stretch) ;
  • assurez la connectivité externe aux ports 30080-30085 sur les serveurs sélectionnés. Cela peut impliquer de configurer les règles du pare-feu du serveur.

Exemple de configuration depuis Google Cloud :

Installation des packs de prérequis

Reportez-vous aux étapes suivantes pour installer votre propre cluster à nœud unique Kubernetes sur le serveur Debian 9. Commencez par exécuter la commande suivante :

$ sudo apt-get install -y git tmux

Vérification du code depuis mon référentiel Github

Exécutez la commande suivante pour cloner l'exemple de code depuis mon référentiel GitHub :

$ git clone https://github.com/michaelhyatt/k8s-o11y-workshop

Installation des prérequis

Exécutez la commande suivante pour installer kubectl, Minikube et Docker :

$ cd k8s-o11y-workshop
$ ./install/install-debian9.sh

Démarrage de Minikube et Kubernetes

Cette commande démarrera l'environnement Minikube :

$ ./install/start_k8s.sh

Assurez-vous que l'environnement est opérationnel et sans erreurs en exécutant la commande suivante et en consultant les services avec l'état Running :

$ kubectl get pods --namespace=kube-system

Le résultat doit ressembler à ceci :

NAME                                 READY   STATUS    RESTARTS   AGE
coredns-5644d7b6d9-jhjlm             1/1     Running   0          106s
coredns-5644d7b6d9-npwr7             1/1     Running   0          105s
etcd-minikube                        1/1     Running   0          55s
kube-addon-manager-minikube          1/1     Running   0          43s
kube-apiserver-minikube              1/1     Running   0          57s
kube-controller-manager-minikube     1/1     Running   0          47s
kube-proxy-fm476                     1/1     Running   0          105s
kube-scheduler-minikube              1/1     Running   0          50s
kube-state-metrics-57cd6fdf9-gfgl8   1/1     Running   0          102s
storage-provisioner                  1/1     Running   0          101s

Votre cluster à nœud unique Kubernetes Minikube est désormais opérationnel.

3e étape : déploiement de l'application de démonstration

Maintenant que votre cluster Kubernetes est opérationnel, déployons l'application de démonstration.

Création et mise à jour des détails et secrets de connexion

Vérifiez que l'éditeur Theia est opérationnel. Vous pouvez également utiliser d'autres éditeurs comme vim et nano pour modifier le fichier install/create_secrets.sh.

$ kubectl get pods

Le résultat doit ressembler à ceci :

NAME                     READY   STATUS    RESTARTS   AGE
theia-86d9888954-npk7l   1/1     Running   0          74s

Assurez-vous d'avoir enregistré les détails suivants depuis la configuration de votre cluster Elastic Cloud :

  • cloud_id : doit être sous la forme de ":"
  • cloud_auth : doit être sous la forme "elastic:"
  • apm_url : l'URL pour le serveur APM commençant par https://
  • apm_token : un token secret pour vous connecter au serveur APM.

Ces détails seront utilisés pour créer les secrets Kubernetes qui connectent les composants s'exécutant sur ce serveur avec le cluster Elastic Cloud.

Trouvez l'adresse IP publique du serveur, puis ouvrez une fenêtre du navigateur à http://:30083

Dans l'éditeur, ouvrez le fichier install/create_secrets.sh, puis mettez à jour les quatre informations, comme ci-dessus. Enfin, enregistrez le fichier.

Créez les secrets en exécutant cette commande dans la fenêtre du terminal :

$ ./install/create_secrets.sh

Exécution de la configuration de Beats

La Suite Elastic offre différents Beats pour transférer les données vers Elasticsearch. Pour effectuer le suivi des fichiers logs k8s, nous allons utiliser Filebeat. Pour collecter différents indicateurs de l'application et des pods du système, y compris Kubernetes même, nous allons utiliser Metricbeat.

La configuration de Beats nécessite que vous créiez tous les artefacts associés à l'ingestion de données : pipelines d'ingestion, modèles d'index et visualisations Kibana prêtes à utiliser. L'exécution d'une commande à la fois traitera les éléments ci-dessus et il sera uniquement nécessaire d'exécuter une fois par Beat déployé dans le cluster Kubernetes.

Pour exécuter les tâches de configuration Metricbeat et Filebeat, exécutez les commandes de configuration suivantes :

$ kubectl create -f $HOME/k8s-o11y-workshop/filebeat/filebeat-setup.yml
$ kubectl create -f $HOME/k8s-o11y-workshop/metricbeat/metricbeat-setup.yml

Puis, attendez simplement que la tâche soit terminée en observant le changement de statut de ContainerCreationà Running, et enfin à Completed avec la commande kubectl suivante :

$ kubectl get pods --namespace=kube-system

Le statut des pods qui en résulte doit être similaire à ceci :

NAME                                 READY   STATUS      RESTARTS   AGE
coredns-5644d7b6d9-jhjlm             1/1     Running     0          2d
coredns-5644d7b6d9-npwr7             1/1     Running     0          2d
etcd-minikube                        1/1     Running     0          2d
filebeat-init-nkghj                  0/1     Completed   0          2m
kube-addon-manager-minikube          1/1     Running     0          2d
kube-apiserver-minikube              1/1     Running     0          2d
kube-controller-manager-minikube     1/1     Running     0          2d
kube-proxy-fm476                     1/1     Running     0          2d
kube-scheduler-minikube              1/1     Running     0          2d
kube-state-metrics-57cd6fdf9-gfgl8   1/1     Running     0          2d
storage-provisioner                  1/1     Running     0          2d
metricbeat-init-gm6wj                0/1     Completed   0          2m

Juste au cas où vous auriez oublié de créer les secrets...

La raison la plus courante d'erreurs à ce stade sera des informations d'identification Elastic Cloud incorrectes. Seulement si vous voyez des erreurs dénotant qu'il est impossible de se connecter au cluster de cloud, poursuivez avec les étapes suivantes.

  1. Vérifiez les quatre valeurs de cloud et d'APM, selon la section précédente.
  2. Supprimez les informations d'identification et les tâches de configuration de Beats, comme suit :
    $ kubectl delete secret cloud-secret --namespace=kube-system
    $ kubectl delete secret cloud-secret
    $ kubectl delete secret apm-secret
    
  3. Mettez à jour les informations d'identification dans l'éditeur web Theia, selon la section ci-dessus ou via les éditeurs vim/nano.
  4. Recréez les secrets en exécutant la commande à nouveau :
    $ ./install/create_secrets.sh
    
  5. Réessayez les commandes de configuration Beats.

Déploiement de vos Beats

Pour déployer Filebeat et Metricbeat, exécutez les deux commandes suivantes :

$ kubectl create -f $HOME/k8s-o11y-workshop/filebeat/filebeat.yml
$ kubectl create -f $HOME/k8s-o11y-workshop/metricbeat/metricbeat.yml

Pour valider que les Beats s'exécutent, exécutez la commande suivante :

$ kubectl get pods --namespace=kube-system

Il doit y avoir trois pods Kubernetes supplémentaires qui s'exécutent, un pour Filebeat et deux pour Metricbeat :

NAME                                 READY   STATUS      RESTARTS   AGE
coredns-5644d7b6d9-jhjlm             1/1     Running     0          2d
coredns-5644d7b6d9-npwr7             1/1     Running     0          2d
etcd-minikube                        1/1     Running     0          2d
filebeat-init-nkghj                  0/1     Completed   0          2d
filebeat-wnltr                       1/1     Running     0          4m
kube-addon-manager-minikube          1/1     Running     0          2d
kube-apiserver-minikube              1/1     Running     0          2d
kube-controller-manager-minikube     1/1     Running     0          2d
kube-proxy-fm476                     1/1     Running     0          2d
kube-scheduler-minikube              1/1     Running     0          2d
kube-state-metrics-57cd6fdf9-gfgl8   1/1     Running     0          2d
metricbeat-777d6c6c45-gzfwr          1/1     Running     0          4m
metricbeat-init-rjz4q                0/1     Completed   0          4m
metricbeat-vxbj5                     1/1     Running     0          4m
storage-provisioner                  1/1     Running     0          2d

Vérification de l'envoi des données par les Beats vers Elasticsearch

Pour une vérification supplémentaire que les Beats se connectent avec succès au cluster Elastic Cloud et envoient des données, ouvrez les logs et les applications Metrics dans Kibana. Une action doit se poursuivre ici.

Déploiement des composants d'applications

Déployez MySQL :

$ kubectl create -f $HOME/k8s-o11y-workshop/mysql/mysql.yml

Vérifiez que le conteneur est opérationnel en observant le pod s'exécuter dans l'application Metrics et en observant les logs MySQL en les sélectionnant depuis le menu de pod :

Attendez la ligne du log MySQL "ready for connections" (prêt pour les connexions) :

Déployez l'application petclinic et le proxy NGINX :

$ kubectl create -f $HOME/k8s-o11y-workshop/petclinic/petclinic.yml
$ kubectl create -f $HOME/k8s-o11y-workshop/nginx/nginx.yml

Vérification de l'exécution de tous les composants

Observez que tous les composants s'exécutent dans l'application Metrics dans Kibana :

Vérifiez que l'interface utilisateur petclinic est disponible sur http://:30080. Vous pouvez obtenir l'adresse IP publique de l'application web petclinic utilisant la commande kubectl get services.

Vous êtes fin prêt. Vous pouvez désormais revenir à votre tutoriel prévu régulièrement : Tutoriel sur l'observabilité Kubernetes : monitoring et analyse des logs.