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 commentaire

Rejoignez la discussion

Vous devez être connecté pour poster un message.

15 commentaires

auguste49
Membre actif
Avatar de auguste49
auguste49
Membre actif

Chapeau pour la clarté

Le "Comment ça marche" nous manquait pour bien saisir les fondamentaux avant de plonger dans l'implémentation, maintenant on est prêts pour l'optimisation de nos HPA

13/10/2019
marcelle70
Membre actif
Avatar de marcelle70
marcelle70
Membre actif

Ce chapitre sur la supervision est une mine d'infos

on cherchait justement à affiner notre surveillance de la consommation des ressources, ça tombe à pic avant une montée en charge

11/10/2019
laurent90
Membre
Avatar de laurent90
laurent90
Membre

la partie bonus dépannage est vraiment utile

J'ai pu diagnostiquer un problème de ressource CPU sur un de nos services critiques grâce à vos tips, merci

08/10/2019
arthur32
Membre
Avatar de arthur32
arthur32
Membre

L'implémentation d'un Metrics Server est bien expliquée

On avait des soucis de données manquantes, votre explication a permis de débloquer la situation, top pour nos dashboards Grafana

06/10/2019
tdelannoy
Membre
Avatar de tdelannoy
tdelannoy
Membre

Merci pour ce guide

j'avais du mal à piger le "comment ça marche" pour le monitoring k8s, là c'est limpide et ça m'aide pour optimiser nos pods

03/10/2019

Le point sur la conso de ressources super important pour l'optimisation

01/10/2019

Clair net précis sur la supervision K8s

30/09/2019
leon70
Membre
Avatar de leon70
leon70
Membre

La section dépannage m'a sauvé ce matin sur un pod qui s'étouffait

29/09/2019
legendre-bertrand
Membre actif
Avatar de legendre-bertrand
legendre-bertrand
Membre actif

Merci pour l'implémentation d'un Metrics Server j'étais bloqué

27/09/2019

Enfin un guide clair sur la supervision K8s

25/09/2019

Super utile pour comprendre comment ça marche derrière le monitoring

22/09/2019
colette83
Membre
Avatar de colette83
colette83
Membre

Nickel pour surveiller la conso ça devenait critique chez nous

20/09/2019
thibaut22
Membre actif
Avatar de thibaut22
thibaut22
Membre actif

Le bonus dépannage c'est de l'or je galère souvent avec les ressources

J'ai pu fixer un pbl de throttling CPU sur un de nos clusters grâce à ces tips, énorme

18/09/2019
omarechal
Membre actif
Avatar de omarechal
omarechal
Membre actif

Top la partie sur le Metrics Server ça clarifie pas mal de choses

15/09/2019
besson-joseph
Membre actif secouriste
Avatar de besson-joseph
besson-joseph
Membre actif secouriste

Le monitoring K8s c'est toujours un casse-tête merci pour les insights

13/09/2019

Rejoindre la communauté

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

S'inscrire