Partage via


Mettre à niveau un cluster Kubernetes à l’aide du moteur AKS sur Azure Stack Hub

Le moteur AKS vous permet de mettre à niveau le cluster Kubernetes qui a été déployé à l’origine à l’aide de l’outil sur Azure Stack Hub. Vous pouvez gérer les clusters à l’aide du moteur AKS. Vos tâches de maintenance sont similaires à celles de tout système IaaS. Vous devez connaître la disponibilité des nouvelles mises à jour et utiliser le moteur AKS pour les appliquer.

Mettre à niveau un cluster

La commande de mise à niveau met à jour la version de Kubernetes et l’image du système d’exploitation de base. Chaque fois que vous exécutez la commande de mise à niveau, pour chaque nœud du cluster, le moteur AKS crée une machine virtuelle à l’aide de l’image de base AKS associée à la version du moteur aks utilisée.

Pour les versions 0.73.0 et ultérieures du moteur AKS, vous pouvez utiliser la aks-engine upgrade commande pour conserver la devise de chaque nœud maître et agent dans votre cluster.

Pour les versions 0.75.3 et ultérieures du moteur AKS, vous pouvez utiliser la aks-engine-azurestack upgrade commande pour conserver la devise de chaque nœud maître et agent dans votre cluster.

Microsoft ne gère pas votre cluster. Cela étant, Microsoft fournit l’outil et l’image de machine virtuelle que vous pouvez utiliser pour gérer votre cluster.

Pour un cluster déployé, les mises à niveau couvrent les points suivants :

  • Kubernetes
  • Fournisseur Kubernetes Azure Stack Hub
  • Système d’exploitation de base

Lors de la mise à niveau d’un cluster de production, tenez compte des points suivants :

  • Utilisez-vous la spécification de cluster (apimodel.json) et le groupe de ressources adaptés au cluster cible ?
  • Utilisez-vous un ordinateur fiable pour l’ordinateur client pour exécuter le moteur AKS et à partir duquel vous effectuez des opérations de mise à niveau ?
  • Veillez à disposer d’un cluster de sauvegarde et qu’il est opérationnel.
  • Si possible, exécutez la commande à partir d’une machine virtuelle au sein de l’environnement Azure Stack Hub pour réduire les tronçons réseau et les échecs de connectivité potentiels.
  • Vérifiez que votre abonnement dispose de suffisamment d’espace pour l’ensemble du processus. De nouvelles machines virtuelles sont allouées pendant le processus.
  • Aucune mise à jour système ni tâche planifiée ne sont prévues.
  • Configurez une mise à niveau intermédiaire sur un cluster configuré exactement comme un cluster de production et testez-y la mise à niveau avant de l’appliquer à votre cluster de production.

Procédure de mise à niveau vers une version plus récente de Kubernetes

Remarque

L’image de base AKS est également mise à niveau si vous utilisez une version plus récente du moteur aks et que l’image est disponible sur la Place de marché.

Les instructions suivantes utilisent les étapes minimales pour effectuer la mise à niveau. Si vous souhaitez plus de détails, consultez l’article Mise à niveau des clusters Kubernetes.

  1. Vous devez d’abord déterminer les versions que vous pouvez cibler pour la mise à niveau. Ces versions dépendent de celle dont vous disposez actuellement. Utilisez alors la valeur de version adéquate pour effectuer la mise à niveau. Vous pouvez lister les versions Kubernetes prises en charge par votre moteur AKS en exécutant la commande suivante :

    Remarque

    Pour AKSe version 0.75.3 et versions ultérieures, la commande permettant d’obtenir les versions du moteur AKS est aks-engine-azurestack get-versions.

    aks-engine get-versions --azure-env AzureStackCloud
    

    Pour obtenir un mappage complet des versions du moteur AKS, de l’image de base AKS et de Kubernetes, consultez Versions de moteur AKS prises en charge.

  2. Collectez les informations nécessaires à l’exécution de la commande upgrade. La upgrade commande utilise les paramètres suivants :

    Paramètre Exemple Description
    azure-env AzureStackCloud Pour indiquer au moteur AKS que votre plateforme cible est Azure Stack Hub, utilisez AzureStackCloud.
    location locaux Nom de la région de votre Azure Stack Hub. Pour le kit de développement Azure Stack (ASDK), la région est définie sur local.
    resource-group kube-rg Entrez le nom d’un nouveau groupe de ressources ou sélectionnez un groupe de ressources existant. Le nom de la ressource doit être alphanumérique et en minuscules.
    subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Entrez votre ID d’abonnement. Pour plus d’informations, consultez S’abonner à une offre.
    api-model ./kubernetes-azurestack.json Chemin du fichier de configuration du cluster ou modèle d’API.
    client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Entrez le GUID du principal du service. ID de client identifié comme ID d’application lorsque votre administrateur Azure Stack Hub a créé le principal du service.
    client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Entrez le secret du principal du service. Il s’agit de la clé secrète client que vous définissez lors de la création de votre service.
    identity-system adfs facultatif. Spécifiez votre solution de gestion des identités si vous utilisez Active Directory Federated Services (AD FS).
  3. Une fois vos valeurs en place, exécutez la commande suivante :

    Remarque

    Pour AKSe version 0.75.3 et ultérieure, la commande permettant de mettre à niveau le moteur AKS est aks-engine-azurestack upgrade.

    aks-engine upgrade \
    --azure-env AzureStackCloud \
    --location <for an ASDK is local> \
    --resource-group kube-rg \
    --subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --api-model kube-rg/apimodel.json \
    --upgrade-version 1.18.15 \
    --client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --identity-system adfs # required if using AD FS
    
  4. Si, pour une raison quelconque, l’opération de mise à niveau rencontre un échec, vous pouvez réexécuter la upgrade commande après avoir résolu le problème. Le moteur AKS reprend l’opération où il a échoué la fois précédente.

