Comment surveiller l’utilisation des ressources Kubernetes avec Metrics Server et Kubectl Top
La surveillance de l’utilisation des ressources de votre cluster Kubernetes est essentielle pour vous permettre de suivre les performances et de comprendre si vos charges de travail fonctionnent efficacement. La kubectl top
La commande diffuse les métriques directement à partir de votre cluster, vous permettant d’accéder aux bases de votre terminal.
Cette commande ne fonctionnera généralement pas immédiatement dans un nouvel environnement Kubernetes. Cela dépend du module complémentaire Metrics Server installé dans votre cluster. Ce composant collecte les métriques de vos nœuds et pods et fournit une API pour récupérer les données.
Dans cet article, nous allons montrer comment installer Metrics Server et accéder à ses mesures à l’aide de kubectl top
. Vous pourrez voir la consommation CPU et mémoire de chacun de vos nœuds et pods.
Sommaire
Ajouter un serveur de métriques à Kubernetes
Les distributions Kubernetes ne sont normalement pas fournies avec Metrics Server intégré. Vous pouvez facilement vérifier si votre cluster est déjà pris en charge en essayant d’exécuter kubectl top
:
$ kubectl top node error: Metrics API not available
Le message d’erreur confirme que l’API du serveur de métriques n’est pas présente dans le cluster.
Metrics Server est géré au sein de la communauté Kubernetes Special Interest Group (SIG). Il peut être ajouté à votre cluster à l’aide de son manifeste YAML simple ou de la charte Helm du projet.
Nous utiliserons le fichier manifeste pour ce didacticiel. Exécutez la commande Kubectl suivante pour installer le serveur de métriques :
$ kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml serviceaccount/metrics-server created clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created clusterrole.rbac.authorization.k8s.io/system:metrics-server created rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created service/metrics-server created deployment.apps/metrics-server created apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created
Metrics Server va maintenant commencer à collecter et à exposer les données de consommation des ressources Kubernetes. Si l’installation échoue avec une erreur, vous devez vérifier que votre cluster répond aux exigences du projet. Metrics Server a des dépendances spécifiques qui peuvent ne pas être prises en charge dans certains environnements.
De nombreuses distributions Kubernetes regroupent la prise en charge de Metrics Server en utilisant leur propre système de modules complémentaires. Vous pouvez utiliser cette commande pour ajouter facilement Metrics Server à un cluster Minikube, par exemple :
$ minikube addons enable metrics-server Using image k8s.gcr.io/metrics-server/metrics-server:v0.4.2 The 'metrics-server' addon is enabled
Récupérer des métriques avec Kubectl Top
Avec Metrics Server installé, vous pouvez maintenant exécuter kubectl top
pour accéder aux informations qu’il collecte.
Utilisez le node
sous-commande pour obtenir l’utilisation actuelle des ressources de chacun des nœuds de votre cluster :
$ kubectl top node NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% minikube 249m 3% 847Mi 2%
La pod
la sous-commande fournit des métriques individuelles pour chacun de vos pods :
$ kubectl top pod NAME CPU(cores) MEMORY(bytes) nginx 120m 8Mi
Cela fera apparaître les pods dans le default
espace de noms. Ajouter le --namespace
indicateur si vous êtes intéressé par les pods dans un espace de noms spécifique :
$ kubectl top pod --namespace demo-app NAME CPU(cores) MEMORY(bytes) nginx 0m 2Mi
La --all-namespaces
flag est également pris en charge pour répertorier tous les pods de votre cluster.
Les métriques peuvent mettre quelques minutes à être disponibles après la création de nouveaux pods. Il y a un retard dans le pipeline du serveur de métriques afin qu’il ne devienne pas lui-même un problème de performances.
La kubectl top
La commande ne vous submerge pas avec des dizaines de métriques. Il se concentre sur la couverture de l’essentiel de l’utilisation du processeur et de la mémoire. Ce démarrage de base peut être suffisant pour les scénarios où vous avez simplement besoin de données rapidement, comme l’identification du pod qui a provoqué un pic d’utilisation globale.
Une source de confusion peut être la 100m
valeurs rapportées dans le CPU(cores)
champ. La commande affiche l’utilisation du processeur en millicœurs. Une mesure de 1000m
signifie toujours 100% de consommation d’un seul cœur de processeur. 500m
indique 50 % de consommation d’un cœur, tandis que 2000m
signifie que deux cœurs sont occupés.
Modification de l’ordre de tri des objets
La kubectl top
La commande peut éventuellement trier la liste d’objets émise par consommation de CPU ou de mémoire. Cela facilite le repérage rapide des nœuds ou des pods qui exercent la pression la plus élevée sur les ressources du cluster.
Ajouter le --sort-by
drapeau avec soit cpu
ou memory
comme valeur pour activer ce comportement :
$ kubectl top pod --sort-by=memory NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% nginx-1 249m 3% 1790Mi 5% nginx-2 150m 1% 847Mi 2%
Filtrage de la liste d’objets
En commun avec d’autres commandes Kubectl, le --selector
flag vous permet de filtrer la liste d’objets aux éléments avec des étiquettes spécifiques :
$ kubectl top pod --selector application=demo-app NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% nginx-1 249m 3% 1790Mi 5% nginx-2 150m 1% 847Mi 2%
Dans cet exemple, seuls les pods qui ont le application: demo-app
l’étiquette sera incluse dans la sortie. =
, ==
et !=
sont pris en charge en tant qu’opérateurs. Plusieurs contraintes peuvent être appliquées en les enchaînant comme une chaîne séparée par des virgules, comme application=demo-app,version!=1
. Les objets ne s’afficheront que s’ils correspondent à tous les filtres d’étiquettes de votre requête.
Obtenir l’utilisation d’une ressource spécifique
La top node
et top pod
les sous-commandes peuvent toutes deux recevoir le nom d’un nœud ou d’un pod spécifique à récupérer. Les métriques actuelles associées à cet élément seront affichées isolément.
Fournissez le nom de l’objet comme argument simple à la commande, juste après node
ou pod
:
$ kubectl top node minikube NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% minikube 245m 3% 714Mi 2%
Sommaire
La kubectl top
La commande affiche les métriques essentielles de consommation de ressources pour les nœuds et les pods de votre cluster Kubernetes. Vous pouvez l’utiliser pour vérifier rapidement l’utilisation du processeur et de la mémoire associée à chacune de vos charges de travail. Ces informations peuvent être utiles pour diagnostiquer les problèmes de performances et identifier quand il est temps d’ajouter un autre nœud.
Avant d’utiliser la commande, vous devez installer le serveur de métriques Kubernetes dans votre cluster. Cela fournit l’API qui expose les données d’utilisation des ressources. L’activation de Metrics Server entraîne une surcharge de performances, mais celle-ci est généralement négligeable dans la plupart des déploiements. Il nécessite généralement 1 million de cœurs de processeur et 2 Mo de mémoire par nœud surveillé, bien que cela puisse varier en fonction des charges de travail exécutées dans votre environnement spécifique.