La supervision dans kubernetes

Dans ce chapitre nous allons parler du monitoring d'un cluster Kubernetes afin de surveiller la consommation des ressources sur Kubernetes.

Introduction

Dans ce chapitre nous allons parler du monitoring d'un cluster Kubernetes. Nous allons plus précisément voir comment il est possible de surveiller la consommation des ressources sur Kubernetes.

Il est possible avec kubernetes de surveiller les métriques au niveau des nœuds et pods. On peut par exemple inspecter le nombre de nœuds/pods dans le cluster, le nombre de nœuds/pods sains ainsi que les métriques de performances telles que la consommation de processeur, utilisation de la mémoire, du réseau et du disque.

Nous aurons besoin d'une solution qui surveillera toutes ces métriques et les stockera dans une base de données, tout en fournissant des analyses statistiques autour de ces données. Par défaut, Kubernetes ne propose pas de solution de monitoring intégrée complète. Cependant, il existe de nombreuses solutions open sources disponibles aujourd'hui, telles que Prometheus, Elastic Stack . Ainsi que des solutions propriétaires telles que DATADOG, dynatrace.

Heapster était l’un des projets originaux qui permettait d'activer la supervision et l’analyse de fonctionnalités pour Kubernetes. Vous verrez d'ailleurs beaucoup de références à Hipster lorsque vous recherchez des références sur la surveillance dans kubernetes. Cependant Heapster est maintenant obsolète, une version allégée a été conçue, plus connue sous le nom de Metrics Server.

Comment ça marche ?

Le serveur de métriques récupère les mesures de chacun des nœuds et des pods Kubernetes, il les regroupe ensuite et les stocke en mémoire. Notez que le Metric Server n’est qu’une solution de surveillance en mémoire et ne stocke en aucun cas les données récupérées dans le disque. Par conséquent, vous ne pouvez pas voir l'historique des données de performances. Pour cela, vous devez compter sur l’une des solutions de monitoring avancées dont nous avons parlé au tout début de ce chapitre.

On peut d'ores et déjà se poser la question suivante ? Comment les métriques sont-elles générées pour les POD sur ses nœuds ? En réalité Kubernetes exécute un agent sur chaque nœud connu sous le nom de kubelet. Cet agent est responsable de la réception des ordres du serveur API kubernetes, qui lui demande d'exécuter des pods sur les nœuds disponibles dans le cluster.

L'agent kubelet contient également un sous composant appelé cAdvisor ou Container Advisor, qui est responsable de récupérer les métriques de performance des pods et les exposer via l’API de kubelet afin de les rendre disponibles pour le serveur de métriques.

Schema d'architecture d'un cluster kubernetes avec un Server Metrics

Implémentation d'un Metrics Server

Si vous utilisez minikube, il suffit alors d'exécuter la commande suivante:

minikube addons enable metrics-server

Pour ceux qui utilisent une autre solution, vous devez d'abord cloner le projet git Metrics Server :

git clone https://github.com/kubernetes-incubator/metrics-server.git

Après avoir cloné le projet depuis GitHub, vous allez par la suite, créer un ensemble de ressources disponibles dans le dossier deploy/1.8+/ afin de permettre au serveur de métriques d’interroger les métriques de performance des nœuds du cluster.

kubectl create -f deploy/1.8+/

Vérifiez que votre pod de métriques est bien à l'état running :

kubectl get po -n kube-system |grep metrics

Résultat :

metrics-server-77dd877444-hcqrt   1/1     Running   0          105s

Vérifiez aussi les logs du conteneur dans le pod afin de s'assurer du bon fonctionnement de ce dernier :

kubectl logs metrics-server-77dd877444-hcqrt  -n kube-system

Résultat :

I0911 08:10:10.242962       1 serving.go:312] Generated self-signed cert (apiserver.local.config/certificates/apiserver.crt, apiserver.loc
al.config/certificates/apiserver.key)
I0911 08:10:11.933898       1 secure_serving.go:116] Serving securely on [::]:443

Attendez un peu, le temps de collecter et traiter les données. Une fois traitées, les performances du cluster peuvent être visualisées par les commandes suivantes :

Dans le cas d'une supervision des nœuds :

kubectl top nodes

Résultat :

NAME     CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
master   134m         3%     999Mi           52%
worker-1   40m        1%     644Mi           16%

Dans le cas d'une supervision des pods :

Je vais premièrement créer un Deployment avec une réplique de trois pods :

kubectl run nginx --image=nginx -r=3

Deuxièmement, je les supervise avec la commande suivante :

kubectl top pod

Résultat :

NAME                     CPU(cores)   MEMORY(bytes)
nginx-7db9fccd9b-4bbq5   0m           1Mi
nginx-7db9fccd9b-7mgb5   0m           1Mi
nginx-7db9fccd9b-d4d5p   0m           1Mi

Bonus (dépannage)

Attention

Cette manipulation est non recommandée pour une utilisation en production.

Si jamais vous travaillez sur un environnement de test et que vous rencontrez des problèmes avec le pod de métriques, alors dans ce cas de figure, rajoutez les informations ci-dessous au fichier manifeste yaml situé dans deploy/1.8+/metrics-server-deployment.yaml juste après la ligne imagePullPolicy: Always :

containers:
- name: metrics-server
  image: k8s.gcr.io/metrics-server-amd64:v0.3.1
  imagePullPolicy: Always
  # début des informations à rajouter...
  command:
  - /metrics-server
  - --metric-resolution=30s
  - --kubelet-insecure-tls
  - --kubelet-preferred-address-types=InternalIP
  # fin des informations à rajouter...
  volumeMounts:
  - name: tmp-dir
    mountPath: /tmp

Voici la définitions des différentes options de metrics-server que vous allez ajouter :

  • --kubelet-insecure-tls : ignorer la vérification des certificats Kubelet CA.
  • --metric-resolution : intervalle auquel les mesures seront extraites de Kubelets (valeur par défaut de 60).
  • kubelet-preferred-address-types : type de communication avec les différents nœuds, dans notre cas on utilise les adresses IP interne.

Enfin, appliquez vos changements en relançant la commande suivante :

kubectl apply -f deploy/1.8+/

Espace commentaire

Écrire un commentaires

vous devez être connecté pour poster un message !

8 commentaires

Incroyable résumé 🤩 !
J'ai été particulièrement aidé par votre tutoriel en ligne @ajdaini-hatim !
Un majestueux merci !
Ton guide très formatif. J'ai particulièrement aimé la manière d'résumé le sujet, continuez 💪
utilisateur sans photo de profile

@smarques

Tuto m'a vraiment bcp aidé à mieux comprendre le sujet. Merci pour ton vraiment bcp de cette contribution à la communauté 🤩
Ton module est intéressant, merci 💪
utilisateur sans photo de profile

@honore44

Votre module est infiniment grs. J'ai été ravi par la la renseignement et recherche. Merci @ajdaini-hatim pour cette grs ressource remarquable 😍
utilisateur sans photo de profile

@franck06

Merci pour votre cours, je vais le partager avec mes proches 😻 !

D'autres articles

Rejoindre la communauté

Recevoir les derniers articles gratuitement en créant un compte !

S'inscrire