L'échange de mémoire de nœud Google Kubernetes Engine (GKE) permet aux nœuds GKE d'utiliser l'espace disque comme mémoire virtuelle lorsque la mémoire physique est épuisée. L'échange de mémoire de nœud peut aider à améliorer la résilience des applications et à éviter les erreurs de mémoire insuffisante (OOM) pour certaines charges de travail.
Quand utiliser le swap de mémoire de nœud ?
Utilisez l'échange de mémoire de nœud pour fournir un tampon contre les erreurs OOM pour les applications gourmandes en mémoire, en particulier lors de pics d'utilisation inattendus. L'échange de mémoire de nœud peut vous aider à améliorer la résilience de vos charges de travail, par exemple dans les scénarios suivants :
- Exécutez des charges de travail avec des modèles de mémoire imprévisibles.
- Réduisez le risque de plantage des applications en raison de l'épuisement de la mémoire des nœuds.
- Optimisez les coûts en évitant de surprovisionner la mémoire pour les pics occasionnels.
Fonctionnement de l'échange de mémoire des nœuds
Lorsque vous activez l'échange de mémoire de nœud, GKE configure le système d'exploitation du nœud pour qu'il utilise l'espace disque comme mémoire virtuelle. Ce processus fournit un tampon pour les applications qui subissent une pression de mémoire temporaire.
GKE calcule les limites de swap de conteneur en fonction des limites de ressources mémoire du conteneur et de la mémoire totale du nœud.
Vous pouvez configurer l'espace d'échange sur différents types de stockage pour équilibrer les performances et les coûts :
- Disque de démarrage : utilise le disque de démarrage du nœud pour l'espace d'échange.
- SSD local éphémère : utilise un SSD local qui est également partagé avec le stockage éphémère du pod.
- Disque SSD local dédié : réserve un ou plusieurs disques SSD locaux exclusivement pour l'espace d'échange.
Pour protéger les données sensibles, GKE chiffre l'espace d'échange par défaut à l'aide d'une clé éphémère.
Conditions requises et limites
L'échange de mémoire de nœud présente les exigences et limites suivantes :
- Les clusters GKE doivent être en version
1.34.1-gke.1341000ou ultérieure. - Seuls les pods qui appartiennent à la classe de qualité de service (QoS)
Burstablepeuvent utiliser l'échange de mémoire de nœud. Pour en savoir plus sur les classes QoS, consultez la documentation Kubernetes sur les classes de qualité de service (QoS) des pods. - Si vous activez l'échange de mémoire des nœuds, la règle de redimensionnement des conteneurs doit être définie sur
RestartContainer. - Si vous configurez l'échange de mémoire de nœud pour utiliser un disque de démarrage, la taille de l'espace d'échange ne peut pas dépasser 50 % de la capacité totale du disque de démarrage.
Si vous configurez l'échange de mémoire de nœud pour utiliser un SSD local, vous devez vous assurer que les exigences suivantes sont respectées :
- Le type de machine doit être compatible avec les SSD locaux. Vous ne pouvez pas utiliser le stockage de blocs bruts avec un disque SSD local.
- Les nœuds doivent être provisionnés avec des disques SSD locaux. La méthode de provisionnement dépend de la série de machines :
- Pour les séries de machines de première ou deuxième génération, définissez l'indicateur
--ephemeral-storage-local-ssd=count. - Pour les séries de machines de troisième ou quatrième génération, choisissez un type de machine qui regroupe les SSD locaux.
- Pour les séries de machines de première ou deuxième génération, définissez l'indicateur
- Le type de machine
e2-mediumpar défaut n'est pas compatible avec les SSD locaux. Vous devez donc sélectionner un autre type de machine. - Pour savoir comment créer ou mettre à jour un cluster afin qu'il provisionne des disques SSD locaux, consultez Provisionner et utiliser un stockage éphémère sauvegardé sur disque SSD local.
Bonnes pratiques
L'échange de mémoire de nœud est conçu comme un filet de sécurité pour les pics de mémoire imprévisibles, et non comme un remplacement de la mémoire physique suffisante. Pour obtenir des conseils sur l'optimisation des charges de travail, consultez Dimensionner correctement vos charges de travail GKE à grande échelle.
Vous devez également tenir compte des bonnes pratiques suivantes lorsque vous utilisez l'espace d'échange de mémoire des nœuds :
- Isolez les nœuds sur lesquels l'échange de mémoire est activé en appliquant un rejet au pool de nœuds, par exemple
gke-swap=enabled:NoSchedule, et en ajoutant une tolérance correspondante aux charges de travail destinées à utiliser l'échange. - Dimensionnez correctement l'espace d'échange de la mémoire de votre nœud. Un espace de mémoire d'échange de nœud insuffisant peut ne pas empêcher les erreurs de mémoire saturée (OOM), et une utilisation excessive peut dégrader les performances.
- Surveillez l'utilisation de l'espace d'échange de mémoire des nœuds sur vos charges de travail. L'utilisation fréquente de l'espace d'échange de la mémoire des nœuds peut indiquer une pression sur la mémoire.
Avant de commencer
Avant de commencer, effectuez les tâches suivantes :
- Activez l'API Google Kubernetes Engine. Activer l'API Google Kubernetes Engine
- Si vous souhaitez utiliser Google Cloud CLI pour cette tâche, installez puis initialisez la gcloud CLI. Si vous avez déjà installé la gcloud CLI, obtenez la dernière version en exécutant la commande
gcloud components update. Il est possible que les versions antérieures de la gcloud CLI ne permettent pas d'exécuter les commandes de ce document.
Activer l'échange de mémoire des nœuds
Vous pouvez activer le swap de mémoire de nœud au niveau du cluster ou du pool de nœuds. Pour activer l'échange de mémoire de nœud, créez ou mettez à jour un fichier system-config.yaml contenant la configuration d'échange de mémoire de nœud souhaitée. L'exemple suivant active l'échange de mémoire de nœud avec les paramètres par défaut :
linuxConfig:
swapConfig:
enabled: true
Vous pouvez configurer d'autres paramètres. Cet exemple configure l'espace d'échange non chiffré pour utiliser 30 % du stockage d'un disque SSD local éphémère :
linuxConfig:
swapConfig:
enabled: true
encryptionConfig:
disabled: true
ephemeralLocalSsdProfile:
swapSizePercent: 30
Pour obtenir la liste des champs facultatifs que vous pouvez configurer, consultez la documentation de l'API LinuxNodeConfig.
Activer l'échange de mémoire de nœud sur un cluster
Pour activer l'échange de mémoire des nœuds sur un cluster, procédez comme suit :
Pour créer un cluster avec l'échange de mémoire de nœud activé, exécutez la commande suivante :
gcloud beta container clusters create CLUSTER_NAME \ --location=LOCATION \ --cluster-version=1.34.1-gke.1341000 \ --system-config-from-file=system-config.yamlRemplacez les éléments suivants :
CLUSTER_NAME: nom de votre nouveau clusterLOCATION: région ou zone de votre cluster.
Pour mettre à jour un cluster existant afin d'activer l'échange de mémoire des nœuds, exécutez la commande suivante :
gcloud beta container clusters update CLUSTER_NAME \ --location=LOCATION \ --system-config-from-file=system-config.yamlRemplacez les éléments suivants :
CLUSTER_NAME: nom de votre nouveau clusterLOCATION: région ou zone de votre cluster.
Activer l'échange de mémoire de nœud sur un pool de nœuds
Pour activer l'échange de mémoire de nœud sur un pool de nœuds, procédez comme suit :
Pour créer un pool de nœuds avec l'échange de mémoire de nœud activé, exécutez la commande suivante :
gcloud beta container node-pools create NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --node-version=1.34.1-gke.1293000 \ --system-config-from-file=system-config.yaml \ --machine-type=MACHINE_TYPERemplacez les éléments suivants :
NODEPOOL_NAME: nom de votre nouveau pool de nœuds.CLUSTER_NAME: nom du clusterLOCATION: région ou zone de votre cluster.MACHINE_TYPE: type de machine compatible. Pour les SSD locaux, assurez-vous de choisir un type de machine qui regroupe les SSD locaux, par exemplen1-standard-1.
Pour mettre à jour un pool de nœuds existant afin d'activer l'échange de mémoire de nœud, exécutez la commande suivante :
gcloud beta container node-pools update NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --system-config-from-file=system-config.yamlRemplacez les éléments suivants :
NODEPOOL_NAME: nom de votre pool de nœuds.CLUSTER_NAME: nom du clusterLOCATION: région ou zone de votre cluster.
Vérifier la configuration
Pour vérifier que l'échange de mémoire de nœud est activé, procédez comme suit :
Vérifiez que
system-config.yamlest appliqué avec les paramètresswapConfigen exécutant la commande suivante :gcloud beta container node-pools describe NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --format='yaml(config.linuxNodeConfig.swapConfig)'Vérifiez que la configuration kubelet existe sur le nœud en exécutant la commande suivante :
kubectl get --raw "/api/v1/nodes/NODE_NAME/proxy/configz" | jq .kubeletconfig.memorySwap
Surveiller l'utilisation de l'espace d'échange de mémoire
Vous pouvez surveiller la mémoire des nœuds avec Cloud Monitoring ou kubectl.
Surveillance
Les métriques système suivantes sont disponibles par défaut pour observer l'utilisation du swap :
kubernetes.io/node/memory/swap_used_byteskubernetes.io/container/memory/swap_used_bytes
GKE fournit également des métriques sur l'utilisation du swap au niveau des conteneurs via cAdvisor. Pour utiliser ces métriques, activez cAdvisor sur le cluster :
prometheus.googleapis.com/container_memory_swap/gauge
kubectl
Pour surveiller l'utilisation du swap avec les commandes kubectl, procédez comme suit :
Vérifiez la condition
SwapDetectedsur l'objet de nœud en exécutant la commande suivante :kubectl get node NODE_NAME -o jsonpath='{.status.conditions[?(@.type=="Swap")]}' | jq .Le résultat ressemble à ce qui suit :
{ "lastHeartbeatTime": "2025-07-11T00:14:52Z", "lastTransitionTime": "2025-06-25T05:20:10Z", "message": "Swap is active: Total=49Gi Used=0B Free=49Gi", "reason": "SwapDetected", "status": "True", "type": "Swap" }Vérifiez la capacité du swap en exécutant la commande suivante :
kubectl get node NODE_NAME -o jsonpath='{.status.nodeInfo.swap}'Le résultat ressemble à ce qui suit :
{"capacity":53687087104}
Désactiver le swap de mémoire des nœuds
Pour désactiver le swap de mémoire des nœuds, mettez à jour votre fichier system-config.yaml en procédant comme suit :
Mettez à jour le fichier
system-config.yamlpour définirswapConfig.enabledsurfalse:linuxConfig: swapConfig: enabled: falseMettez à jour le pool de nœuds avec la nouvelle configuration :
gcloud beta container node-pools update NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --system-config-from-file=system-config.yaml
Étapes suivantes
- En savoir plus sur la personnalisation de la configuration du système de nœuds
- En savoir plus sur les options de stockage GKE