Options de mise à niveau pour les clusters Azure Kubernetes Service (AKS)

Cet article décrit les différentes options de mise à niveau pour les clusters AKS. Pour effectuer une mise à niveau de version de base de Kubernetes, consultez Mettre à niveau un cluster AKS.

Pour en savoir plus sur les clusters AKS utilisant plusieurs pools de nœuds ou des nœuds Windows Server, consultez Mettre à niveau un pool de nœuds dans AKS. Pour mettre à niveau un pool de nœuds spécifique sans effectuer de mise à niveau de cluster Kubernetes, consultez Mettre à niveau un pool de nœuds spécifique.

Effectuer des mises à niveau manuelles

Vous pouvez effectuer des mises à niveau manuelles pour contrôler quand votre cluster est mis à niveau vers une nouvelle version de Kubernetes. Les mises à niveau manuelles sont utiles quand vous souhaitez tester une nouvelle version de Kubernetes avant de mettre à niveau votre cluster de production. Vous pouvez également utiliser des mises à niveau manuelles pour mettre à niveau votre cluster vers une version spécifique de Kubernetes qui n’est pas la dernière version disponible.

Pour effectuer des mises à niveau manuelles, consultez les articles suivants :

Configurer des mises à niveau automatiques

Vous pouvez configurer des mises à niveau automatiques pour mettre automatiquement à niveau votre cluster vers la dernière version disponible de Kubernetes. Les mises à niveau automatiques sont utiles si vous souhaitez vous assurer que votre cluster exécute toujours la dernière version de Kubernetes. Vous pouvez également utiliser des mises à niveau automatiques pour garantir que votre cluster exécute toujours une version de Kubernetes prise en charge.

Pour configurer des mises à niveau automatiques, consultez les articles suivants :

Considérations spéciales pour les pools de nœuds qui s’étendent sur plusieurs zones de disponibilité

AKS utilise l’équilibrage de zone best-effort dans les groupes de nœuds. Pendant une hausse de mise à niveau, les zones des nœuds de hausse dans Virtual Machine Scale Sets ne sont pas connues à l’avance, ce qui peut entraîner temporairement une configuration de zone déséquilibrée pendant une mise à niveau. Toutefois, AKS supprime les nœuds de hausse une fois la mise à niveau terminée et préserve l’équilibre d’origine des zones. Si vous souhaitez maintenir l’équilibre de vos zones pendant les mises à niveau, vous pouvez augmenter la hausse à un multiple de trois nœuds, et Virtual Machine Scale Sets équilibre vos nœuds entre les zones de disponibilité avec l’équilibrage de zone le mieux possible. Avec « best effort zone balance » (meilleur équilibre des zones), le groupe identique tente de diminuer et d’augmenter la taille des instances tout en maintenant l’équilibre. Toutefois, si pour une raison quelconque cela n’est pas possible (par exemple, si une zone tombe en panne, le groupe identique ne peut pas créer de nouvelle machine virtuelle dans cette zone), le groupe identique autorise un déséquilibre temporaire pour effectuer correctement un scale-in ou un scale-out.

Les revendications de volumes persistants (PVC) soutenues par des disques de stockage localement redondant (LRS) Azure sont liées à une zone particulière et risquent de ne pas être récupérées immédiatement si le nœud d’appoint ne correspond pas à la zone de la PVC. Si les zones ne correspondent pas, cela peut entraîner un temps d’arrêt sur votre application lorsque l’opération de mise à niveau continue à vider les nœuds, mais que les PV sont liés à une zone. Pour gérer ce cas et maintenir la haute disponibilité, configurez un budget d’interruption de pod sur votre application afin de permettre à Kubernetes de respecter vos exigences de disponibilité pendant l’opération de drainage.

Optimisation pour un comportement de nœud indrainable (préversion)

Vous pouvez configurer le comportement du processus de mise à niveau pour les échecs de drainage. Le comportement de mise à niveau par défaut est Schedule, qui se compose d’un échec de drainage de nœud entraînant l’échec de l’opération de mise à niveau, laissant les nœuds non entorses dans un état planifiable. Vous pouvez également sélectionner le comportement Cordon, qui ignore les nœuds qui ne parviennent pas à se vider en les plaçant dans un état mis en quarantaine, les étiquette comme étant kubernetes.azure.com/upgrade-status:Quarantined et effectue la mise à niveau des nœuds restants. Ce comportement garantit que tous les nœuds sont mis à niveau ou mis en quarantaine. Cette approche vous permet de résoudre les défaillances de drainage et de gérer correctement les nœuds mis en quarantaine.

Comment définir le nouveau comportement Cordon ?

Utilisez la préversion de la CLI et installez l’extension aks-preview version 9.0.0b3 ou ultérieure.

Vous pouvez utiliser les commandes suivantes pour mettre à jour ou installer l’extension aks-preview :

az extension update --name aks-preview
az extension add --name aks-preview

Mettez à jour le comportement du nœud indrainable du pool de nœuds pour Cordon :

az aks nodepool update --cluster-name $CLUSTER_NAME --name $NODE_POOL_NAME --resource-group $RESOURCE_GROUP --max-surge 1 --undrainable-node-behavior Cordon

L’exemple de sortie suivant montre le comportement de nœud indrainable mis à jour :

"upgradeSettings": {
    "drainTimeoutInMinutes": null,
    "maxSurge": "1",
    "nodeSoakDurationInMinutes": null,
    "undrainableNodeBehavior": "Cordon"
  }

