Cette page explique comment ajouter, gérer, mettre à l'échelle, mettre à niveau et supprimer des pools de nœuds exécutés dans vos clusters standards Google Kubernetes Engine (GKE). Vous découvrirez également comment déployer des pods dans des pools de nœuds spécifiques et les conséquences des mises à niveau des pools de nœuds sur les charges de travail en cours d'exécution.
Les informations de cette page vous aident à optimiser vos clusters GKE Standard pour améliorer les performances et l'évolutivité.
Cette page s'adresse aux opérateurs, aux architectes cloud et aux développeurs qui doivent créer et configurer des clusters, et déployer des charges de travail sur GKE. Pour en savoir plus sur les rôles courants et les exemples de tâches que nous citons dans le contenu Google Cloud, consultez la section Rôles utilisateur et tâches courantes de l'utilisateur dans GKE Enterprise.
Avant de lire cette page, assurez-vous de bien connaître les pools de nœuds.
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 gcloud CLI. Si vous avez déjà installé gcloud CLI, assurez-vous de disposer de la dernière version en exécutant la commande
gcloud components update
.
Configurer des comptes de service IAM pour GKE
GKE utilise des comptes de service IAM associés à vos nœuds pour exécuter des tâches système telles que la journalisation et la surveillance. Ces comptes de service de nœud doivent au minimum disposer du rôle Compte de service de nœud par défaut Kubernetes Engine (roles/container.defaultNodeServiceAccount
) sur votre projet. Par défaut, GKE utilise le compte de service Compute Engine par défaut, qui est créé automatiquement dans votre projet, comme compte de service de nœud.
Pour attribuer le rôle roles/container.defaultNodeServiceAccount
au compte de service Compute Engine par défaut, procédez comme suit:
Console
- Accédez à la page Bienvenue:
- Dans le champ Numéro du projet, cliquez sur Copier dans le presse-papiers.
- Accédez à la page IAM :
- Cliquez sur Accorder l'accès.
- Dans le champ Nouveaux comptes principaux, spécifiez la valeur suivante:
RemplacezPROJECT_NUMBER-compute@developer.gserviceaccount.com
PROJECT_NUMBER
par le numéro de projet que vous avez copié. - Dans le menu Select a role (Sélectionner un rôle), sélectionnez le rôle Compte de service de nœud par défaut Kubernetes Engine.
- Cliquez sur Enregistrer.
gcloud
- Recherchez le numéro de votre Google Cloud projet:
gcloud projects describe PROJECT_ID \ --format="value(projectNumber)"
Remplacez
PROJECT_ID
par l'ID du projet.Le résultat ressemble à ce qui suit :
12345678901
- Attribuez le rôle
roles/container.defaultNodeServiceAccount
au compte de service Compute Engine par défaut:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \ --role="roles/container.defaultNodeServiceAccount"
Remplacez
PROJECT_NUMBER
par le numéro de projet de l'étape précédente.
Ajouter un pool de nœuds à un cluster standard
Vous pouvez ajouter un pool de nœuds à un cluster GKE Standard à l'aide de gcloud CLI, de la console Google Cloud ou de Terraform. GKE est également compatible avec le provisionnement automatique des nœuds, qui gère automatiquement les pools de nœuds de votre cluster en fonction des exigences de scaling.
Créez et utilisez un compte de service IAM (Identity and Access Management) doté de privilèges minimaux pour vos pools de nœuds, plutôt que d'utiliser le compte de service Compute Engine par défaut. Pour savoir comment créer un compte de service doté de privilèges minimaux, consultez la page Renforcer la sécurité d'un cluster.
gcloud
Pour créer un pool de nœuds, exécutez la commande gcloud container node-pools create
:
gcloud container node-pools create POOL_NAME \
--cluster CLUSTER_NAME \
--service-account SERVICE_ACCOUNT
Remplacez les éléments suivants :
POOL_NAME
: nom du nouveau pool de nœuds.CLUSTER_NAME
: nom de votre cluster existant.SERVICE_ACCOUNT
: nom du compte de service IAM à utiliser pour les nœuds.Nous vous recommandons vivement de spécifier un compte de service IAM doté de privilèges minimaux que vos nœuds peuvent utiliser à la place du compte de service Compute Engine par défaut. Pour savoir comment créer un compte de service doté de privilèges minimaux, consultez la section Utiliser un compte de service doté du moindre privilège.
Pour spécifier un compte de service personnalisé dans la gcloud CLI, ajoutez l'indicateur suivant à votre commande:
--service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Remplacez SERVICE_ACCOUNT_NAME par le nom de votre compte de service à privilèges limités.
Pour obtenir la liste complète des options facultatives que vous pouvez spécifier, consultez la documentation sur gcloud container node-pools create
.
Le résultat ressemble à ce qui suit :
Creating node pool POOL_NAME...done.
Created [https://container.googleapis.com/v1/projects/PROJECT_ID/zones/us-central1/clusters/CLUSTER_NAME/nodePools/POOL_NAME].
NAME: POOL_NAME
MACHINE_TYPE: e2-medium
DISK_SIZE_GB: 100
NODE_VERSION: 1.21.5-gke.1302
Dans ce résultat, vous voyez des détails sur le pool de nœuds, tels que le type de machine et la version de GKE s'exécutant sur les nœuds.
Il arrive parfois que le pool de nœuds soit créé, mais que la commande gcloud
expire au lieu de signaler l'état au serveur. Pour vérifier l'état de tous les pools de nœuds, y compris ceux qui n'ont pas encore été entièrement provisionnés, utilisez la commande suivante :
gcloud container node-pools list --cluster CLUSTER_NAME
Console
Pour ajouter un pool de nœuds à un cluster standard existant, procédez comme suit :
Accédez à la page Google Kubernetes Engine dans la console Google Cloud .
Dans la liste des clusters, cliquez sur le nom du cluster standard que vous souhaitez modifier.
Cliquez sur add_box Ajouter un pool de nœuds.
Configurez votre pool de nœuds.
Dans le menu de navigation, cliquez sur Sécurité.
- Vous pouvez également spécifier un compte de service IAM personnalisé pour vos nœuds :
- Sur la page Paramètres avancés, développez la section Sécurité.
- Dans le menu Compte de service, sélectionnez le compte de service de votre choix.
Nous vous recommandons vivement de spécifier un compte de service IAM doté de privilèges minimaux que vos nœuds peuvent utiliser à la place du compte de service Compute Engine par défaut. Pour savoir comment créer un compte de service doté de privilèges minimaux, consultez la section Utiliser un compte de service doté du moindre privilège.
Cliquez sur Créer pour ajouter le pool de nœuds.
Terraform
Pour ajouter un pool de nœuds à un cluster standard existant à 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.
Afficher les pools de nœuds d'un cluster standard
gcloud
Pour répertorier tous les pools de nœuds d'un cluster standard, exécutez la commande gcloud container node-pools list
:
gcloud container node-pools list --cluster CLUSTER_NAME
Pour afficher des détails sur un pool de nœuds spécifique, exécutez la commande gcloud container node-pools describe
:
gcloud container node-pools describe POOL_NAME \
--cluster CLUSTER_NAME
Remplacez l'élément suivant :
CLUSTER_NAME
: nom du clusterPOOL_NAME
: nom du pool de nœuds à afficher
Console
Pour afficher les pools de nœuds d'un cluster standard, procédez comme suit :
Accédez à la page Google Kubernetes Engine dans la console Google Cloud .
Dans la liste des clusters, cliquez sur le nom du cluster standard.
Cliquez sur l'onglet Nœuds.
Sous Pools de nœuds, cliquez sur le nom du pool de nœuds à afficher.
Effectuer un scaling de pool de nœuds
Vous pouvez effectuer un scaling à la hausse ou à la baisse de vos pools de nœuds pour optimiser les performances et les coûts. Avec les pools de nœuds GKE Standard, vous pouvez :Effectuer un scaling horizontal d'un pool de nœuds en modifiant le nombre de nœuds du pool de nœuds, ou effectuer un scaling vertical d'un pool de nœuds en modifiant la configuration des attributs de machines des nœuds.
Effectuer un scaling horizontal en modifiant le nombre de nœuds
gcloud
Pour redimensionner les pools de nœuds d'un cluster, exécutez la commande gcloud container clusters resize
:
gcloud container clusters resize CLUSTER_NAME \
--node-pool POOL_NAME \
--num-nodes NUM_NODES
Remplacez l'élément suivant :
CLUSTER_NAME
: nom du cluster à redimensionner.POOL_NAME
: nom du pool de nœuds à redimensionner.NUM_NODES
: nombre de nœuds du pool dans un cluster zonal. Si vous utilisez des clusters multizones ou régionaux, NUM_NODES est le nombre de nœuds pour chaque zone dans laquelle se trouve le pool de nœuds.
Répétez cette commande pour chaque pool de nœuds. Si votre cluster ne comporte qu'un seul pool de nœuds, omettez l'indicateur --node-pool
.
Console
Pour redimensionner les pools de nœuds d'un cluster, procédez comme suit :
Accédez à la page Google Kubernetes Engine dans la console Google Cloud .
Dans la liste des clusters, cliquez sur le nom du cluster standard que vous souhaitez modifier.
Cliquez sur l'onglet Nœuds.
Dans la section Pools de nœuds, cliquez sur le nom du pool de nœuds que vous souhaitez redimensionner.
Cliquez sur edit Redimensionner.
Dans le champ Nombre de nœuds, saisissez le nombre de nœuds que vous souhaitez inclure dans le pool de nœuds, puis cliquez sur Redimensionner.
Répétez cette procédure pour chaque pool de nœuds s'il y a lieu.
Effectuer un scaling vertical en modifiant les attributs de machine des nœuds
Vous pouvez modifier le type de machine, le type et la taille du disque configurés du pool de nœuds.
Lorsque vous modifiez un ou plusieurs de ces attributs de machine, GKE met à jour les nœuds vers la nouvelle configuration à l'aide de la règle de mise à niveau configurée pour le pool de nœuds. Si vous configurez la règle de mise à niveau bleu-vert, vous pouvez migrer les charges de travail des nœuds d'origine vers les nouveaux nœuds tout en ayant la possibilité d'effectuer un rollback des nœuds d'origine si la migration échoue. Inspectez les paramètres de mise à niveau du pool de nœuds pour vous assurer que la règle configurée correspond à la manière dont vous souhaitez mettre à jour les nœuds.
Mettez à jour au moins un des attributs de machine en surbrillance dans la commande suivante :
gcloud container node-pools update POOL_NAME \
--cluster CLUSTER_NAME \
--machine-type MACHINE_TYPE \
--disk-type DISK_TYPE \
--disk-size DISK_SIZE
Ignorez les options d'attributs de machine que vous ne souhaitez pas modifier. Cependant, vous devez utiliser au moins une option d'attribut de machine, sinon la commande échouera.
Remplacez les éléments suivants :
POOL_NAME
: nom du pool de nœuds à redimensionner.CLUSTER_NAME
: nom du cluster à redimensionner.MACHINE_TYPE
: type de machine à utiliser pour les nœuds. Pour en savoir plus, consultez la commande gcloud container node-pools update.DISK_TYPE
: le type de disque de démarrage de la VM de nœud doit être l'un des suivants :pd-standard
,pd-ssd
,pd-balanced
.DISK_SIZE
: taille des disques de démarrage des VM de nœud en Go La valeur par défaut est 100 Go.
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 de nœuds sans respecter les règles de maintenance. Pour en savoir plus sur les mises à jour de nœuds, consultez Planifier les perturbations liées aux mises à jour de nœuds.
Mettre à niveau un pool de nœuds
Par défaut, la mise à niveau automatique est activée sur les nœuds d'un cluster. Les mises à niveau automatiques des nœuds garantissent que le plan de contrôle et la version des nœuds de votre cluster restent synchronisés et conformes aux règles d'asymétrie de version Kubernetes, ce qui garantit que les plans de contrôle sont compatibles avec les nœuds jusqu'à deux versions mineures antérieures au plan de contrôle. Par exemple, les plans de contrôle Kubernetes 1.29 sont compatibles avec les nœuds Kubernetes 1.27.
Évitez de désactiver les mises à niveau automatiques des nœuds afin que votre cluster bénéficie des mises à niveau listées dans le paragraphe précédent.
Avec les mises à niveau du pool de nœuds GKE, vous pouvez choisir entre deux stratégies de mise à niveau configurables, à savoir les mises à niveau de la surutilisation et les mises à niveau bleu-vert.
Choisissez une stratégie et utilisez les paramètres pour ajuster la stratégie afin de répondre au mieux aux besoins de votre environnement de cluster.
Fonctionnement des mises à niveau des nœuds
Lorsqu'un nœud est mis à jour, GKE interrompt la programmation de nouveaux pods et tente de programmer les pods en cours d'exécution sur d'autres nœuds. Cette opération est semblable à d'autres événements permettant de recréer le nœud, tels que l'activation ou la désactivation d'une fonctionnalité dans le pool de nœuds.
Pendant les mises à jour automatiques ou manuelles des nœuds, les PodDisruptionBudgets (PDB) et le délai de grâce pour l'arrêt des pods sont respectés pendant une heure au maximum. Si les pods exécutés sur le nœud ne peuvent pas être programmés sur de nouveaux nœuds au bout d'une heure, GKE lance la mise à niveau. Ce comportement s'applique même si vous configurez vos PDB pour que toutes vos instances répliquées soient toujours disponibles en définissant le champ maxUnavailable
sur 0
ou 0%
, ou en définissant le champ minAvailable
sur 100%
ou sur le nombre d'instances répliquées. Dans tous ces scénarios, GKE supprime les pods au bout d'une heure pour que la suppression du nœud puisse avoir lieu.
Si une charge de travail nécessite plus de flexibilité avec une résiliation concertée, utilisez des mises à niveau bleu-vert, qui fournissent des paramètres de temps de stabilisation supplémentaire pour étendre les vérifications PDB au-delà de la valeur par défaut d'une heure.
Pour savoir à quoi vous attendre lors de l'arrêt de nœuds en général, consultez la page sur les pods.
La mise à jour n'est terminée que lorsque tous les nœuds ont été recréés et que le cluster est dans l'état souhaité. Lorsqu'un nœud qui vient d'être mis à niveau s'enregistre auprès du plan de contrôle, GKE le marque comme programmable.
Les nouvelles instances de nœud exécutent la version souhaitée de Kubernetes, ainsi que les composants suivants :
Pour qu'une mise à niveau d'un pool de nœuds soit considérée comme terminée, tous les nœuds du pool doivent être recréés. Si une mise à niveau a commencé, mais qu'elle n'a pas été terminée et qu'elle est partiellement mise à niveau, la version du pool de nœuds peut ne pas refléter la version de tous les nœuds. Pour en savoir plus, consultez Certaines versions de nœuds ne correspondent pas à la version du pool de nœuds après une mise à niveau du pool de nœuds incomplète. Pour vérifier que la mise à niveau du pool de nœuds est terminée, vérifiez l'état de la mise à niveau du pool de nœuds. Si l'opération de mise à niveau dépasse la période de conservation, vérifiez que chaque version de nœud correspond à la version du pool de nœuds.
Mettre à niveau manuellement un pool de nœuds
Vous pouvez mettre à niveau manuellement une version du pool de nœuds vers celle du plan de contrôle ou vers une version antérieure qui est toujours disponible et compatible avec le plan de contrôle. Vous pouvez mettre à niveau manuellement plusieurs pools de nœuds en parallèle, tandis que GKE ne met à niveau automatiquement qu'un seul pool de nœuds à la fois.
Lorsque vous mettez à niveau manuellement un pool de nœuds, GKE supprime les libellés que vous avez ajoutés à des nœuds individuels à l'aide de kubectl
.
Pour éviter cela, essayez plutôt d'appliquer des libellés aux pools de nœuds.
Avant de mettre à niveau manuellement votre pool de nœuds, tenez compte des conditions suivantes:
- La mise à niveau d'un pool de nœuds peut perturber les charges de travail s'exécutant dans celui-ci. Pour éviter cela, vous pouvez créer un pool de nœuds de la version souhaitée, puis migrer la charge de travail vers celui-ci. Une fois la migration terminée, vous pouvez supprimer l'ancien pool de nœuds.
- Si vous mettez à niveau un pool de nœuds avec un Ingress dans un état erroné, le groupe d'instances ne se synchronise pas. Afin d'éviter ce problème, commencez par vérifier l'état à l'aide de la commande
kubectl get ing
. Si le groupe d'instances n'est pas synchronisé, vous pouvez réappliquer le fichier manifeste utilisé pour créer l'entrée.
Vous pouvez mettre à jour manuellement vos pools de nœuds vers une version compatible avec le plan de contrôle à l'aide de la console Google Cloud ou de la Google Cloud CLI.
gcloud
Les variables suivantes sont utilisées dans les commandes de cette section :
CLUSTER_NAME
: nom du cluster du pool de nœuds à mettre à jour.NODE_POOL_NAME
: nom du pool de nœuds à mettre à jour.VERSION
: version de Kubernetes vers laquelle les nœuds sont mis à niveau. Par exemple,--cluster-version=1.7.2
oucluster-version=latest
.
Mettre à niveau un pool de nœuds :
gcloud container clusters upgrade CLUSTER_NAME \
--node-pool=NODE_POOL_NAME
Pour spécifier une autre version de GKE sur les nœuds, utilisez l'indicateur --cluster-version
facultatif :
gcloud container clusters upgrade CLUSTER_NAME \
--node-pool=NODE_POOL_NAME \
--cluster-version VERSION
Pour en savoir plus sur la spécification des versions, consultez la page Gestion des versions.
Pour en savoir plus, consultez la documentation sur gcloud container clusters upgrade
.
Console
Pour mettre à niveau un pool de nœuds à l'aide de la console Google Cloud , procédez comme suit:
Accédez à la page Google Kubernetes Engine dans la console Google Cloud .
Cliquez sur le nom du cluster.
Sur la page Détails du cluster, cliquez sur l'onglet Nœuds.
Dans la section Pools de nœuds, cliquez sur le nom du pool de nœuds que vous souhaitez mettre à niveau.
Cliquez sur edit Modifier.
Cliquez sur Modifier sous Version du nœud.
Sélectionnez la version souhaitée dans la liste déroulante Version du nœud, puis cliquez sur Modifier.
Le changement de version du nœud peut prendre plusieurs minutes.
Déployer un pod sur un pool de nœuds spécifique
Vous pouvez déployer explicitement un pod sur un pool de nœuds spécifique en utilisant un sélecteur de nœuds (nodeSelector
) dans le fichier manifeste de votre pod. nodeSelector
planifie les pods sur les nœuds avec un libellé correspondant.
Tous les pools de nœuds GKE possèdent des libellés au format suivant : cloud.google.com/gke-nodepool: POOL_NAME
.
Ajoutez ce libellé au champ nodeSelector
de votre pod, comme illustré dans l'exemple suivant :
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
nodeSelector:
cloud.google.com/gke-nodepool: POOL_NAME
Pour plus d'informations, consultez l'article Affecter des pods à des nœuds.
Au lieu du sélecteur de nœud, vous pouvez utiliser l'affinité de nœuds. Utilisez l'affinité de nœuds si vous souhaitez une règle "douce" dans laquelle le pod tente de respecter la contrainte, mais est toujours planifiée, même si la contrainte ne peut pas être remplie. Pour plus d'informations, consultez la section Affinité de nœud. Vous pouvez également spécifier des requêtes de ressources pour les conteneurs.
Rétablir une version antérieure d'un pool de nœuds
Vous pouvez revenir à une version antérieure d'un pool de nœuds, par exemple pour récupérer de l'échec d'une mise à niveau du pool de nœuds. Consultez les limites avant de revenir à une version antérieure d'un pool de nœuds.
Utilisez la stratégie de mise à niveau des nœuds bleu-vert si vous devez optimiser les mesures de réduction des risques pour les mises à niveau du pool de nœuds affectant vos charges de travail. Avec cette stratégie, vous pouvez effectuer le rollback d'une mise à niveau en cours vers les nœuds d'origine si la mise à niveau échoue.
- Définissez une exclusion de maintenance pour le cluster afin d'empêcher la mise à niveau automatique du pool de nœuds par GKE après son retour à une version antérieure.
- Pour revenir à une version antérieure d'un pool de nœuds, spécifiez une version antérieure en suivant les instructions de la section Mettre à jour manuellement un pool de nœuds.
Supprimer un pool de nœuds
La suppression d'un pool de nœuds supprime aussi bien les nœuds que les charges de travail en cours d'exécution, quel que soit le paramètre PodDisruptionBudget
. Pour en savoir plus sur la manière dont cela affecte vos charges de travail, y compris les interactions avec les sélecteurs de nœuds, consultez la page Supprimer des pools de nœuds.
gcloud
Pour supprimer un pool de nœuds, exécutez la commande gcloud container node-pools delete
:
gcloud container node-pools delete POOL_NAME \
--cluster CLUSTER_NAME
Console
Pour supprimer un pool de nœuds, procédez comme suit :
Accédez à la page Google Kubernetes Engine dans la console Google Cloud .
Dans la liste des clusters, cliquez sur le nom du cluster standard que vous souhaitez modifier.
Cliquez sur l'onglet Nœuds.
Dans la section Pools de nœuds, cliquez sur le bouton delete situé à côté du pool de nœuds à supprimer.
Lorsque vous êtes invité à confirmer votre choix, cliquez sur Supprimer.
Migrer des nœuds vers un autre type de machine
Pour découvrir les différentes approches permettant de déplacer des charges de travail entre des types de machines, par exemple pour migrer vers un type de machine plus récent, consultez Migrer des nœuds vers un autre type de machine.
Migrer des charges de travail entre des pools de nœuds
Pour migrer des charges de travail d'un pool de nœuds vers un autre, consultez la page Migrer des charges de travail entre des pools de nœuds. Par exemple, vous pouvez suivre ces instructions si vous remplacez un pool de nœuds existant par un nouveau pool de nœuds et que vous souhaitez vous assurer que les charges de travail sont transférées des nœuds existants vers les nouveaux.
Résoudre les problèmes
Pour obtenir des informations de dépannage, consultez les pages Résoudre les problèmes liés aux pools de nœuds Standard et Résoudre les problèmes d'enregistrement des nœuds.
Étapes suivantes
- Obtenez plus d'informations sur le provisionnement automatique des pools de nœuds.
- Découvrez comment GKE peut réparer automatiquement les nœuds défaillants.
- Apprenez à configurer
kubelet
etsysctl
à l'aide de la configuration du système de nœud.