Réparation automatique des nœuds

La fonctionnalité de réparation automatique des nœuds surveille en permanence l'état de chaque nœud dans un pool de nœuds. Si un nœud devient défaillant, la fonctionnalité de réparation automatique le répare automatiquement. Cette fonctionnalité réduit la probabilité de panne de cluster et de dégradations des performances, tout en réduisant au maximum la maintenance de vos clusters.

Vous pouvez activer la réparation automatique des nœuds lorsque vous créez ou mettez à jour un pool de nœuds. Notez que vous activez ou désactivez cette fonctionnalité sur les pools de nœuds plutôt que sur chaque nœuds.

Conditions de nœud non opérationnel

La réparation automatique des nœuds examine l'état de chaque nœud pour déterminer s'il nécessite une réparation. Un nœud est considéré comme sain s'il signale un état Ready. Sinon, si un état non opérationnel est signalé de manière consécutive pendant une durée spécifique, des réparations sont lancées.

Un état non opérationnel peut résulter d'un état NotReady détecté lors de vérifications consécutives sur une période d'environ 15 minutes. Sinon, un état non opérationnel peut être dû à l'épuisement de l'espace disque de démarrage, identifié sur une période d'environ 30 minutes

Vous pouvez vérifier manuellement et à tout moment les signaux d'état de votre nœud à l'aide de la commande kubectl get nodes.

Stratégies de réparation des nœuds

La réparation automatique des nœuds suit certaines stratégies pour assurer l'intégrité globale du cluster et la disponibilité des applications pendant le processus de réparation. Cette section explique comment la fonctionnalité de réparation automatique des nœuds respecte les configurations PodDisruptionBudget, respecte Pod Termination Grace Period et prend d'autres mesures qui minimisent les perturbations du cluster lors de la réparation des nœuds.

Honorez PodDisruptionBudget pendant 30 minutes

Lorsqu'un nœud doit être réparé, il n'est pas instantanément drainé et recréé. Au lieu de cela, la fonctionnalité de réparation automatique des nœuds respecte les configurations PodDisruptionBudget (PDB) pendant 30 minutes au maximum, après quoi tous les pods du nœud sont supprimés. (Une configuration PDB définit, entre autres, le nombre minimal d'instances répliquées d'un pod particulier disponibles à tout moment).

En respectant PodDisruptionBudget pendant environ 30 minutes, la fonction de réparation automatique de nœud permet aux pods d'être replanifiés et redistribués en toute sécurité sur les autres nœuds sains du cluster. Cela permet de maintenir le niveau de disponibilité souhaité de l'application pendant le processus de réparation.

Une fois le délai de 30 minutes écoulé, la réparation automatique du nœud se poursuit même si cela implique de ne pas respecter les PodDisruptionBudget. Sans limite de temps, le processus de réparation peut s'arrêter indéfiniment si la configuration PodDisruptionBudget empêche les évictions nécessaires à la réparation.

Respect du délai de grâce pour la résiliation des pods

La fonctionnalité de réparation automatique des nœuds respecte également un délai de grâce pour l'arrêt des pods d'environ 30 minutes. Le délai de grâce avant l'arrêt des pods permet aux pods de disposer d'une fenêtre de temps pour un arrêt progressif lors de la résiliation. Pendant la période de grâce, le kubelet d'un nœud est chargé d'exécuter les tâches de nettoyage libérant les ressources associées aux pods sur ce nœud. La réparation automatique des nœuds laisse jusqu'à 30 minutes au kubelet pour effectuer ce nettoyage. Si les 30 minutes allouées sont écoulées, le nœud est forcé de s'arrêter, que les pods aient été arrêtés correctement ou non.

Stratégies supplémentaires de réparation des nœuds

La réparation automatique des nœuds met également en œuvre les stratégies suivantes :

  • Si plusieurs nœuds nécessitent une réparation, ils sont réparés un par un afin de limiter l'interruption des clusters et pour protéger les charges de travail.
  • Si vous désactivez la réparation automatique de nœuds pendant le processus de réparation, les réparations en cours se poursuivent néanmoins jusqu'à ce que l'opération de réparation aboutisse ou échoue.

Activer et désactiver la réparation automatique des nœuds

Vous pouvez activer ou désactiver la réparation automatique des nœuds lors de la création ou de la mise à jour d'un pool de nœuds. Vous activez ou désactivez cette fonctionnalité sur des pools de nœuds plutôt que sur des nœuds.

Activer la réparation automatique pour un nouveau pool de nœuds

gcloud container azure node-pools create NODE_POOL_NAME \
   --cluster CLUSTER_NAME \
   --location GOOGLE_CLOUD_LOCATION \
   --node-version 1.29.4-gke.200 \
   --vm-size VM_SIZE \
   --max-pods-per-node 110 \
   --min-nodes MIN_NODES \
   --max-nodes MAX_NODES \
   --azure-availability-zone AZURE_ZONE \
   --ssh-public-key SSH_PUBLIC_KEY" \
   --subnet-id SUBNET_ID \
   --enable-autorepair