Vérifiez l’étiquette sur les nœuds bloqués. En cas d’échec du nœud de drainage lors de la mise à niveau à l’aide de la commande suivante :

kubectl get nodes --show-labels=true

Les nœuds bloqués sont non planifiés pour les pods et étiquetés comme étant "kubernetes.azure.com/upgrade-status: Quarantined". Le nombre maximal de nœuds qui peuvent être bloqués ne peut pas être supérieur à la valeur Max-Surge.

Comment supprimer les nœuds bloqués ?

Commencez par résoudre le problème à l’origine du drain. L’exemple suivant supprime la base de données PDB responsable :

kubectl delete pdb nginx-pdb
poddisruptionbudget.policy "nginx-pdb" deleted.

Supprimez ensuite le nœud bloqué à l’aide de la commande az aks nodepool delete-machines. Cette commande est utile si vous envisagez de réduire l’encombrement du pool de nœuds en supprimant les nœuds laissés derrière eux dans les versions antérieures.

az aks nodepool delete-machines --cluster-name MyCluster --machine-names aks-nodepool1-test123-vmss000000 --name nodepool1 --resource-group TestRG

Une fois cette étape terminée, vous pouvez rapprocher l’état du cluster en effectuant une opération de mise à jour sans les champs facultatifs, comme indiqué ici.

Exemple de commande  :

az aks update --resource-group TestRG --name MyCluster

Vous pouvez également mettre à l’échelle le pool de nœuds sur le même nombre de nœuds que le nombre de nœuds mis à niveau. Cette action garantit que le pool de nœuds obtient sa taille d’origine prévue. AKS hiérarchise la suppression des nœuds bloqués. Cette commande restaure également l’état d’approvisionnement du cluster sur Succeeded. Dans l’exemple donné, 2 correspond au nombre total de nœuds mis à niveau.

az aks nodepool scale --resource-group TestRG --cluster-name MyCluster --name nodepool1 --node-count 2 

Optimiser les mises à niveau pour améliorer les performances et réduire les interruptions

La combinaison d’une fenêtre de maintenance planifiée, d’une surcharge maximale, d’un budget d’interruption de pods d’un délai d’expiration du drainage des nœuds et d’une période d’absorption des nœuds peut augmenter considérablement la probabilité que les mises à niveau des nœuds se terminent correctement à la fin de la fenêtre de maintenance, tout en réduisant les interruptions.

  • La fenêtre de maintenance planifiée permet aux équipes de service de planifier la mise à niveau automatique pendant une fenêtre prédéfinie, généralement une période de faible trafic, afin de réduire l’impact sur la charge de travail. Nous recommandons une durée de fenêtre d’au moins quatre heures.
  • L’augmentation maximale sur le pool de nœuds permet de demander un quota supplémentaire pendant le processus de mise à niveau et limite le nombre de nœuds sélectionnés pour la mise à niveau simultanément. Un max surge élevé entraîne un processus de mise à niveau plus rapide. Nous vous déconseillons de définir cette valeur sur 100 %. En effet, tous les nœuds seraient mis à niveau simultanément, ce qui pourrait entraîner des perturbations dans les applications en cours d’exécution. Nous recommandons de définir un quota d’augmentation maximale de 33 % pour les pools de nœuds de production.
  • Le budget d’interruption de pods est défini pour les applications de service et limite le nombre de pods qui peuvent être arrêtés lors d’interruptions volontaires, telles que les mises à niveau de nœuds contrôlées par AKS. Il peut être configuré sur minAvailable réplicas, indiquant le nombre minimal de pods d’application qui doivent être actifs, ou maxUnavailable réplicas, indiquant le nombre maximal de pods d’application pouvant être arrêtés, garantissant une haute disponibilité pour l’application. Reportez-vous aux conseils fournis pour la configuration des budgets d’interruption de pods (PDB). Les valeurs de PDB doivent être validées pour déterminer les paramètres qui fonctionnent le mieux pour votre service spécifique.
  • Le délai d’expiration du drainage des nœuds sur le pool de nœuds vous permet de configurer la durée d’attente pour l’éviction des pods et l’arrêt normal par nœud lors d’une mise à niveau. Cette option est utile dans le cas de charges de travail longues. Quand le délai d’expiration du drainage des nœuds est spécifié (en minutes), AKS applique le délai d’attente sur les budgets de perturbation des pods. Si aucun délai n’est spécifié, la valeur par défaut du délai d’expiration est de 30 minutes.
  • La période d’absorption des nœuds permet d’échelonner les mises à niveau des nœuds de manière contrôlée et de minimiser les temps d’arrêt des applications lors d’une mise à niveau. Vous pouvez spécifier un délai d’attente, de préférence aussi proche que possible de 0 minute, pour vérifier l’état de préparation de l’application entre les mises à niveau des nœuds. S’il n’est pas spécifié, sa valeur par défaut est de 0 minute. La période d’absorption des nœuds est associée aux propriétés de surcharge maximale et de délai d’expiration du drainage des nœuds disponibles dans le pool de nœuds afin d’obtenir les bons résultats en termes de rapidité des mises à niveau et de disponibilité des applications.

Étapes suivantes

Cet article vous a présenté différentes options de mise à niveau pour les clusters AKS. Pour obtenir une discussion détaillée sur les meilleures pratiques de mise à niveau et d’autres considérations, consultez Instructions de mise à jour corrective et de mise à niveau AKS.