Partager 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 être conscient de 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 d’aks-engine utilisée.

Pour les versions 0.73.0 et antérieures du moteur AKS, vous pouvez utiliser la aks-engine upgrade commande pour conserver la devise de chaque master et nœud d’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 gérer la devise de chaque master et nœud d’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 :

  • 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 une machine fiable pour l’ordinateur client afin d’exécuter le moteur AKS et à partir de laquelle 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 d’aks-engine 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 de 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 :

    Notes

    Pour AKSe version 0.75.3 et 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 du moteur AKS, de l’image de base AKS et des versions kubernetes, consultez Versions du 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 local 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 :

    Notes

    Pour AKSe version 0.75.3 et ultérieures, 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 utilisez le moteur AKS version 0.73.0 ou antérieure, pour afficher la version d’aks-engine, exécutez : aks-engine version. Si vous utilisez le moteur AKS version 0.75.3 ou ultérieure, pour afficher la version d’aks-engine, exécutez : 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 ultérieure, vous pouvez mettre à niveau vos machines virtuelles de cluster d’Ubuntu 18.04 vers 20.04. Procédez comme suit :

  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 les versions 0.75.3 et ultérieures du moteur AKS, 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 projet Fournisseur de cloud pour Azure (également appelé cloud-controller-manager, fournisseur de cloud hors arborescence ou fournisseur de cloud externe) implémente l’interface du fournisseur de cloud Kubernetes pour les clouds Azure. L’implémentation hors arborescence remplace l’implémentation dépréciée dans l’arborescence.

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 sur true dans le modèle d’API (exemple). Le processus de mise à niveau du moteur AKS met automatiquement à jour l’indicateur useCloudControllerManager .

Notes

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

Provisionneurs de volume

Le provisionneur de volume dans l’arborescence est uniquement compatible avec le fournisseur de 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 reposent sur un stockage persistant. Quelques solutions disponibles sur Azure Stack Hub sont répertoriées ici.

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-drivermodule complémentaire (clusters Linux uniquement) ou d’utiliser Helm pour 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 inférieure) vers la version 1.21 (ou ultérieure) entraîne un temps d’arrêt sur les charges de travail qui s’appuient sur le provisionneur de volumes dans l’arborescence kubernetes.io/azure-disk , 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 requises 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épréciées
  3. Recréer les volumes persistants et les revendications

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

crée kube-addon-manager automatiquement les classes de stockage du pilote CSI sur 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 de disque Azure (ou d’une autre solution CSI).

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

  • Supprimez le déploiement ou statefulset qui fait référence aux paires PV + PVC à migrer (définition de ressource de sauvegarde si nécessaire).
  • Vérifiez que la propriété des persistentVolumeReclaimPolicy PVs a 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 PVs en supprimant l’objet azureDisk et en ajoutant un csi objet en référence au Disque Azure d’origine (exemple).
  • Recréez, dans l’ordre suivant, la/les ressources PV, la/les ressources PVC (si nécessaire) et enfin le déploiement ou statefulset.

Le script de migration suivant est fourni sous forme de 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 qu’Azure Disk CSI Driver 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.

Notes

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