Aktualisieren eines Kubernetes-Clusters mithilfe der AKS-Engine in Azure Stack Hub

Mit der AKS-Engine können Sie das Upgrade des Kubernetes-Clusters durchführen, der ursprünglich mit dem Tool in Azure Stack Hub bereitgestellt wurde. Sie können die Cluster mithilfe der AKS-Engine verwalten. Die Verwaltungsaufgaben ähneln den IaaS-Systemen. Sie sollten sich der Verfügbarkeit neuer Updates bewusst sein und die AKS-Engine verwenden, um sie anzuwenden.

Durchführen eines Clusterupgrades

Mit dem Upgradebefehl werden die Kubernetes-Version und das Betriebssystem-Basisimage aktualisiert. Jedes Mal, wenn Sie den Upgradebefehl ausführen, erstellt die AKS-Engine für jeden Knoten des Clusters eine neue VM mit dem AKS-Basisimage, das der verwendeten Version der aks-engine zugeordnet ist.

Für AKS-Engine-Versionen 0.73.0 und niedriger können Sie den aks-engine upgrade Befehl verwenden, um die Währung jedes master und Agentknotens in Ihrem Cluster beizubehalten.

Für AKS-Engine-Versionen 0.75.3 und höher können Sie den aks-engine-azurestack upgrade Befehl verwenden, um die Währung aller master und Agentknoten in Ihrem Cluster beizubehalten.

Microsoft verwaltet Ihren Cluster nicht. Microsoft stellt jedoch das Tool und das VM-Image bereit, mit denen Sie Ihren Cluster verwalten können.

Für einen bereitgestellten Cluster umfassen Upgrades Folgendes:

  • Kubernetes
  • Azure Stack Hub-Kubernetes-Anbieter
  • Basisbetriebssystem

Beachten Sie bei der Aktualisierung eines Produktionsclusters Folgendes:

  • Verwenden Sie die richtige Clusterspezifikation (apimodel.json) und Ressourcengruppe für den Zielcluster?
  • Verwenden Sie einen zuverlässigen Computer, auf dem der Clientcomputer die AKS-Engine ausführen kann und von dem aus Sie Upgradevorgänge ausführen?
  • Stellen Sie sicher, dass ein funktionsfähiger Sicherungscluster vorhanden ist.
  • Führen Sie den Befehl wenn möglich von einem virtuellen Computer in der Azure Stack Hub-Umgebung aus, um die Anzahl der Netzwerkhops und potenzielle Verbindungsfehler zu verringern.
  • Stellen Sie sicher, dass das Kontingent Ihres Abonnements ausreicht, um den gesamten Prozess auszuführen. Während des Prozesses werden neue virtuelle Computer zugeordnet.
  • Systemupdates oder geplante Tasks sind nicht vorgesehen.
  • Richten Sie ein gestaffeltes Upgrade auf einem Cluster ein, der genau wie der Produktionscluster konfiguriert ist, und testen Sie das Upgrade dort, bevor Sie es im Produktionscluster ausführen.

Schritte zum Durchführen eines Upgrades auf eine neuere Kubernetes-Version

Hinweis

Das AKS-Basisimage wird auch aktualisiert, wenn Sie eine neuere Version der aks-engine verwenden und das Image im Marketplace verfügbar ist.

