ACK réserve du CPU et de la mémoire sur les nœuds pour Kubernetes et les composants système. Cela crée un écart entre la capacité totale du nœud (Capacity) et les ressources planifiables (Allocatable). ACK applique une politique de réservation par défaut et prend également en charge les réservations personnalisées via la configuration de kubelet.
Limites
La réservation personnalisée des ressources nécessite Kubernetes 1.20 ou une version ultérieure. Pour mettre à niveau votre cluster, consultez la rubrique Mise à niveau manuelle d'un cluster.
Portée de l'impact
Portée de l'impact de la réservation personnalisée des ressources
Pour modifier les valeurs de réservation, configurez kubelet pour un pool de nœuds. Les modifications s'appliquent immédiatement aux nœuds existants. Les nouveaux nœuds, y compris ceux créés lors d'une mise à l'échelle automatique ou ajoutés via l'option Add Existing Node, utilisent également la configuration mise à jour.
Ne modifiez pas manuellement le fichier de configuration de kubelet en ligne de commande. Cette opération risque de provoquer des conflits de configuration et un comportement inattendu lors des opérations et de la maintenance du pool de nœuds.
L'augmentation de la réservation des ressources réduit les ressources attribuables. Sur les nœuds dont l'utilisation des ressources est élevée, cela peut déclencher l'éviction des pods. Définissez les valeurs avec précaution.
Portée de l'impact de la réservation des ressources par défaut
ACK peut mettre à jour les valeurs de réservation par défaut au fil du temps. Les nouvelles valeurs s'appliquent automatiquement lorsque vous effectuez des modifications au niveau des nœuds, par exemple lors de la mise à niveau du cluster ou du pool de nœuds, ou lors de la modification des paramètres de kubelet. Sans de telles modifications, les nœuds existants conservent les valeurs précédentes pour garantir la stabilité.
Afficher les ressources attribuables d'un nœud
Affichez la capacité totale et les ressources attribuables d'un nœud :
kubectl describe node [NODE_NAME] | grep Allocatable -B 7 -A 6
Sortie attendue :
Capacity:
cpu: 4 # Total CPU cores on the node.
ephemeral-storage: 123722704Ki # Total ephemeral storage on the node, in KiB.
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 7925980Ki # Total memory on the node, in KiB.
pods: 64
Allocatable:
cpu: 3900m # Allocatable CPU cores.
ephemeral-storage: 114022843818 # Allocatable ephemeral storage, in bytes.
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 5824732Ki # Allocatable memory, in KiB.
pods: 64
Calculer les ressources attribuables
Utilisez cette formule pour calculer les ressources attribuables :Allocatable = Capacity − Reserved − Eviction threshold
Détails de la formule :
Les ressources totales correspondent au champ
Capacitydans la sortie de la requête du nœud.Consultez la section Détails de la politique de réservation des ressources.
Consultez la documentation Node-pressure eviction pour connaître les seuils d'éviction.
Détails de la politique de réservation des ressources
Les ressources réservées dépendent de plusieurs facteurs :
Les instances ECS de spécifications plus élevées exécutent davantage de pods ; ACK réserve donc plus de ressources pour les composants Kubernetes.
Les nœuds Windows réservent plus de ressources que les nœuds Linux pour le système d'exploitation et les composants Windows Server. Consultez la rubrique Création et gestion de pools de nœuds Windows.
ACK calcule les ressources réservées en fonction des plages de CPU et de mémoire ; le total correspond à la somme de toutes les plages. Dans Kubernetes 1.28, ACK a optimisé l'algorithme afin de réduire les réservations. Consultez la rubrique Mise à niveau manuelle d'un cluster.
Les ressources réservées sont réparties équitablement entre les composants Kubernetes (kubeReserved) et les processus système (systemReserved). Sur un nœud à 4 cœurs, ACK réserve 80 millicœurs dans Kubernetes 1.28 et versions ultérieures (40 pour kubeReserved + 40 pour systemReserved), ou 100 millicœurs dans les versions 1.20 à 1.27 (50 + 50).
Politique de réservation des ressources CPU
Kubernetes 1.28 et versions ultérieures
Réservation totale du CPU pour les nœuds de calcul :
Pour un nœud à 32 cœurs, la réservation totale du CPU se calcule comme suit :
1000 × 6% + 1000 × 1% + 1000 × 2 × 0.5% + (32000 − 4000) × 0.25% = 150 millicores
Kubernetes 1.20 à 1.27
Réservation totale du CPU pour les nœuds de calcul :
Pour un nœud à 32 cœurs, la réservation totale du CPU se calcule comme suit :
100 + (32000 − 4000) × 2.5% = 800 millicores
Politique de réservation des ressources mémoire
Kubernetes 1.28 et versions ultérieures
Formule de réservation totale de la mémoire :
Total memory reservation = min(11 × ($max_num_pods) + 255, 25% × node memory). La valeur finale correspond au plus petit résultat entre 11 × ($max_num_pods) + 255 et 25% of node memory.
-
$max_num_pods: nombre maximal de pods pris en charge sur le nœud.RemarqueLe nombre maximal de pods varie selon le plug-in réseau. Consultez la rubrique Nombre maximal de pods par nœud pour plus de détails.
Connectez-vous à la Container Service Management Console et consultez le nombre maximal de pods sur la page Nodes .
Terway :
Maximum pods per node = Maximum container-network pods + Host-network pods.Flannel : défini par vous-même lors de la création du cluster.
Node memory: mémoire utilisable réelle, en MiB.
Par exemple, avec Terway (ENI partagée, plusieurs adresses IP) sur une instance ecs.g7.16xlarge (mémoire de 256 GiB) : nombre maximal de pods = (8 − 1) × 30 + 3 = 213. Réservation totale de la mémoire = min(11 × (210 + 3) + 255, 256 × 1024 × 25%) = 2598 MiB.
Kubernetes 1.20 à 1.27
Réservation totale de la mémoire pour un nœud de calcul :
Pour un nœud disposant de 256 GiB de mémoire, la réservation totale de la mémoire se calcule comme suit :
4 × 25% + (8 − 4) × 20% + (16 − 8) × 10% + (128 − 16) × 6% + (256 − 128) × 2% = 11.88 GiB
Exemple de réservations de ressources par défaut pour les nœuds ACK
Consultez la rubrique Familles d'instances pour obtenir des détails sur les types d'instances ECS.
|
Ressources totales du nœud |
Ressources réservées (Kubernetes 1.28 et versions ultérieures) |
Ressources réservées (Kubernetes 1.20 à 1.27) |
|||||
|
Type d'instance d'exemple |
CPU (cœurs) |
Mémoire (GiB) |
Nombre maximal de pods par nœud (exemple avec le mode ENI partagée multi-IP de Terway) |
CPU (millicœur) |
Mémoire (MiB) |
CPU (millicœurs) |
Mémoire (MiB) |
|
Types d'instance ECS c7 |
2 |
4 |
15 |
70 |
420 |
100 |
1024 |
|
4 |
8 |
48 |
80 |
783 |
100 |
1843 |
|
|
8 |
16 |
48 |
90 |
783 |
200 |
2662 |
|
|
16 |
32 |
213 |
110 |
2598 |
400 |
3645 |
|
|
32 |
64 |
213 |
150 |
2598 |
800 |
5611 |
|
|
64 |
128 |
213 |
230 |
2598 |
1600 |
9543 |
|
|
128 |
256 |
423 |
390 |
4908 |
2400 |
12164 |
|
|
Types d'instance ECS ebmc7a |
256 |
512 |
453 |
710 |
5238 |
3040 |
17407 |
FAQ
Comment afficher le total des cœurs CPU et de la mémoire sur un nœud ?
CPU
Affichez le nombre total de cœurs CPU :
cat /proc/cpuinfo | grep processor
Sortie attendue :
processor : 0
processor : 1
processor : 2
processor : 3
Mémoire
Affichez la mémoire totale :
cat /proc/meminfo | grep MemTotal
Sortie attendue :
MemTotal: 7660952 kB
Pourquoi la mémoire disponible est-elle inférieure à la spécification du type d'instance ?
Les spécifications des types d'instance incluent la mémoire totale (y compris l'utilisation par le système d'exploitation) ; la mémoire disponible est donc toujours inférieure. Consultez la rubrique Pourquoi la mémoire affichée diffère-t-elle des spécifications du type d'instance après l'achat d'une instance ?.
Références
Personnalisez les réservations de ressources et les seuils d'éviction en configurant kubelet pour un pool de nœuds.
Le total des demandes de ressources des pods sur un nœud ne doit pas dépasser les ressources attribuables, sous peine d'échec de la planification des pods. Utilisez la fonctionnalité resource profiling d'ACK pour analyser l'utilisation historique et définir des demandes précises pour les charges de travail Kubernetes natives. Consultez la rubrique Création d'un déploiement.