Ce document explique comment personnaliser la configuration de vos nœuds Google Kubernetes Engine (GKE) à l'aide d'un fichier de configuration appelé configuration de système de nœuds.
Une configuration de système de nœuds est un fichier de configuration qui permet d'ajuster un ensemble limité de paramètres système. Dans votre pool de nœuds, vous pouvez utiliser une configuration de système de nœuds pour spécifier des paramètres personnalisés pour l'agent de nœud Kubernetes kubelet et pour les configurations de noyau Linux de bas niveau sysctl.
Ce document décrit en détail les configurations disponibles pour une configuration de système de nœuds et explique comment les appliquer à vos pools de nœuds GKE Standard. Notez que les options de configuration directe du système de nœuds des clusters GKE Autopilot sont limitées par rapport à celles des pools de nœuds GKE Standard, car les clusters GKE Autopilot disposent d'un environnement de nœuds plus géré.
Pourquoi utiliser des configurations de système de nœuds ?
Les configurations du système de nœud offrent les avantages suivants :
- Optimisation des performances : optimisez les performances de la pile réseau, la gestion de la mémoire, la planification du processeur ou le comportement des E/S pour les applications exigeantes telles que l'entraînement ou le service d'IA, les bases de données, les serveurs Web à trafic élevé ou les services sensibles à la latence.
- Renforcement de la sécurité : appliquez des paramètres de sécurité spécifiques au niveau du noyau ou limitez certains comportements du système pour réduire la surface d'attaque.
- Gestion des ressources : ajustez la façon dont
kubeletgère les PID, l'espace disque, la récupération de mémoire des images ou les ressources de processeur et de mémoire. - Compatibilité des charges de travail : permet de s'assurer que l'environnement de nœud répond à des prérequis spécifiques pour les logiciels spécialisés ou les applications plus anciennes qui nécessitent des paramètres de noyau particuliers.
Autres options pour personnaliser les configurations de nœuds
Vous pouvez également personnaliser la configuration de vos nœuds à l'aide d'autres méthodes :
- Fichier de configuration d'exécution : pour personnaliser un environnement d'exécution de conteneur containerd sur vos nœuds GKE, vous pouvez utiliser un fichier différent appelé fichier de configuration d'exécution. Pour en savoir plus, consultez Personnaliser la configuration containerd dans les nœuds GKE.
- ComputeClass : vous pouvez spécifier des attributs de nœud dans votre spécification GKE ComputeClass. Vous pouvez utiliser ComputeClasses en mode Autopilot et Standard GKE dans la version 1.32.1-gke.1729000 et ultérieures de GKE. Pour en savoir plus, consultez Personnaliser la configuration du système de nœuds.
- DaemonSets : vous pouvez également utiliser des DaemonSets pour personnaliser les nœuds. Pour en savoir plus, consultez Amorcer automatiquement des nœuds GKE à l'aide de DaemonSets.
Les configurations de système de nœuds ne sont pas compatibles avec les nœuds Windows Server.
Avant de commencer
Avant de commencer, assurez-vous d'effectuer les opérations suivantes :
- Installez les outils de ligne de commande :
- Si vous utilisez les exemples de gcloud CLI de ce document, assurez-vous d'installer et de configurer la Google Cloud CLI.
- Si vous utilisez les exemples Terraform, assurez-vous d'installer et de configurer Terraform.
- Accorder des autorisations : vous devez disposer des autorisations IAM appropriées pour créer et mettre à jour des clusters et des pools de nœuds GKE, comme
container.clusterAdminou un autre rôle avec des autorisations équivalentes. - Planifiez les éventuelles perturbations de la charge de travail : les configurations de nœuds personnalisées sont appliquées au niveau du pool de nœuds. Les modifications déclenchent généralement une mise à jour progressive des nœuds du pool, qui implique de recréer les nœuds. Planifiez les éventuelles interruptions de charge de travail et utilisez des budgets d'interruption de pod (PDB) le cas échéant.
- Sauvegardez et testez toutes les modifications : testez toujours les modifications de configuration dans un environnement de préproduction ou de développement avant de les appliquer à la production. Des paramètres incorrects peuvent entraîner l'instabilité des nœuds ou l'échec des charges de travail.
- Examiner les paramètres par défaut de GKE : les images de nœud GKE sont fournies avec des configurations par défaut optimisées. Ne personnalisez les paramètres que si vous avez des besoins spécifiques et que vous comprenez l'impact de vos modifications.
Utiliser une configuration de système de nœuds en mode GKE Standard
Lorsque vous utilisez une configuration de système de nœud, vous utilisez un fichier YAML contenant les paramètres de configuration pour kubelet et le noyau Linux. Bien que les configurations de système de nœuds soient également disponibles en mode GKE Autopilot, les étapes de ce document vous montrent comment créer et utiliser un fichier de configuration pour le mode GKE Standard.
Pour utiliser une configuration de système de nœuds en mode GKE Standard, procédez comme suit :
- Créez un fichier de configuration. Ce fichier contient vos configurations
kubeletetsysctl. - Ajoutez la configuration lorsque vous créez un cluster, ou lorsque vous créez ou mettez à jour un pool de nœuds.
Créer un fichier de configuration
Écrivez la configuration de votre système de nœuds en YAML. L'exemple suivant ajoute des configurations pour les options kubelet et sysctl :
kubeletConfig:
cpuManagerPolicy: static
allowedUnsafeSysctls:
- 'kernel.shm*'
- 'kernel.msg*'
- 'kernel.sem'
- 'fs.mqueue*'
- 'net.*'
linuxConfig:
sysctl:
net.core.somaxconn: '2048'
net.ipv4.tcp_rmem: '4096 87380 6291456'
Dans cet exemple, les éléments suivants s'appliquent :
- Le champ
cpuManagerPolicy: staticconfigure lekubeletpour utiliser la règle de gestion du processeur statique. + Le champnet.core.somaxconn: '2048'limite le backlogsocket listen()à 2 048 octets. - Le champ
net.ipv4.tcp_rmem: '4096 87380 6291456'définit la valeur minimale, la valeur par défaut et la valeur maximale du tampon de réception de socket TCP sur 4 096 octets, 87 380 octets et 6 291 456 octets, respectivement.
Si vous ne souhaitez ajouter des configurations que pour le kubelet ou sysctl, n'incluez que cette section dans la configuration de votre système de nœuds. Par exemple, pour ajouter une configuration kubelet, créez le fichier suivant :
kubeletConfig:
cpuManagerPolicy: static
Pour obtenir la liste complète des champs que vous pouvez ajouter à la configuration du système de nœuds, consultez les sections Options de configuration Kubelet et Options de configuration Sysctl.
Ajouter la configuration à un pool de nœuds Standard
Après avoir créé la configuration du système de nœuds, ajoutez l'option --system-config-from-file à l'aide de Google Cloud CLI. Vous pouvez ajouter cette option lorsque vous créez un cluster, ou lorsque vous créez ou mettez à jour un pool de nœuds. Vous ne pouvez pas ajouter de configuration de système de nœuds à l'aide de la console Google Cloud .
Créer un cluster avec la configuration du système de nœuds
Vous pouvez ajouter une configuration du système de nœuds lors de la création du cluster à l'aide de gcloud CLI ou de Terraform. Les instructions suivantes appliquent la configuration du système de nœuds au pool de nœuds par défaut :
CLI gcloud
gcloud container clusters create CLUSTER_NAME \
--location=LOCATION \
--system-config-from-file=SYSTEM_CONFIG_PATH
Remplacez les éléments suivants :
CLUSTER_NAME: nom de votre cluster.LOCATION: zone ou région Compute du cluster.SYSTEM_CONFIG_PATH: chemin d'accès au fichier contenant vos configurationskubeletetsysctl.
Une fois que vous avez appliqué une configuration de système de nœud, le pool de nœuds par défaut du cluster utilise les paramètres que vous avez définis.
Terraform
Pour créer un cluster régional avec une configuration de système de nœuds personnalisée à l'aide de Terraform, reportez-vous à l'exemple suivant :
Pour en savoir plus sur l'utilisation de Terraform, consultez la page Compatibilité de Terraform avec GKE.
Créer un pool de nœuds avec la configuration système des nœuds
Vous pouvez ajouter une configuration du système de nœud lorsque vous utilisez gcloud CLI ou Terraform pour créer un pool de nœuds.
Les instructions suivantes appliquent la configuration du système de nœuds à un nouveau pool de nœuds :
CLI gcloud
gcloud container node-pools create POOL_NAME \
--cluster CLUSTER_NAME \
--location=LOCATION \
--system-config-from-file=SYSTEM_CONFIG_PATH
Remplacez les éléments suivants :
POOL_NAME: nom de votre pool de nœuds.CLUSTER_NAME: nom du cluster auquel vous souhaitez ajouter un pool de nœuds.LOCATION: zone ou région Compute du cluster.SYSTEM_CONFIG_PATH: chemin d'accès au fichier contenant vos configurationskubeletetsysctl.
Terraform
Pour créer un pool de nœuds avec une configuration de système de nœuds personnalisée à l'aide de Terraform, reportez-vous à l'exemple suivant :
Pour en savoir plus sur l'utilisation de Terraform, consultez la page Compatibilité de Terraform avec GKE.
Mettre à jour la configuration du système de nœuds d'un pool de nœuds existant
Vous pouvez mettre à jour la configuration du système de nœuds d'un pool de nœuds existant en exécutant la commande suivante :
gcloud container node-pools update POOL_NAME \
--cluster=CLUSTER_NAME \
--location=LOCATION \
--system-config-from-file=SYSTEM_CONFIG_PATH
Remplacez les éléments suivants :
POOL_NAME: nom du pool de nœuds que vous souhaitez mettre à jour.CLUSTER_NAME: nom du cluster que vous souhaitez mettre à jour.LOCATION: zone ou région Compute du cluster.SYSTEM_CONFIG_PATH: chemin d'accès au fichier contenant vos configurationskubeletetsysctl.
Cette modification nécessite de recréer les nœuds, ce qui peut perturber vos charges de travail en cours d'exécution. Pour en savoir plus sur cette modification spécifique, recherchez la ligne correspondante dans le tableau Modifications manuelles qui recréent les nœuds à l'aide d'une stratégie de mise à niveau des nœuds sans respecter les règles de maintenance.
Pour en savoir plus sur les mises à jour des nœuds, consultez Planifier les interruptions de mise à jour des nœuds.
Modifier une configuration de système de nœuds
Pour modifier une configuration de système de nœuds, vous pouvez créer un pool de nœuds avec la configuration souhaitée ou mettre à jour la configuration du système de nœud d'un pool de nœuds existant.
Modifier en créant un pool de nœuds
Pour modifier une configuration de système de nœuds en créant un pool de nœuds, procédez comme suit :
- Créez un fichier de configuration avec la configuration de votre choix.
- Ajoutez la configuration à un nouveau pool de nœuds.
- Migrez vos charges de travail vers le nouveau pool de nœuds.
- Supprimez l'ancien pool de nœuds.
Modifier en mettant à jour un pool de nœuds existant
Pour modifier la configuration du système de nœuds d'un pool de nœuds existant, suivez les instructions de l'onglet Mettre à jour un pool de nœuds pour ajouter la configuration à un pool de nœuds. Lorsque vous mettez à jour une configuration de système de nœuds et que la nouvelle configuration remplace la configuration système existante du pool de nœuds, les nœuds doivent être recréés. Si vous omettez des paramètres lors d'une mise à jour, ils sont définis sur leurs valeurs par défaut.
Si vous souhaitez réinitialiser la configuration du système de nœuds, mettez à jour le fichier de configuration avec des valeurs vides pour les champs kubelet et sysctl, par exemple :
kubeletConfig: {}
linuxConfig:
sysctl: {}
Supprimer une configuration de système de nœuds
Pour supprimer une configuration de système de nœuds, procédez comme suit :
- Créez un pool de nœuds.
- Migrez vos charges de travail vers le nouveau pool de nœuds.
- Supprimez le pool de nœuds contenant l'ancienne configuration de système de nœuds.
Options de configuration pour kubelet
Les tableaux de cette section décrivent les options kubelet que vous pouvez modifier.
Gestion du processeur
Le tableau suivant décrit les options de gestion du processeur pour kubelet.
Paramètres de configuration kubelet |
Restrictions | Paramètre par défaut | Description |
|---|---|---|---|
cpuCFSQuota |
La valeur doit être true ou false. |
true |
Ce paramètre applique la limite de processeur du pod. Définir cette valeur sur false signifie que les limites du processeur pour les pods sont ignorées.Il peut être avantageux d'ignorer les limites du processeur dans certains scénarios où les pods sont sensibles aux limites du processeur. Le risque lié à la désactivation de cpuCFSQuota est qu'un pod non autorisé peut consommer plus de ressources de processeur que prévu. |
cpuCFSQuotaPeriod |
Doit être une durée. | "100ms" |
Ce paramètre définit la valeur de période de quota du CFS du processeur (cpu.cfs_period_us) qui spécifie la période à laquelle l'accès d'un groupe aux ressources du processeur doit être réattribué. Cette option vous permet d'ajuster le comportement de limitation du processeur. |
Gestion de la mémoire et éviction
Le tableau suivant décrit les options modifiables pour la gestion de la mémoire et l'éviction. Cette section contient également un tableau distinct décrivant les options modifiables pour le flag evictionSoft.
Paramètres de configuration kubelet |
Restrictions | Paramètre par défaut | Description |
|---|---|---|---|
evictionSoft |
Mappage des noms de signaux. Pour connaître les restrictions de valeur, consultez le tableau suivant. | none |
Ce paramètre mappe les noms de signaux à une quantité ou un pourcentage qui définit les seuils d'éviction souple. Un seuil d'éviction souple doit comporter un délai de grâce. Le kubelet n'expulse pas les pods tant que le délai de grâce n'est pas dépassé. |
evictionSoftGracePeriod |
Mappage des noms de signaux. Pour chaque nom de signal, la valeur doit être une durée positive inférieure à 5m. Les unités de temps valides sont ns, us (ou µs), ms, s ou m. |
none |
Ce paramètre mappe les noms de signaux aux durées qui définissent les périodes de grâce pour les seuils d'éviction progressive. Chaque seuil d'éviction temporaire doit être associé à un délai de grâce. |
evictionMinimumReclaim |
Mappage des noms de signaux. Pour chaque nom de signal, la valeur doit être un pourcentage positif inférieur à 10%. |
none |
Ce paramètre mappe les noms de signaux à des pourcentages qui définissent la quantité minimale d'une ressource donnée que le kubelet récupère lorsqu'il effectue une éviction de pod. |
evictionMaxPodGracePeriodSeconds |
La valeur doit être un entier compris entre 0 et 300. |
0 |
Ce paramètre définit, en secondes, le délai de grâce maximal pour l'arrêt du pod lors de l'éviction. |
Le tableau suivant présente les options modifiables pour l'indicateur evictionSoft.
Les mêmes options s'appliquent également aux indicateurs evictionSoftGracePeriod et evictionMinimumReclaim, avec des restrictions différentes.
Paramètres de configuration kubelet |
Restrictions | Paramètre par défaut | Description |
|---|---|---|---|
memoryAvailable |
La valeur doit être une quantité supérieure à 100Mi et inférieure à 50% de la mémoire du nœud. |
none |
Ce paramètre représente la quantité de mémoire disponible avant l'éviction logicielle. Définit la quantité de signal memory.available dans kubelet . |
nodefsAvailable |
La valeur doit être comprise entre 10% et 50%. |
none |
Ce paramètre représente les nœuds disponibles avant l'éviction logicielle. Définit la quantité de signal nodefs.available dans kubelet . |
nodefsInodesFree |
La valeur doit être comprise entre 5% et 50%. |
none |
Ce paramètre représente les inodes nodefs qui sont libres avant l'éviction logicielle. Définit la quantité de signal nodefs.inodesFree dans kubelet . |
imagefsAvailable |
La valeur doit être comprise entre 15% et 50%. |
none |
Ce paramètre représente l'imagefs disponible avant l'éviction logicielle. Définit la quantité de signal imagefs.available dans kubelet . |
imagefsInodesFree |
La valeur doit être comprise entre 5% et 50%. |
none |
Ce paramètre représente les inodes imagefs qui sont libres avant l'éviction logicielle. Définit la quantité de signal imagefs.inodesFree dans kubelet. |
pidAvailable |
La valeur doit être comprise entre 10% et 50%. |
none |
Ce paramètre représente les PID disponibles avant l'éviction logicielle. Définit la quantité de signal pid.available dans kubelet. |
singleProcessOOMKill
|
La valeur doit être true ou false. |
true pour les nœuds cgroupv1, false pour les nœuds cgroupv2. |
Ce paramètre définit si les processus du conteneur sont arrêtés individuellement ou en groupe en cas de manque de mémoire.
Disponible sur les versions 1.32.4-gke.1132000, 1.33.0-gke.1748000 ou ultérieures de GKE. |
Gestion des PID
Le tableau suivant décrit les options modifiables pour la gestion des PID.
Paramètres de configuration kubelet |
Restrictions | Paramètre par défaut | Description |
|---|---|---|---|
podPidsLimit |
La valeur doit être comprise entre 1024 et 4194304. |
none |
Ce paramètre définit le nombre maximal d'ID de processus (PID) que chaque pod peut utiliser. |
Journalisation
Le tableau suivant décrit les options de journalisation modifiables.
Paramètres de configuration kubelet |
Restrictions | Paramètre par défaut | Description |
|---|---|---|---|
containerLogMaxSize |
La valeur doit être un nombre positif et un suffixe d'unité compris entre 10Mi et 500Mi inclus. |
10Mi |
Ce paramètre contrôle le paramètre containerLogMaxSize de la stratégie de rotation des journaux de conteneur, qui vous permet de configurer la taille maximale de chaque fichier journal. La valeur par défaut est 10Mi. Les unités valides sont Ki, Mi et Gi. |
containerLogMaxFiles |
La valeur doit être un entier compris entre 2 et 10, inclus. |
5 |
Ce paramètre contrôle le paramètre containerLogMaxFiles de la règle de rotation des fichiers journaux de conteneur, qui vous permet de configurer le nombre maximal de fichiers autorisés pour chaque conteneur, respectivement. La valeur par défaut est 5. La taille totale des journaux (container_log_max_size*container_log_max_files) par conteneur ne peut pas dépasser 1 % du stockage total du nœud. |
Récupération de mémoire des images
Le tableau suivant décrit les options modifiables pour la récupération des déchets d'image.
Paramètres de configuration kubelet |
Restrictions | Paramètre par défaut | Description |
|---|---|---|---|
imageGCHighThresholdPercent |
La valeur doit être un entier compris entre 10 et 85 (inclus), et supérieur à imageGcLowThresholdPercent. |
85 |
Ce paramètre définit le pourcentage d'utilisation du disque au-delà duquel la récupération de mémoire des images est exécutée. Il s'agit de l'utilisation maximale du disque pour la récupération de mémoire. Le pourcentage est calculé en divisant la valeur de ce champ par 100. |
imageGCLowThresholdPercent |
La valeur doit être un entier compris entre 10 et 85 (inclus), et inférieur à imageGcHighThresholdPercent. |
80 |
Ce paramètre définit le pourcentage d'utilisation du disque en dessous duquel la récupération d'espace inutilisé des images n'est jamais exécutée. Il représente l'utilisation de disque la plus faible pour la récupération de mémoire. Le pourcentage est calculé en divisant la valeur de ce champ par 100. |
imageMinimumGcAge |
La valeur doit être une durée inférieure ou égale à 2m. Les unités de temps valides sont ns, us (ou µs), ms, s, m ou h. |
2m |
Ce paramètre définit l'âge minimal d'une image inutilisée avant qu'elle ne soit supprimée. |
imageMaximumGcAge |
La valeur doit être une durée. | 0s |
Ce paramètre définit l'âge maximal d'une image inutilisée avant qu'elle ne soit supprimée. La valeur par défaut de ce champ est Disponible sur les versions 1.30.7-gke.1076000, 1.31.3-gke.1023000 ou ultérieures de GKE. |
Extraction d'images
Le tableau suivant décrit les options modifiables pour l'extraction d'images.
Paramètres de configuration kubelet |
Restrictions | Paramètre par défaut | Description |
|---|---|---|---|
maxParallelImagePulls |
La valeur doit être un entier compris entre 2 et 5 (inclus). | 2 ou 3 selon le type de disque. |
Ce paramètre définit le nombre maximal d'extractions d'images en parallèle. La valeur par défaut est déterminée par le type de disque de démarrage. |
Sécurité et opérations dangereuses
Le tableau suivant décrit les options modifiables pour configurer la sécurité et gérer les opérations dangereuses.
Paramètres de configuration kubelet |
Restrictions | Paramètre par défaut | Description |
|---|---|---|---|
allowedUnsafeSysctls |
Liste des noms ou groupes
|
none |
Ce paramètre définit une liste d'autorisation séparée par des virgules de noms ou de groupes sysctl non sécurisés qui peuvent être définis sur les pods.sysctl |
insecureKubeletReadonlyPortEnabled |
La valeur doit être une valeur booléenne (true ou false). |
true |
Ce paramètre désactive le port accessible en lecture seule et non sécurisé kubelet 10255 sur chaque nouveau pool de nœuds de votre cluster. Si vous configurez ce paramètre dans ce fichier, vous ne pourrez pas utiliser de client d'API GKE pour le modifier au niveau du cluster. |
Gestionnaires de ressources
Kubernetes propose une suite de gestionnaires de ressources. Vous pouvez configurer ces gestionnaires de ressources pour coordonner et optimiser l'alignement des ressources de nœuds pour les pods configurés avec des exigences spécifiques pour les ressources de processeurs, d'appareils et de mémoire (pages énormes).
Le tableau suivant décrit les options modifiables pour les gestionnaires de ressources.
Paramètres de configuration kubelet |
Restrictions | Paramètre par défaut | Description |
|---|---|---|---|
cpuManagerPolicy |
La valeur doit être none ou static. |
none |
Ce paramètre contrôle la règle du gestionnaire de processeur kubelet. La valeur par défaut est none, ce qui correspond au schéma d'affinité de processeur par défaut, qui ne fournit aucune affinité au-delà de celle qui est fournie automatiquement par le programmeur du système d'exploitation.Si vous définissez cette valeur sur static, les pods qui appartiennent à la classe QoS Guaranteed et qui ont des requêtes de processeurs entières se voient attribuer des processeurs exclusifs. |
memoryManager.policy |
La valeur doit être None ou Static. |
None |
Ce paramètre contrôle la règle du gestionnaire de mémoire Si vous définissez cette valeur sur Ce paramètre est compatible avec les clusters dont le plan de contrôle exécute la version 1.32.3-gke.1785000 ou ultérieure de GKE. |
topologyManager |
La valeur doit correspondre à l'un des paramètres acceptés pour chacun des champs concernés. Vous ne pouvez pas définir le champ |
|
Ces paramètres contrôlent la configuration du gestionnaire de topologie Vous pouvez définir les paramètres de règle et de portée indépendamment les uns des autres. Pour en savoir plus sur ces paramètres, consultez Scopes et règles du gestionnaire de topologie. Les ressources GKE suivantes sont compatibles avec ce paramètre :
|
Options de configuration Sysctl
Pour ajuster les performances de votre système, vous pouvez modifier les paramètres du noyau Linux. Les tableaux de cette section décrivent les différents paramètres du noyau que vous pouvez configurer.
Paramètres du système de fichiers (fs.*)
Le tableau suivant décrit les paramètres modifiables pour le système de fichiers Linux. Ces paramètres contrôlent le comportement du système de fichiers Linux, comme les limites de gestion des fichiers et la surveillance des événements.
Paramètre Sysctl |
Restrictions | Description |
|---|---|---|
fs.aio-max-nr |
Doit être compris entre [65536, 4194304]. | Ce paramètre définit le nombre maximal de requêtes d'E/S asynchrones à l'échelle du système. |
fs.file-max |
La valeur doit être comprise entre 104 857 et 67 108 864. | Ce paramètre définit le nombre maximal de descripteurs de fichiers que le noyau Linux peut allouer. |
fs.inotify.max_user_instances |
Doit être compris entre [8192, 1048576]. | Ce paramètre définit le nombre maximal d'instances inotify qu'un utilisateur peut créer. |
fs.inotify.max_user_watches |
Doit être compris entre [8192, 1048576]. | Ce paramètre définit le nombre maximal de surveillances inotify qu'un utilisateur peut créer. |
fs.nr_open |
La valeur doit être comprise entre [1048576, 2147483584]. | Ce paramètre définit le nombre maximal de descripteurs de fichiers qu'un processus peut ouvrir. |
Paramètres du noyau (kernel.*)
Le tableau suivant décrit les paramètres modifiables pour le noyau Linux. Ces paramètres configurent les fonctionnalités de base du noyau, y compris l'allocation de mémoire partagée.
| Paramètre Sysctl | Restrictions | Description |
|---|---|---|
kernel.shmmni |
Doit être compris entre 4 096 et 32 768. | Ce paramètre définit le nombre maximal de segments de mémoire partagée à l'échelle du système. Si cette valeur n'est pas définie, la valeur par défaut est 4096. |
kernel.shmmax |
La valeur doit être comprise entre 0 et 18446744073692774399. | Ce paramètre définit la taille maximale, en octets, d'un segment de mémoire partagée unique autorisé par le noyau. Cette valeur est ignorée si elle est supérieure à la quantité réelle de RAM, ce qui signifie que toute la RAM disponible peut être partagée. |
kernel.shmall |
La valeur doit être comprise entre 0 et 18446744073692774399. | Ce paramètre définit la quantité totale de pages de mémoire partagée pouvant être utilisées sur le système en même temps. Une page fait 4 096 octets sur l'architecture AMD64 et Intel 64. |
kernel.perf_event_paranoid |
Doit être compris entre -1 et 3. | Ce paramètre contrôle l'utilisation du système d'événements de performances par les utilisateurs non privilégiés sans CAP_PERFMON. La valeur par défaut est 2 dans le noyau. |
kernel.sched_rt_runtime_us |
Doit être compris entre -1 et 1 000 000. | Ce paramètre définit une limite globale sur le temps que la planification en temps réel peut utiliser. |
kernel.softlockup_panic |
Facultatif (booléen). | Ce paramètre contrôle si le noyau panique lorsqu'un blocage logiciel est détecté. |
kernel.yama.ptrace_scope |
Doit être compris entre 0 et 3. |
Ce paramètre définit le champ d'application et les restrictions de l'appel système
|
kernel.kptr_restrict |
Doit être compris entre 0 et 2. | Ce paramètre indique si des restrictions sont imposées à l'exposition des adresses du noyau via /proc et d'autres interfaces. |
kernel.dmesg_restrict |
Facultatif (booléen). | Ce paramètre indique si les utilisateurs non privilégiés sont empêchés d'utiliser dmesg(8) pour afficher les messages du tampon de journalisation du noyau. |
kernel.sysrq |
La valeur doit être comprise entre 0 et 511. |
Ce paramètre contrôle les fonctions qui peuvent être appelées à l'aide de la touche SysRq. Les valeurs possibles sont les suivantes :
|
Paramètres réseau (net.*)
Le tableau suivant décrit les paramètres réseau modifiables. Ces paramètres ajustent les performances et le comportement de la pile réseau, des tampons de socket au suivi des connexions.
| Paramètre Sysctl | Restrictions | Description |
|---|---|---|
net.core.busy_poll |
Tout entier positif inférieur à 2147483647. | Ce paramètre définit le délai d'inactivité de l'interrogation occupée à faible latence pour l'interrogation et la sélection. Il représente le temps approximatif en µs pour la boucle d'attente des événements. |
net.core.busy_read |
Tout entier positif inférieur à 2147483647. | Ce paramètre définit le délai d'expiration de l'interrogation d'occupation à faible latence pour les lectures de socket. Il représente le temps approximatif en µs pour la boucle d'attente occupée pour les paquets dans la file d'attente de l'appareil. |
net.core.netdev_max_backlog |
Tout entier positif inférieur à 2147483647. | Ce paramètre définit le nombre maximal de paquets mis en file d'attente côté INPUT lorsque l'interface reçoit des paquets plus rapidement que le noyau ne peut les traiter. |
net.core.rmem_default |
Tout entier positif inférieur à 2147483647. | Ce paramètre définit la taille par défaut du tampon de réception de socket, en octets. |
net.core.rmem_max |
Tout entier positif inférieur à 2147483647. | Ce paramètre définit la taille maximale de la mémoire tampon du socket de réception, en octets. |
net.core.wmem_default |
Tout entier positif inférieur à 2147483647. | Ce paramètre définit la taille par défaut, en octets, du tampon d'envoi du socket. |
net.core.wmem_max |
Tout entier positif inférieur à 2147483647. | Ce paramètre définit la taille maximale de la mémoire tampon du socket d'envoi, en octets. |
net.core.optmem_max |
Tout entier positif inférieur à 2147483647. | Ce paramètre définit la taille maximale de la mémoire tampon auxiliaire autorisée par socket. |
net.core.somaxconn |
Doit être compris entre [128, 2147483647]. | Ce paramètre définit la limite du backlog socket listen(), qui est connu dans l'espace utilisateur sous le nom SOMAXCONN. Ce paramètre est défini par défaut sur 128. |
net.ipv4.tcp_rmem |
{min, default, max} (chaque valeur est > 0, mémoire en octets). | Ce paramètre définit la taille minimale, en octets, de la mémoire tampon de réception utilisée par les sockets UDP lors de la modération. Le paramètre par défaut est de 1 page. |
net.ipv4.tcp_wmem |
{min, default, max} (chaque valeur est > 0, mémoire en octets). | Ce paramètre définit la taille minimale, en octets, de la mémoire tampon d'envoi utilisée par les sockets UDP en modération. Le paramètre par défaut est de 1 page. |
net.ipv4.tcp_tw_reuse |
La valeur doit être comprise entre 0 et 1. | Ce paramètre définit s'il faut autoriser la réutilisation des sockets à l'état TIME_WAIT pour les nouvelles connexions lorsque cela est sûr du point de vue du protocole. La valeur par défaut est 0. |
net.ipv4.tcp_max_orphans |
Doit être compris entre 16 384 et 262 144. | Ce paramètre définit le nombre maximal de sockets TCP qui ne sont associés à aucun descripteur de fichier utilisateur. |
net.ipv4.tcp_max_tw_buckets |
La valeur doit être comprise entre 4 096 et 2 147 483 647. | Ce paramètre définit le nombre maximal de sockets timewait détenus simultanément par le système. Si ce nombre est dépassé, le socket d'attente est immédiatement détruit et un avertissement s'affiche. |
net.ipv4.tcp_syn_retries |
La valeur doit être comprise entre 1 et 127. | Ce paramètre définit le nombre de fois où les SYN initiaux d'une tentative de connexion TCP active sont retransmis. |
net.ipv4.tcp_ecn |
Doit être compris entre 0 et 2. | Ce paramètre contrôle l'utilisation de la notification explicite de congestion (ECN) par TCP. ECN n'est utilisé que lorsque les deux extrémités de la connexion TCP indiquent qu'elles le prennent en charge. |
net.ipv4.tcp_mtu_probing |
Doit être compris entre 0 et 2. |
Ce paramètre contrôle la détection de MTU de chemin de la couche de paquetisation TCP. Les valeurs acceptées sont les suivantes :
|
net.ipv4.tcp_congestion_control |
Doit correspondre à l'une des valeurs acceptées de la colonne Description. | Ce paramètre n'est pas compatible lorsque GKE Dataplane V2 est activé sur le cluster. Les valeurs acceptées suivantes dépendent du type d'image :
|
net.ipv6.conf.all.disable_ipv6 |
Valeur booléenne. | Modifier cette valeur revient à modifier le paramètre conf/default/disable_ipv6 et tous les paramètres disable_ipv6 par interface sur la même valeur. |
net.ipv6.conf.default.disable_ipv6 |
Valeur booléenne. | Ce paramètre désactive le fonctionnement d'IPv6. |
net.netfilter.nf_conntrack_acct |
La valeur doit être comprise entre 0 et 1. | Ce paramètre active la comptabilisation du flux de suivi des connexions. La valeur par défaut est 0, ce qui signifie que le paramètre est désactivé. Disponible sur GKE version 1.32.0-gke.1448000 ou ultérieure. |
net.netfilter.nf_conntrack_max |
Doit être compris entre [65536, 4194304]. | Ce paramètre définit la taille de la table de suivi des connexions. Si la valeur maximale est atteinte, la nouvelle connexion échouera. Disponible sur GKE version 1.32.0-gke.1448000 ou ultérieure. |
net.netfilter.nf_conntrack_buckets |
Doit être compris entre [65536, 524288]. |
Ce paramètre définit la taille de la table de hachage. Le paramètre recommandé est le résultat de ce qui suit : Disponible sur GKE version 1.32.0-gke.1448000 ou ultérieure. |
net.netfilter.nf_conntrack_tcp_timeout_close_wait |
Doit être compris entre 60 et 3 600. |
Ce paramètre définit la période, en secondes, pendant laquelle les connexions TCP peuvent rester à l'état Disponible sur GKE version 1.32.0-gke.1448000 ou ultérieure. |
net.netfilter.nf_conntrack_tcp_timeout_established |
Doit être compris entre [600, 86 400]. |
Ce paramètre définit la durée, en secondes, des connexions inactives avant qu'elles ne soient automatiquement supprimées de la table de suivi des connexions. Disponible sur GKE version 1.32.0-gke.1448000 ou ultérieure. |
net.netfilter.nf_conntrack_tcp_timeout_time_wait |
Doit être compris entre 1 et 600. |
Ce paramètre définit la période, en secondes, pendant laquelle les connexions TCP peuvent rester à l'état Disponible sur GKE version 1.32.0-gke.1448000 ou ultérieure. |
Paramètres de la mémoire virtuelle (vm.*)
Le tableau suivant décrit les paramètres modifiables pour le sous-système de mémoire virtuelle. Ces paramètres gèrent le sous-système de mémoire virtuelle, qui contrôle la façon dont le noyau gère la mémoire, l'échange et la mise en cache sur disque.
Paramètre sysctl |
Restrictions | Description |
|---|---|---|
vm.max_map_count |
La valeur doit être comprise entre [65536, 2147483647]. | Ce fichier définit le nombre maximal de zones de mappage mémoire qu'un processus peut avoir. |
vm.dirty_background_ratio |
La valeur doit être comprise entre 1 et 100. | Ce paramètre définit le pourcentage de mémoire système qui peut être rempli de pages sales avant que les threads de vidage du noyau en arrière-plan ne commencent à réécrire les données. La valeur doit être inférieure à celle du champ vm.dirty_ratio. |
vm.dirty_background_bytes |
La valeur doit être comprise entre 0 et 68719476736. |
Ce paramètre définit la quantité de mémoire sale à partir de laquelle les threads de vidage du noyau en arrière-plan commencent à écrire les données. Notez que |
vm.dirty_expire_centisecs |
Doit être compris entre 0 et 6 000. | Ce paramètre définit l'âge maximal, en centièmes de seconde, pendant lequel les données modifiées peuvent rester en mémoire avant que les threads de vidage du noyau ne les écrivent sur le disque. |
vm.dirty_ratio |
La valeur doit être comprise entre 1 et 100. | Ce paramètre définit le pourcentage de mémoire système pouvant être rempli par des pages modifiées avant que les processus qui effectuent des écritures ne soient forcés de bloquer et d'écrire les données modifiées de manière synchrone. |
vm.dirty_bytes |
La valeur doit être comprise entre 0 et 68719476736. |
Ce paramètre définit la quantité de mémoire sale à partir de laquelle un processus qui génère des écritures sur disque commence lui-même à écrire en différé. La valeur minimale autorisée pour Notez que |
vm.dirty_writeback_centisecs |
Doit être compris entre 0 et 1 000. | Ce paramètre définit l'intervalle, en centièmes de seconde, auquel les threads de vidage du noyau se réveillent pour écrire les anciennes données modifiées sur le disque. |
vm.overcommit_memory |
La valeur doit être comprise entre 0, 1 et 2. |
Ce paramètre détermine la stratégie du noyau pour gérer le sur-engagement de mémoire. Les valeurs sont les suivantes :
|
vm.overcommit_ratio |
La valeur doit être comprise entre 0 et 100. | Ce paramètre définit le pourcentage de RAM physique autorisé pour le surdimensionnement lorsque la valeur du champ vm.overcommit_memory est définie sur 2. |
vm.vfs_cache_pressure |
La valeur doit être comprise entre 0 et 100. | Ce paramètre ajuste la préférence du noyau pour la récupération de la mémoire utilisée pour les caches dentry (répertoire) et inode. |
vm.swappiness |
Doit être compris entre 0 et 200. | Ce paramètre contrôle la tendance du noyau à déplacer les processus de la mémoire physique vers le disque d'échange. La valeur par défaut est 60. |
vm.watermark_scale_factor |
Doit être compris entre 10 et 3 000. | Ce paramètre contrôle l'agressivité de kswapd. Il définit la mémoire restante avant que kswapd ne se réveille et la mémoire à libérer avant qu'il ne se mette en veille. La valeur par défaut est 10. |
vm.min_free_kbytes |
La valeur doit être comprise entre [67584, 1048576]. | Ce paramètre définit la mémoire libre minimale avant l'erreur OOM. La valeur par défaut est 67584. |
Pour en savoir plus sur les valeurs acceptées pour chaque option sysctl, consultez la documentation de gcloud CLI sur --system-config-from-file.
Différents espaces de noms Linux peuvent avoir des valeurs uniques pour un indicateur sysctl donné, tandis que d'autres peuvent être globaux pour l'ensemble du nœud. La mise à jour des options sysctl à l'aide d'une configuration de système de nœuds permet de s'assurer que sysctl est appliqué de manière globale sur le nœud et dans chaque espace de noms. Ainsi, chaque pod a des valeurs sysctl identiques dans chaque espace de noms Linux.
Options de configuration du mode cgroup de Linux
L'environnement d'exécution du conteneur et kubelet utilisent des cgroups du noyau Linux pour la gestion des ressources, par exemple pour limiter la quantité de ressources processeur ou mémoire auxquelles chaque conteneur d'un pod peut accéder. Il existe deux versions du sous-système cgroup dans le noyau : cgroupv1 et cgroupv2.
La compatibilité de Kubernetes avec cgroupv2 a été introduite en version alpha dans la version 1.18 de Kubernetes, en version bêta dans la version 1.22 et en disponibilité générale dans la version 1.25. Pour en savoir plus, consultez la documentation Kubernetes sur les cgroups v2.
La configuration du système de nœud vous permet de personnaliser la configuration cgroup de vos pools de nœuds. Vous pouvez utiliser cgroupv1 ou cgroupv2. GKE utilise cgroupv2 pour les nouveaux pools de nœuds standard exécutant les versions 1.26 ou ultérieures, et cgroupv1 pour les pools de nœuds exécutant les versions antérieures à la version 1.26. Pour les pools de nœuds créés avec le provisionnement automatique des nœuds, la configuration du cgroup dépend de la version initiale du cluster, et non de la version du pool de nœuds. cgroupv1 n'est pas compatible avec les machines Arm.
Vous pouvez utiliser la configuration du système de nœud pour modifier le paramètre d'un pool de nœuds afin d'utiliser explicitement cgroupv1 ou cgroupv2. La mise à niveau d'un pool de nœuds existant qui utilise cgroupv1 vers la version 1.26 ne remplace pas le paramètre par cgroupv2.
Les pools de nœuds existants qui exécutent une version antérieure à la version 1.26 et qui n'incluent pas de configuration cgroup personnalisée continueront à utiliser cgroupv1.
Pour modifier le paramètre, vous devez spécifier explicitement cgroupv2 pour le pool de nœuds existant.
Par exemple, pour configurer votre pool de nœuds afin d'utiliser cgroupv2, utilisez un fichier de configuration du système de nœud tel que le suivant :
linuxConfig:
cgroupMode: 'CGROUP_MODE_V2'
Les options cgroupMode acceptées sont les suivantes :
CGROUP_MODE_V1: utilisezcgroupv1sur le pool de nœuds.CGROUP_MODE_V2: utilisezcgroupv2sur le pool de nœuds.CGROUP_MODE_UNSPECIFIED: utilisez la configuration cgroup par défaut de GKE.
Pour utiliser cgroupv2, les exigences et limites suivantes s'appliquent:
- Pour un pool de nœuds exécutant une version antérieure à 1.26, vous devez utiliser gcloud CLI version 408.0.0 ou ultérieure. Vous pouvez également utiliser gcloud beta avec la version 395.0.0 ou une version ultérieure.
- Votre cluster et vos pools de nœuds doivent exécuter GKE version 1.24.2-gke.300 ou ultérieure.
- Vous devez utiliser Container-Optimized OS avec containerd ou Ubuntu avec containerd comme image de nœud.
- Si l'une de vos charges de travail dépend de la lecture du système de fichiers cgroup (
/sys/fs/cgroup/...), assurez-vous qu'elles sont compatibles avec l'APIcgroupv2. - Si vous utilisez des outils de surveillance ou tiers, assurez-vous qu'ils sont compatibles avec
cgroupv2. - Si vous utilisez des charges de travail Java (JDK), nous vous recommandons d'utiliser des versions entièrement compatibles avec cgroupv2, y compris JDK
8u372, JDK 11.0.16 ou version ultérieure, ou JDK 15 ou version ultérieure.
Vérifier la configuration cgroup
Lorsque vous ajoutez une configuration de système de nœud, GKE doit recréer les nœuds pour mettre en œuvre les modifications. Une fois que vous avez ajouté la configuration à un pool de nœuds et que les nœuds ont été recréés, vous pouvez vérifier la nouvelle configuration.
Vous pouvez vérifier la configuration cgroup des nœuds d'un pool de nœuds à l'aide de gcloud CLI ou de l'outil de ligne de commande kubectl :
CLI gcloud
Vérifiez la configuration cgroup d'un pool de nœuds:
gcloud container node-pools describe POOL_NAME \
--format='value(Config.effectiveCgroupMode)'
Remplacez POOL_NAME par le nom de votre pool de nœuds.
La sortie potentielle est l'une des suivantes:
EFFECTIVE_CGROUP_MODE_V1: les nœuds utilisentcgroupv1EFFECTIVE_CGROUP_MODE_V2: les nœuds utilisentcgroupv2
La sortie n'affiche la nouvelle configuration de cgroup qu'après la recréation des nœuds du pool de nœuds. La sortie est vide pour les pools de nœuds Windows Server, qui ne sont pas compatibles avec cgroup.
kubectl
Pour utiliser kubectl afin de vérifier la configuration cgroup des nœuds de ce pool de nœuds, sélectionnez un nœud et connectez-vous à celui-ci en suivant les instructions suivantes :
- Créez un shell interactif avec n'importe quel nœud du pool de nœuds. Dans la commande, remplacez
mynodepar le nom d'un nœud quelconque du pool de nœuds. - Identifiez la version cgroup sur les nœuds Linux.
Options de configuration des hugepages Linux
Vous pouvez utiliser un fichier de configuration du système de nœud pour préallouer des hugepages. Kubernetes prend en charge les hugepages préallouées en tant que type de ressource, comme le processeur ou la mémoire.
Pour utiliser HugePages, les limitations et exigences suivantes s'appliquent :
- Pour garantir que le nœud n'est pas entièrement occupé par les hugepages, la taille globale des hugepages allouées ne peut pas dépasser l'une des valeurs suivantes :
- Sur les machines disposant de moins de 30 Go de mémoire : 60 % de la mémoire totale. Par exemple, sur une machine e2-standard-2 dotée de 8 Go de mémoire, vous ne pouvez pas allouer plus de 4,8 Go aux HugePages.
- Sur les machines disposant de plus de 30 Go de mémoire : 80 % de la mémoire totale. Par exemple, sur les machines c4a-standard-8 dotées de 32 Go de mémoire, les hugepages ne peuvent pas dépasser 25,6 Go.
- Les HugePages de 1 Go ne sont disponibles que sur les types de machines A3, C2D, C3, C3D, C4, C4A, C4D, CT5E, CT5LP, CT6E, H3, M2, M3, M4 ou Z3.
Le tableau suivant décrit les paramètres modifiables pour les hugepages Linux.
| Paramètre de configuration | Restrictions | Valeur par défaut | Description |
|---|---|---|---|
hugepage_size2m |
Nombre entier. Sous réserve des limites d'allocation de mémoire décrites précédemment. | 0 |
Ce paramètre préalloue un nombre spécifique de hugepages de 2 Mo. |
hugepage_size1g |
Nombre entier. Soumis aux limites de mémoire et de type de machine décrites précédemment. | 0 |
Ce paramètre préalloue un nombre spécifique de hugepages de 1 Go. |
Pages énormes transparentes (THP)
Vous pouvez utiliser un fichier de configuration du système de nœud pour activer la prise en charge des pages énormes transparentes du noyau Linux. Avec THP, le noyau attribue automatiquement des hugepages aux processus sans pré-allocation manuelle.
Le tableau suivant décrit les paramètres modifiables pour THP.
| Paramètre de configuration | Valeurs acceptées | Valeur par défaut | Description |
|---|---|---|---|
transparentHugepageEnabled |
|
UNSPECIFIED |
Ce paramètre permet de contrôler si THP est activé pour la mémoire anonyme. |
transparentHugepageDefrag |
|
UNSPECIFIED |
Ce paramètre définit la configuration de défragmentation pour THP. |
THP est disponible sur GKE version 1.33.2-gke.4655000 ou ultérieure. Elle est également activée par défaut sur les nouveaux pools de nœuds TPU dans la version 1.33.2-gke.4655000 ou ultérieure de GKE. THP n'est pas activé lorsque vous mettez à niveau des pools de nœuds existants vers une version compatible ou ultérieure.