In den folgenden Anweisungen werden die minimalen Schritte zum Ausführen des Upgrades verwendet. Weitere Informationen finden Sie im Artikel Upgraden von Kubernetes-Clustern.

  1. Sie müssen zunächst die Versionen bestimmen, die Sie für das Upgrade als Ziel festlegen können. Diese Version hängt von der Version ab, die Sie zurzeit verwenden, und verwenden Sie dann diesen Versionswert, um das Upgrade durchzuführen. Die von der AKS-Engine unterstützten Kubernetes-Versionen können durch Ausführen des folgenden Befehls aufgelistet werden:

    Hinweis

    Für AKSe-Version 0.75.3 und höher lautet aks-engine-azurestack get-versionsder Befehl zum Abrufen der Versionen der AKS-Engine .

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

    Eine vollständige Zuordnung von AKS-Engine, AKS-Basisimage und Kubernetes-Versionen finden Sie unter Unterstützte Versionen der AKS-Engine.

  2. Sammeln Sie die Informationen, die Sie zum Ausführen des upgrade-Befehls benötigen. Der upgrade Befehl verwendet die folgenden Parameter:

    Parameter Beispiel BESCHREIBUNG
    azure-env AzureStackCloud Um der AKS-Engine mitzuteilen, dass die Zielplattform Azure Stack Hub ist, verwenden Sie AzureStackCloud.
    location local Der Regionsname für Ihre Azure Stack Hub-Instanz. Für das ASDK ist local für die Region festgelegt.
    resource-group kube-rg Geben Sie den Namen einer neuen Ressourcengruppe ein, oder wählen Sie eine vorhandene Ressourcengruppe aus. Der Ressourcenname muss alphanumerisch und in Kleinbuchstaben angegeben sein.
    subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Geben Sie Ihre Abonnement-ID ein. Weitere Informationen finden Sie unter Abonnieren von Angeboten.
    api-model ./kubernetes-azurestack.json Pfad zur Clusterkonfigurationsdatei oder zum API-Modell.
    client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Geben Sie die Dienstprinzipal-GUID ein. Die als Anwendungs-ID identifizierte Client-ID, wenn Ihr Azure Stack Hub-Administrator den Dienstprinzipal erstellt hat.
    client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Geben Sie das Dienstprinzipalgeheimnis ein. Dies ist das Clientgeheimnis, das Sie beim Erstellen Ihres Diensts einrichten.
    identity-system adfs Optional. Geben Sie Ihre Identitätsverwaltungslösung an, wenn Sie Active Directory-Verbunddienste (AD FS) nutzen.
  3. Führen Sie mit Ihren Werten den folgenden Befehl aus:

    Hinweis

    Für AKSe-Version 0.75.3 und höher lautet aks-engine-azurestack upgradeder Befehl zum Upgrade der AKS-Engine .

    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. Wenn beim Upgradevorgang aus irgendeinem Grund ein Fehler auftritt, können Sie den upgrade Befehl erneut ausführen, nachdem das Problem behoben wurde. Die AKS-Engine setzt den Vorgang fort, bei dem beim vorherigen Mal ein Fehler aufgetreten ist.

Schritte zum alleinigen Upgrade des Betriebssystemimages

  1. Sehen Sie sich die Tabelle der unterstützten Kubernetes-Versionen an, und überprüfen Sie, ob Sie über die Version von aks-engine und des AKS-Basisimages verfügen, für die Sie das Upgrade durchführen möchten. Wenn Sie die AKS-Engine-Version 0.73.0 oder niedriger verwenden, führen Sie folgendes aus, um die Version der aks-engine anzuzeigen: aks-engine version. Wenn Sie version 0.75.3 oder höher der AKS-Engine verwenden, führen Sie zum Anzeigen der Version von aks-engine folgendes aus: aks-engine-azurestack version.
  2. Aktualisieren Sie die AKS-Engine entsprechend. Führen Sie auf dem Computer, auf dem Sie aks-engine installiert haben, Folgendes aus: ./get-akse.sh --version vx.xx.x. Ersetzen Sie dabei x.xx.x durch die Zielversion.
  3. Bitten Sie Ihren Azure Stack Hub-Operator, die erforderliche Version des AKS-Basisimages im Azure Stack-Marketplace hinzuzufügen, den Sie verwenden möchten.
  4. Führen Sie den Befehl aks-engine upgrade mit derselben Version von Kubernetes aus, die Sie bereits verwenden, fügen Sie jedoch --force hinzu. Ein Beispiel finden Sie unter Erzwingen eines Upgrades.

