Partage via


Arrêter automatiquement les mises à niveau du cluster Azure Kubernetes Service (AKS) sur des changements cassants d’API

Cet article vous montre comment arrêter automatiquement les mises à niveau du cluster Azure Kubernetes Service (AKS) lors de changements cassants d’API.

Vue d’ensemble

Pour rester dans une version de Kubernetes prise en charge, vous devez mettre à niveau votre cluster au moins une fois par an et vous préparer à toutes les interruptions possibles. Ces interruptions incluent celles provoquées par des changements cassants, des dépréciations et des dépendances d’API comme Helm et CSI (Container Storage Interface). Il peut être difficile d’anticiper ces interruptions et de migrer des charges de travail critiques sans subir de temps d’arrêt.

Vous pouvez configurer votre cluster AKS pour qu’il arrête automatiquement les opérations de mise à niveau qui consistent à apporter un changement de version mineur avec des API dépréciées et pour qu’il vous informe du problème. Cette fonctionnalité vous permet d’éviter des interruptions inattendues et vous donne le temps de résoudre les API dépréciées avant de poursuivre la mise à niveau.

Avant de commencer

Avant de commencer, veillez à respecter les conditions préalables suivantes :

  • L’opération de mise à niveau est un changement de version mineure Kubernetes pour le plan de contrôle du cluster.
  • Vous effectuez une mise à niveau vers Kubernetes version 1.26 ou ultérieure.
  • La dernière utilisation observée des API déconseillées pour la version ciblée vers laquelle vous effectuez la mise à niveau doit se produire dans les 12 heures précédant l’opération de mise à niveau. AKS enregistre l’utilisation toutes les heures, de sorte que l’utilisation d’API dépréciées dans l’heure peut ne pas apparaître dans la détection.

Atténuer des opérations de mise à niveau arrêtées

Si vous respectez les conditions préalables, que vous tentez une mise à niveau et que vous recevez un message d’erreur similaire à l’exemple de message d’erreur suivant :

Bad Request({
  "code": "ValidationError",
  "message": "Control Plane upgrade is blocked due to recent usage of a Kubernetes API deprecated in the specified version. Please refer to https://kubernetes.io/docs/reference/using-api/deprecation-guide to migrate the usage. To bypass this error, set enable-force-upgrade in upgradeSettings.overrideSettings. Bypassing this error without migrating usage will result in the deprecated Kubernetes API calls failing. Usage details: 1 error occurred:\n\t* usage has been detected on API flowcontrol.apiserver.k8s.io.prioritylevelconfigurations.v1beta1, and was recently seen at: 2023-03-23 20:57:18 +0000 UTC, which will be removed in 1.26\n\n",
  "subcode": "UpgradeBlockedOnDeprecatedAPIUsage"
})

Vous avez deux options pour atténuer le problème : vous pouvez supprimer l’utilisation des API dépréciées (recommandé) ou passer outre la validation pour ignorer les changements des API.

  1. Dans le portail Azure, accédez à votre ressource de cluster et sélectionnez Diagnostiquer et résoudre les problèmes.

  2. Sélectionnez Créer, mettre à niveau, supprimer et mettre à l’échelle>Dépréciations des API Kubernetes.

    Capture d'écran du Portail Azure montrant la section Dépréciations de l'API Kubernetes sélectionnée.

  3. Attendez 12 heures à partir de la dernière utilisation constatée des API dépréciées. Vérifiez le verbe dans l’utilisation de l’API déconseillée pour savoir s’il s’agit d’un espion. S’il s’agit d’un mécanisme de suivi des modifications (« watch »), vous pouvez attendre que l’utilisation tombe à zéro. (Vous pouvez également vérifier l’utilisation d’API passée en activant Container Insights et en explorant les journaux d’audit kube.)

  4. Réessayez la mise à niveau de votre cluster.

Contourner une validation pour ignorer les modifications de l’API

Remarque

Cette méthode vous oblige à utiliser Azure CLI version 2.57 ou ultérieure. Si l’extension CLI de préversion est installée, vous devez effectuer une mise à jour vers la version 3.0.0b10 ou ultérieure. Cette méthode n’est pas recommandée, car les API dépréciées dans la version de Kubernetes ciblée risquent de ne pas fonctionner à long terme. Nous vous recommandons de les supprimer dès que possible une fois la mise à niveau terminée.

  1. Contournez la validation pour ignorer les changements cassants d’API et appelez une mise à niveau. Spécifiez l’indicateur enable-force-upgrade et configurez la propriété upgrade-override-until pour définir la fin de la fenêtre pendant laquelle la validation est contournée. Si aucune valeur n’est définie, la valeur par défaut de la fenêtre est de trois jours à partir de l’heure actuelle. La date et l’heure que vous spécifiez doivent se situer dans le futur.

    az aks upgrade --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME --kubernetes-version $KUBERNETES_VERSION --enable-force-upgrade --upgrade-override-until 2023-10-01T13:00:00Z
    

    Notes

    Z est l’indicateur de zone pour le décalage UTC/GMT zéro, également appelé heure « Zulu ». Cet exemple montre comment définir la fin de la fenêtre sur 13:00:00 GMT. Pour plus d’informations, consultez Représentations de date et d’heure combinées.

Étapes suivantes

Cet article vous a présenté comment arrêter automatiquement les mises à niveau du cluster AKS sur des changements cassants d’API. Si vous souhaitez obtenir plus d’informations sur les options de mise à niveau des clusters AKS, voir Options de mise à niveau des clusters Azure Kubernetes Service (AKS).