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 :

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.

Serveur K3s

Les exigences en matière d’UC sont :

Système Utilisation des cœurs UC

Intel 8375C

5 % d’un noyau

Pi4B

25 % d’un noyau

Les exigences en matière de mémoire sont :

Datastore testé Système Mémoire

Kine/SQLite

Intel 8375C

1428 Mo

Pi4B

1215 Mo

etcd intégré

Intel 8375C

1450 Mo

Pi4B

1413 Mo

Agent K3s

Les exigences sont :

Système Utilisation des cœurs UC Mémoire vive

Intel 8375C

3 % d’un noyau

275 M

Pi4B

5 % d’un noyau

268 M

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 :

  1. Surveillez les ressources sur Grafana en utilisant la source de données Prometheus.

  2. 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.

  3. Rejoignez les nœuds agents par lots de 50 à 100 à la fois.

  4. 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.