Schritte zum Aktualisieren des Clusters auf die Betriebssystemversion Ubuntu 20.04

Mit der AKS-Engine Version 0.75.3 und höher können Sie Ihre Cluster-VMs von Ubuntu 18.04 auf 20.04 aktualisieren. Folgen Sie diesen Schritten:

  1. Suchen und bearbeiten Sie die Datei api-model.json, die während der Bereitstellung generiert wurde. Dabei sollte es sich um dieselbe Datei handeln, die für jeden Upgrade- oder Skalierungsvorgang mit aks-engine verwendet wird. Verwenden Sie aks-engine-azurestackin AKS Engine Version 0.75.3 und höher .
  2. Suchen Sie nach den Abschnitten masterProfile und agentPoolProfiles. Ändern Sie in diesen Abschnitten den Wert von distro in aks-ubuntu-20.04.
  3. Speichern Sie die Datei api-model.json, und verwenden Sie die Datei api-model.json wie in Schritte zum Durchführen eines Upgrades auf eine neuere Kubernetes-Version im Befehl aks-engin upgrade.

Schritte zum Upgraden des Clusters bei Verwendung von Speichervolumes mit AKS Engine v0.70.0 und höher

Das Cloudanbieter für Azure-Projekt (auch bekannt als cloud-controller-manager, Out-of-Tree-Cloudanbieter oder externer Cloudanbieter) implementiert die Kubernetes-Cloudanbieterschnittstelle für Azure-Clouds. Die Out-of-Tree-Implementierung ist der Ersatz für die veraltete In-Tree-Implementierung.

Ab Kubernetes v1.21 verwenden cloud-controller-managerAKS-Engine-basierte Cluster in Azure Stack Hub ausschließlich . Daher muss zum Bereitstellen eines Kubernetes v1.21+-Clusters im API-Modell (Beispiel) auf true festgelegt orchestratorProfile.kubernetesConfig.useCloudControllerManager werden. Der Upgradeprozess der AKS-Engine aktualisiert das useCloudControllerManager Flag automatisch.

Hinweis

Überlegungen zum Upgraden: Das Upgrade eines Kubernetes-Clusters von v1.20 (oder einer niedrigeren Version) auf Version 1.21 (oder eine höhere Version) führt zu Ausfallzeiten für Workloads, die auf der kubernetes.io/azure-disk strukturinternen Volumebereitstellung angewiesen sind. Vor dem Upgrade auf Kubernetes v1.21 und höher wird dringend empfohlen , eine vollständige Sicherung der Anwendungsdaten durchzuführen und in einer Präproduktionsumgebung zu überprüfen, ob die Clusterspeicherressourcen (PV und PVC) zu einer neuen Volumebereitstellung migriert werden können. Hier erfahren Sie, wie Sie zum Azure Disk CSI-Treiber migrieren.

Volumebereitstellungen

Die Volumebereitstellung in der Struktur ist nur mit dem In-Tree-Cloudanbieter kompatibel. Daher muss ein Cluster der Version 1.21 und höher einen CSI-Treiber (Container Storage Interface) enthalten, wenn Benutzerworkloads persistenten Speicher verwenden. Hier sind einige Lösungen aufgeführt, die in Azure Stack Hub verfügbar sind.

Die AKS-Engine aktiviert standardmäßig keinen CSI-Treiber in Azure Stack Hub. Für Workloads, die einen CSI-Treiber erfordern, ist es möglich, das azuredisk-csi-driverAdd-On explizit zu aktivieren (nur Linux-Cluster) oder Helm zum Installieren des azuredisk-csi-driver Diagramms (Linux- und/oder Windows-Cluster).

Migrieren von persistentem Speicher zum Azure Disk CSI-Treiber