Procédure de mise à niveau de l’image du système d’exploitation uniquement

  1. Examinez la table supported-kubernetes-versions afin de déterminer si vous disposez de la version aks-engine et de l'image de base AKS que vous envisagez pour votre mise à niveau. Si vous êtes sur AKS Engine version 0.73.0 ou ci-dessous, pour afficher la version d’aks-engine run : aks-engine version. Si vous êtes sur AKS Engine version 0.75.3 ou ultérieure, pour afficher la version d’aks-engine run : aks-engine-azurestack version.
  2. Mettez à niveau votre moteur AKS en conséquence et, sur la machine où vous avez installé aks-engine, exécutez : ./get-akse.sh --version vx.xx.x en remplaçant x.xx.x par votre version ciblée.
  3. Demandez à votre opérateur Azure Stack Hub d’ajouter la version de l’image de base AKS dont vous avez besoin dans la Place de marché Azure Stack Hub que vous envisagez d’utiliser.
  4. Exécutez la commande aks-engine upgrade en utilisant la même version de Kubernetes qu'actuellement, mais ajoutez --force. Vous pouvez consulter un exemple dans Forcer une mise à niveau.

Étapes de mise à jour du cluster vers la version du système d’exploitation Ubuntu 20.04

Avec le moteur AKS version 0.75.3 et versions ultérieures, vous pouvez mettre à niveau vos machines virtuelles de cluster d’Ubuntu 18.04 à 20.04. Effectuez les étapes suivantes :

  1. Recherchez et modifiez le fichier api-model.json qui a été généré lors du déploiement. Il doit s’agir du même fichier utilisé pour toute opération de mise à niveau ou de mise à l’échelle avec aks-engine. Dans AKS Engine version 0.75.3 et versions ultérieures, utilisez aks-engine-azurestack.
  2. Recherchez les sections pour masterProfile et agentPoolProfiles. Dans ces sections, remplacez la valeur de distro par aks-ubuntu-20.04.
  3. Enregistrez le fichier api-model.json et utilisez le fichier api-model.json dans votre commande aks-engin upgrade comme vous le feriez dans les Étapes de mise à niveau vers une version plus récente de Kubernetes

Étapes de mise à niveau du cluster si vous utilisez des volumes de stockage avec AKS Engine v0.70.0 et versions ultérieures

Le fournisseur de cloud pour le projet Azure (également appelé cloud-controller-managerfournisseur cloud out-of-tree ou fournisseur de cloud externe) implémente l’interface du fournisseur de cloud Kubernetes pour les clouds Azure. L’implémentation hors arborescence est le remplacement de l’implémentation dans l’arborescence déconseillée.

Sur Azure Stack Hub, à partir de Kubernetes v1.21, les clusters basés sur le moteur AKS utilisent cloud-controller-managerexclusivement . Par conséquent, pour déployer un cluster Kubernetes v1.21+, il est nécessaire de définir orchestratorProfile.kubernetesConfig.useCloudControllerManager true sur le modèle d’API (exemple). Le processus de mise à niveau du moteur AKS met automatiquement à jour l’indicateur useCloudControllerManager .

Remarque

Considérations relatives à la mise à niveau : le processus de mise à niveau d’un cluster Kubernetes de v1.20 (ou version antérieure) vers la version 1.21 (ou ultérieure) entraîne un temps d’arrêt aux charges de travail qui reposent sur le provisionneur de volume dans l’arborescence kubernetes.io/azure-disk . Avant de procéder à la mise à niveau vers Kubernetes v1.21+, il est vivement recommandé d’effectuer une sauvegarde complète des données d’application et de valider dans un environnement de préproduction que les ressources de stockage de cluster (PV et PVC) peuvent être migrées vers un nouveau provisionneur de volumes. Découvrez comment migrer vers le pilote CSI de disque Azure ici.

Provisionneurs de volumes

L’approvisionnement en volume dans l’arborescence est uniquement compatible avec le fournisseur cloud dans l’arborescence. Par conséquent, un cluster v1.21+ doit inclure un pilote CSI (Container Storage Interface) si les charges de travail utilisateur s’appuient sur le stockage persistant. Voici quelques solutions disponibles sur Azure Stack Hub.