Remplacez les éléments suivants :

  • NODE_POOL_NAME : nom unique du pool de nœuds, par exemple node-pool-1
  • CLUSTER_NAME : nom de votre cluster GKE sur Azure
  • GOOGLE_CLOUD_LOCATION : zone Google Cloud qui gère votre cluster
  • NODE_VERSION : version de Kubernetes à installer sur chaque nœud du pool de nœuds (par exemple, "1.29.4-gke.200")
  • VM_SIZE : taille de VM Azure compatible
  • MIN_NODES : nombre minimal de nœuds dans le pool de nœuds. Pour plus d'informations, consultez la section Autoscaler de cluster.
  • MAX_NODES : nombre maximal de nœuds dans le pool de nœuds
  • AZURE_ZONE : zone de disponibilité Azure dans laquelle GKE on Azure lance le pool de nœuds. Par exemple, 3.
  • SSH_PUBLIC_KEY : le texte de votre clé publique SSH.
  • SUBNET_ID : ID du sous-réseau du pool de nœuds

Activer la réparation automatique pour un pool de nœuds existant

Pour activer la réparation automatique des nœuds sur un pool de nœuds existant, exécutez la commande suivante:

gcloud container azure node-pools update NODE_POOL_NAME \
   --cluster CLUSTER_NAME \
   --location GOOGLE_CLOUD_LOCATION \
   --enable-autorepair

Remplacez les éléments suivants :

  • NODE_POOL_NAME : nom unique du pool de nœuds, par exemple node-pool-1
  • CLUSTER_NAME : nom du cluster
  • GOOGLE_CLOUD_LOCATION : région Google Cloud qui gère votre cluster

Désactiver la réparation automatique pour un pool de nœuds existant

gcloud container azure node-pools update NODE_POOL_NAME \
   --cluster CLUSTER_NAME \
   --location GOOGLE_CLOUD_LOCATION \
   --no-enable-autorepair

Remplacez les éléments suivants :

  • NODE_POOL_NAME : nom unique du pool de nœuds, par exemple node-pool-1
  • CLUSTER_NAME : nom du cluster
  • GOOGLE_CLOUD_LOCATION : région Google Cloud qui gère votre cluster

Notez que GKE sur Azure désactive la réparation automatique des nœuds de manière progressive. Lorsque vous désactivez la réparation automatique des nœuds pour un pool de nœuds existant, GKE sur Azure lance une opération de mise à jour du pool de nœuds. L'opération attend la fin de toutes les réparations de nœuds existantes avant de continuer.

Vérifier si la réparation automatique des nœuds est activée

Exécutez la commande suivante pour vérifier si la réparation automatique des nœuds est activée ou non :

gcloud container azure node-pools describe NODE_POOL_NAME \
   --cluster CLUSTER_NAME \
   --location GOOGLE_CLOUD_LOCATION

Remplacez les éléments suivants :

  • NODE_POOL_NAME : nom unique du pool de nœuds, par exemple node-pool-1
  • CLUSTER_NAME : nom du cluster
  • GOOGLE_CLOUD_LOCATION : région Google Cloud qui gère votre cluster

Historique des réparations de nœuds

Vous pouvez afficher l'historique des réparations effectuées sur un pool de nœuds en exécutant la commande suivante :

gcloud container azure operations list \
   --location GOOGLE_CLOUD_LOCATION \
   --filter="metadata.verb=repair AND metadata.target=projects/PROJECT_ID/locations/GOOGLE_CLOUD_LOCATION/azureClusters/CLUSTER_NAME/azureNodePools/NODEPOOL_NAME

Remplacez les éléments suivants :

  • GOOGLE_CLOUD_LOCATION : région Google Cloud compatible qui gère votre cluster, par exemple us-west1
  • PROJECT_ID : projet Google Cloud
  • CLUSTER_NAME : nom du cluster
  • NODE_POOL_NAME : nom unique du pool de nœuds, par exemple node-pool-1

Récapitulatif de l'état du pool de nœuds

Une fois que vous avez activé la réparation automatique des nœuds, vous pouvez générer un état de pool de nœuds en exécutant la commande suivante:

gcloud container azure node-pools describe NODE_POOL_NAME \
   --cluster CLUSTER_NAME \
   --location GOOGLE_CLOUD_LOCATION

Un résumé opérationnel d'un pool de nœuds ressemble à l'exemple suivant:

{
  "name": "some-np-name",
  "version": "some-version",
  "state": "RUNNING",

  ...

  "errors": [
    {
      "message": "1 node(s) is/are identified as unhealthy among 2 total node(s) in the node pool. No node is under repair."
    }
  ],
}

Le résumé de l'état du pool de nœuds vous aide à comprendre l'état actuel du pool de nœuds. Dans cet exemple, le résumé contient un message d'erreur indiquant que l'un des deux nœuds du pool de nœuds n'est pas opérationnel. Il indique également qu'aucun nœud n'est actuellement en cours de réparation.