|
Ce document a été traduit à l'aide d'une technologie de traduction automatique. Bien que nous nous efforcions de fournir des traductions exactes, nous ne fournissons aucune garantie quant à l'exhaustivité, l'exactitude ou la fiabilité du contenu traduit. En cas de divergence, la version originale anglaise prévaut et fait foi. |
Profilage des ressources
Cette section présente les résultats des tests pour déterminer les exigences minimales en ressources pour K3s.
Exigences minimales en ressources pour K3s
Les résultats sont résumés comme suit :
| Composants | Processeur | Min UC | Min RAM avec Kine/SQLite | Min RAM avec etcd intégré |
|---|---|---|---|---|
Serveur K3s avec une charge de travail |
Processeur Intel 8375C, 2,90 GHz |
6 % d’un noyau |
1596 Mo |
1606 Mo |
Cluster K3s avec un seul agent |
Processeur Intel 8375C, 2,90 GHz |
5 % d’un noyau |
1428 Mo |
1450 Mo |
Agent K3s |
Processeur Intel 8375C, 2,90 GHz |
3 % d’un noyau |
275 M |
275 M |
Serveur K3s avec une charge de travail |
Pi4B BCM2711, 1,50 GHz |
30 % d’un noyau |
1588 Mo |
1613 Mo |
Cluster K3s avec un seul agent |
Pi4B BCM2711, 1,50 GHz |
25 % d’un noyau |
1215 Mo |
1413 Mo |
Agent K3s |
Pi4B BCM2711, 1,50 GHz |
10 % d’un noyau |
268 M |
268 M |
Portée des tests de ressources
Les tests de ressources visaient à traiter les énoncés de problème suivants :
-
Sur un cluster à nœud unique, déterminer la quantité minimale légitime d’UC, de mémoire et d’IOPs qui devrait être réservée pour exécuter l’ensemble de la pile serveur K3s, en supposant qu’une charge de travail réelle sera déployée sur le cluster.
-
Sur un nœud agent (travailleur), déterminer la quantité minimale légitime d’UC, de mémoire et d’IOPs qui devrait être réservée pour les composants du plan de contrôle Kubernetes et K3s (le kubelet et l’agent k3s).
Composants inclus pour les mesures de référence
Les composants testés sont :
-
K3s v1.26.5 avec tous les composants empaquetés activés
-
Pile de surveillance Prometheus + Grafana
Ce sont des chiffres de référence pour un système stable utilisant uniquement des composants empaquetés K3s (Traefik Ingress, Klipper lb, stockage local) exécutant une pile de surveillance standard (Prometheus et Grafana) et l’application exemple Guestbook.
Les chiffres de ressources, y compris les IOPS, concernent uniquement la base de données Kubernetes et le plan de contrôle, et n’incluent pas les frais généraux pour les agents de gestion au niveau système ou la journalisation, la gestion des images de conteneurs, ou toute exigence spécifique à la charge de travail.
Méthodologie
Une instance autonome de Prometheus v2.43.0 a été utilisée pour collecter des statistiques sur l’UC, la mémoire et les E/S de disque de l’hôte en utilisant prometheus-node-exporter installé via apt.
systemd-cgtop a été utilisé pour vérifier l’utilisation de l’UC et de la mémoire au niveau des cgroups systemd. system.slice/k3s.service suit l’utilisation des ressources pour K3s et containerd, tandis que les pods individuels sont sous la hiérarchie kubepods.
Des données supplémentaires détaillées sur l’utilisation de la mémoire K3s ont été collectées à partir de kubectl top node en utilisant le serveur de métriques intégré pour les processus serveur et agent.
Les chiffres d’utilisation étaient basés sur des lectures du 95e percentile provenant d’un fonctionnement en état stable sur des nœuds exécutant les charges de travail décrites.
de confiance
| Arch | SE | Système | UC | Mémoire vive | Disque |
|---|---|---|---|---|---|
x86_64 |
Ubuntu 22.04 |
AWS c6id.xlarge |
Processeur Intel Xeon Platinum 8375C, 4 noyaux à 2,90 GHz |
8 Go |
NVME SSD |
aarch64 |
Raspberry Pi OS 11 |
Raspberry Pi 4 Model B |
BCM2711, 4 cœurs à 1,50 GHz |
8 Go |
UHS-III SDXC |
Exigences de ressources de base
Cette section présente les résultats des tests pour déterminer les exigences minimales en ressources pour le fonctionnement de base de K3s.
Serveur K3s avec une charge de travail
Voici les exigences pour un cluster à nœud unique dans lequel le serveur K3s partage des ressources avec une charge de travail simple.
Les exigences en matière d’UC sont :
| Système | Utilisation des cœurs UC |
|---|---|
Intel 8375C |
6 % d’un noyau |
Pi4B |
30 % d’un noyau |
Les exigences en matière de mémoire sont :
| Datastore testé | Système | Mémoire |
|---|---|---|
Kine/SQLite |
Intel 8375C |
1596 Mo |
Pi4B |
1588 Mo |
|
etcd intégré |
Intel 8375C |
1606 Mo |
Pi4B |
1613 Mo |
Les exigences en matière de disque sont :
| Datastore testé | IOPS | KiB/sec | Latence |
|---|---|---|---|
Kine/SQLite |
10 |
500 |
< 10 ms |
etcd intégré |
50 |
250 |
< 5 ms |
Cluster K3s avec un agent unique
Ce sont les exigences de base pour un cluster K3s avec un nœud serveur K3s et un agent K3s, mais sans charge de travail.
Analyse des principaux moteurs d’utilisation des ressources
Les chiffres d’utilisation du serveur K3s sont principalement déterminés par le support du datastore Kubernetes (kine ou etcd), du serveur API, du contrôleur de gestion et des boucles de contrôle du planificateur, ainsi que par toutes les tâches de gestion nécessaires pour effectuer des changements dans l’état du système. Les opérations qui augmentent la charge sur le plan de contrôle Kubernetes, telles que la création/modification/suppression de ressources, provoqueront des pics temporaires d’utilisation. L’utilisation d’opérateurs ou d’applications qui font un usage intensif du datastore Kubernetes (comme Rancher ou d’autres applications de type opérateur) augmentera les exigences en ressources du serveur. L’augmentation de la taille du cluster en ajoutant des nœuds supplémentaires ou en créant de nombreuses ressources de cluster augmentera les exigences en ressources du serveur.
Les chiffres d’utilisation de l’agent K3s sont principalement déterminés par le support des boucles de contrôle de gestion du cycle de vie des conteneurs. Les opérations impliquant la gestion des images, la fourniture de stockage ou la création/destruction de conteneurs entraîneront des pics temporaires d’utilisation. Les téléchargements d’images, en particulier, sont généralement très dépendants de l’UC et des E/S, car ils impliquent la décompression du contenu des images sur le disque. Si possible, le stockage de charge de travail (stockage éphémère des pods et volumes) doit être isolé des composants de l’agent (/var/lib/rancher/k3s/agent) afin de garantir qu’il n’y a pas de conflits de ressources.
Prévenir les agents et les charges de travail d’interférer avec le magasin de données du cluster.
Lors de l’exécution dans un environnement où le serveur héberge également des pods de charge de travail, il convient de veiller à ce que les IOPS de l’agent et de la charge de travail n’interfèrent pas avec le magasin de données.
Cela peut être réalisé de la meilleure manière en plaçant les composants du serveur (/var/lib/rancher/k3s/server) sur un support de stockage différent de celui des composants de l’agent (/var/lib/rancher/k3s/agent), qui incluent le magasin d’images containerd.
Le stockage de charge de travail (stockage éphémère des pods et volumes) doit également être isolé du magasin de données.
Le non-respect des exigences de débit et de latence du magasin de données peut entraîner un retard de réponse du plan de contrôle et/ou un échec du plan de contrôle à maintenir l’état du système.
Exigences de dimensionnement du serveur pour K3s
de confiance
-
Tous les agents étaient des instances AWS ec2 t3.medium.
-
Un seul agent était une instance c5.4xlarge. Celle-ci hébergeait la pile de surveillance Grafana et empêchait toute interférence avec les ressources du plan de contrôle.
-
-
Le serveur était une instance AWS EC2 c5. À mesure que le nombre d’agents augmentait, le serveur a été mis à niveau vers des instances c5 plus grandes.
Méthodologie
Ces données ont été récupérées dans des conditions de test spécifiques. Cela variera en fonction de l’environnement et des charges de travail. Les étapes ci-dessous donnent un aperçu du test qui a été réalisé pour récupérer cela. Il a été effectué pour la dernière fois sur v1.31.0+k3s1. Toutes les machines ont été provisionnées dans AWS avec des volumes gp3 standard de 20 GiB. Le test a été réalisé avec les étapes suivantes :
-
Surveillez les ressources sur Grafana en utilisant la source de données Prometheus.
-
Déployez les charges de travail de manière à simuler une activité continue du cluster :
-
Une charge de travail de base qui s’adapte en continu.
-
Une charge de travail qui est supprimée et recréée en boucle.
-
Une charge de travail constante qui contient plusieurs autres ressources, y compris des CRD.
-
-
Rejoignez les nœuds agents par lots de 50 à 100 à la fois.
-
Arrêtez d’ajouter des agents lorsque l’utilisation de l’UC du serveur dépasse 90 % lors de l’ajout d’agents, ou si l’utilisation de la RAM dépasse 80 %.
Observations
-
Lors de l’ajout d’agents, l’UC du serveur a connu des pics d’environ 20 % par rapport à la ligne de base.
-
En général, le facteur limitant était l’UC, et non la RAM. Pour la plupart des tests, lorsque l’UC atteignait 90 % d’utilisation, l’utilisation de la RAM était d’environ 60 %.
Une note sur la haute disponibilité (HA)
À la fin de chaque test, deux serveurs supplémentaires ont été ajoutés (formant un cluster HA de base à 3 nœuds) pour observer quel effet cela avait sur les ressources du serveur d’origine. L’effet était :
-
Une baisse notable de l’utilisation de l’UC, généralement de 30 à 50 %.
-
L’utilisation de la RAM est restée la même.
Bien que cela n’ait pas été testé, avec l’utilisation de l’UC comme facteur limitant sur un seul serveur, on s’attend à ce que le nombre d’agents pouvant être ajoutés augmente d’environ 50 % avec un cluster HA à 3 nœuds.