Le moteur AKS n’active aucun pilote CSI par défaut sur Azure Stack Hub. Pour les charges de travail qui nécessitent un pilote CSI, il est possible d’activer explicitement le azuredisk-csi-driver module complémentaire (clusters Linux uniquement) ou Helm d’installer le azuredisk-csi-driver graphique (clusters Linux et/ou Windows).

Migrer le stockage persistant vers le pilote CSI de disque Azure

Le processus de mise à niveau d’un cluster basé sur le moteur AKS de v1.20 (ou version antérieure) vers la version 1.21 (ou ultérieure) entraîne un temps d’arrêt aux charges de travail qui reposent sur le kubernetes.io/azure-disk provisionneur de volume dans l’arborescence, car ce provisionneur ne fait pas partie du fournisseur de cloud pour Azure.

Si les données conservées dans les disques Azure sous-jacents doivent être conservées, les étapes supplémentaires suivantes sont nécessaires une fois le processus de mise à niveau du cluster terminé :

  1. Installer le pilote CSI de disque Azure
  2. Supprimer les classes de stockage dans l’arborescence déconseillées
  3. Recréer les volumes et revendications persistants

1. Installer manuellement le pilote CSI de disque Azure

Le script suivant utilise Helm pour installer le pilote CSI de disque Azure :

DRIVER_VERSION=v1.10.0
helm repo add azuredisk-csi-driver https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/charts
helm install azuredisk-csi-driver azuredisk-csi-driver/azuredisk-csi-driver \
  --namespace kube-system \
  --set cloud=AzureStackCloud \
  --set controller.runOnMaster=true \
  --version ${DRIVER_VERSION}

2. Remplacer les classes de stockage

Cette kube-addon-manager opération crée automatiquement les classes de stockage de pilotes CSI de disque Azure (disk.csi.azure.com) une fois que les classes de stockage dans l’arborescence (kubernetes.io/azure-disk) sont supprimées manuellement :

IN_TREE_SC="default managed-premium managed-standard"

# Delete deprecated "kubernetes.io/azure-disk" storage classes
kubectl delete storageclasses ${IN_TREE_SC}

# Wait for addon manager to create the "disk.csi.azure.com" storage class resources
kubectl get --watch storageclasses

3. Recréer des volumes persistants

Une fois le pilote CSI de disque Azure installé et les classes de stockage remplacées, l’étape suivante consiste à recréer les volumes persistants (PV) et les revendications de volumes persistants (PVC) à l’aide du pilote CSI Azure Disk (ou d’une solution CSI alternative).

Il s’agit d’un processus en plusieurs étapes qui peut être différent selon la façon dont ces ressources ont été déployées initialement. Les étapes générales sont les suivantes :

  • Supprimez le déploiement ou l’ensemble avec état qui référence les paires PV + PVC à migrer (définition de ressource de sauvegarde si nécessaire).
  • Vérifiez que la propriété des persistentVolumeReclaimPolicy VV est définie sur la valeur Retain (exemple).
  • Supprimez les paires PV + PVC à migrer (définitions de ressources de sauvegarde si nécessaire).
  • Pour migrer, mettez à jour la définition de ressource des VV en supprimant l’objet azureDisk et en ajoutant un csi objet avec référence à l’azureDisk d’origine (exemple).
  • Recréez, dans l’ordre suivant, la ressource/s PV, la ressource PVC (si nécessaire) et enfin le déploiement ou l’ensemble avec état.

Le script de migration suivant est fourni en tant que modèle.

Après avoir exécuté le script de migration, si le pod est bloqué avec l’erreur « Impossible d’attacher ou de monter des volumes », vérifiez que le pilote CSI de disque Azure a été installé et que les classes de stockage ont été recréées.

Forcer une mise à niveau

Dans certaines circonstances, vous pouvez avoir besoin de forcer une mise à niveau de votre cluster. Par exemple, le premier jour, vous déployez un cluster dans un environnement déconnecté à l’aide de la dernière version de Kubernetes. Le lendemain, Ubuntu publie un correctif pour traiter une vulnérabilité pour laquelle Microsoft génère une nouvelle image de base AKS. Vous pouvez appliquer la nouvelle image en forçant une mise à niveau à l’aide de la même version de Kubernetes que celle que vous avez déjà déployée.

Remarque

Pour AKSe version 0.75.3 et ultérieure, la commande permettant de mettre à niveau le moteur AKS est aks-engine-azurestack upgrade.

aks-engine upgrade \
--azure-env AzureStackCloud   
--location <for an ASDK is local> \
--resource-group kube-rg \
--subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
--api-model kube-rg/apimodel.json \
--upgrade-version 1.18.15 \
--client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
--client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
--force

Pour obtenir des instructions, consultez Forcer la mise à niveau.

Étapes suivantes