Das Upgrade eines AKS-Engine-basierten Clusters von v1.20 (oder einer niedrigeren Version) auf Version 1.21 (oder höher) führt zu Ausfallzeiten für Workloads, die auf der kubernetes.io/azure-disk Strukturvolumebereitstellung basieren, da diese Bereitstellung nicht Teil des Cloudanbieters für Azure ist.

Wenn die auf den zugrunde liegenden Azure-Datenträgern gespeicherten Daten beibehalten werden sollen, sind nach Abschluss des Clusterupgrades die folgenden zusätzlichen Schritte erforderlich:

  1. Installieren des Azure Disk CSI-Treibers
  2. Entfernen der veralteten In-Tree-Speicherklassen
  3. Neuerstellen der persistenten Volumes und Ansprüche

1. Manuelles Installieren des Azure Disk CSI-Treibers

Das folgende Skript verwendet Helm , um den Azure Disk CSI-Treiber zu installieren:

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. Ersetzen von Speicherklassen

Erstellt kube-addon-manager automatisch die Azure Disk CSI-Treiberspeicherklassen (disk.csi.azure.com), sobald die In-Tree-Speicherklassen (kubernetes.io/azure-disk) manuell gelöscht werden:

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. Persistente Volumes neu erstellen

Nachdem der Azure Disk CSI-Treiber installiert und die Speicherklassen ersetzt wurden, besteht der nächste Schritt darin, die Ansprüche für persistente Volumes (PV) und persistente Volumes (PVC) mithilfe des Azure Disk CSI-Treibers (oder einer alternativen CSI-Lösung) neu zu erstellen.

Dies ist ein mehrstufiger Prozess, der je nachdem, wie diese Ressourcen ursprünglich bereitgestellt wurden, unterschiedlich sein kann. Die Schritte auf oberer Ebene sind:

  • Löschen Sie die Bereitstellung oder den Zustandssatz, der auf die zu migrierenden PV- und PVC-Paare verweist (bei Bedarf Sicherungsressourcendefinition).
  • Stellen Sie sicher, dass die PVs-Eigenschaft persistentVolumeReclaimPolicy auf wert Retain festgelegt ist (Beispiel).
  • Löschen Sie die zu migrierenden PV- und PVC-Paare (ressourcendefinitionen bei Bedarf sichern).
  • Aktualisieren Sie zum Migrieren die Ressourcendefinition des PVs, indem Sie das azureDisk -Objekt entfernen und ein csi -Objekt mit Verweis auf die ursprüngliche AzureDisk hinzufügen (Beispiel).
  • Erstellen Sie in der folgenden Reihenfolge die PV-Ressource/s, die PVC-Ressource/s (falls erforderlich) und schließlich die Bereitstellung oder den Zustandssatz neu.

Das folgende Migrationsskript wird als Vorlage bereitgestellt.

Wenn der Pod nach dem Ausführen des Migrationsskripts mit dem Fehler "Volumes können nicht angefügt oder eingebunden werden" hängen bleibt, stellen Sie sicher, dass der Azure Disk CSI-Treiber installiert unddie Speicherklassen neu erstellt wurden.

Erzwingen eines Upgrades

Unter bestimmten Bedingungen möchten Sie möglicherweise ein Upgrade Ihres Clusters erzwingen. Beispielsweise stellen Sie am ersten Tag einen Cluster in einer nicht verbundenen Umgebung mithilfe der neuesten Kubernetes-Version bereit. Am folgenden Tag gibt Ubuntu einen Patch zu einem Sicherheitsrisiko heraus, für den Microsoft ein neues AKS-Basisimage generiert. Sie können das neue Image anwenden, indem Sie ein Upgrade mit der gleichen Kubernetes-Version erzwingen, die Sie bereits bereitgestellt haben.

Hinweis

Für AKSe-Version 0.75.3 und höher lautet aks-engine-azurestack upgradeder Befehl zum Upgrade der AKS-Engine .

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

Anweisungen dazu finden Sie unter Force upgrade (Upgrade erzwingen).

Nächste Schritte