Freigeben über


Upgrade eines Kubernetes-Clusters mithilfe des AKS-Moduls auf Azure Stack Hub

Mit dem AKS-Modul können Sie den Kubernetes-Cluster aktualisieren, der ursprünglich mit dem Tool auf Azure Stack Hub bereitgestellt wurde. Sie können die Cluster mithilfe des AKS-Moduls verwalten. Die Verwaltungsaufgaben ähneln den IaaS-Systemen. Sie sollten sich der Verfügbarkeit neuer Updates bewusst sein und das AKS-Modul 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 für jeden Knoten des Clusters ausführen, erstellt das AKS-Modul einen neuen virtuellen Computer mithilfe des AKS-Basisimages, das der verwendeten Version des Aks-Moduls zugeordnet ist.

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

Für die AKS Engine-Versionen 0.75.3 und höher können Sie den aks-engine-azurestack upgrade Befehl verwenden, um die Währung jedes Master- und Agentknotens 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 decken Upgrades Folgendes ab:

  • 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 für den Clientcomputer zum Ausführen des AKS-Moduls 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 des Aks-Moduls verwenden und das Image auf dem Marketplace verfügbar ist.

In den folgenden Anweisungen werden die minimalen Schritte zum Ausführen des Upgrades verwendet. Wenn Sie weitere Details wünschen, lesen Sie den Artikel Upgrade kubernetes Clusters.

  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 des AKS-Moduls .

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

    Eine vollständige Zuordnung des AKS-Moduls, des AKS-Basisimages und der Kubernetes-Versionen finden Sie unter Unterstützte AKS-Modulversionen.

  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 Lokal 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 Aktualisieren des AKS-Moduls.

    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 aus irgendeinem Grund beim Upgradevorgang ein Fehler auftritt, können Sie den upgrade Befehl nach der Behebung des Problems erneut ausführen. Das AKS-Modul setzt den Vorgang fort, bei dem er das vorherige Mal fehlgeschlagen 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 sich auf AKS Engine Version 0.73.0 oder darunter befinden, können Sie die Version der Aks-Engine-Ausführung anzeigen: aks-engine version. Wenn Sie die Version 0.75.3 oder höher des AKS-Moduls verwenden, um die Version des Aks-Moduls anzuzeigen: 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 Betriebssystemversion Ubuntu 20.04

Mit der AKS-Modulversion 0.75.3 und höher können Sie Ihre Cluster-VMs von Ubuntu 18.04 auf 20.04 aktualisieren. Führen Sie folgende Schritte aus:

  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 der 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 Upgrade des Clusters, wenn Sie Speichervolumes mit dem AKS-Modul v0.70.0 und höher verwenden

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

Auf Azure Stack Hub ab Kubernetes v1.21 werden AKS Engine-basierte Cluster ausschließlich verwendet cloud-controller-manager. Um einen Kubernetes v1.21+-Cluster bereitzustellen, muss er daher im API-Modell (Beispiel) festgelegt werden orchestratorProfile.kubernetesConfig.useCloudControllerManager true. Der Upgradeprozess des AKS-Moduls aktualisiert automatisch das useCloudControllerManager Flag.

Hinweis

Upgradeüberlegungen: Das Upgrade eines Kubernetes-Clusters von v1.20 (oder niedrigerer Version) auf v1.21 (oder höher) führt zu Ausfallzeiten für Arbeitslasten, die auf die Bereitstellung von kubernetes.io/azure-disk Instrukturvolumes angewiesen sind. Vor dem Upgrade auf Kubernetes v1.21+ wird dringend empfohlen , eine vollständige Sicherung der Anwendungsdaten durchzuführen und in einer Vorproduktionsumgebung zu überprüfen, dass die Clusterspeicherressourcen (PV und PVC) zu einem neuen Volumenbereitstellungsmodul migriert werden können. Hier erfahren Sie, wie Sie zum Azure Disk CSI-Treiber migrieren.

Volumenbereitstellungen

Der In-Tree-Volumebereitstellunger ist nur mit dem Cloudanbieter in der Struktur kompatibel. Daher muss ein v1.21+-Cluster einen CSI-Treiber (Container Storage Interface) enthalten, wenn Benutzerworkloads auf beständigen Speicher angewiesen sind. Hier sind einige Lösungen aufgeführt, die im Azure Stack Hub verfügbar sind.

Das AKS-Modul aktiviert standardmäßig keinen CSI-Treiber auf Azure Stack Hub. Für Workloads, die einen CSI-Treiber erfordern, ist es möglich, das azuredisk-csi-driver Addon (nur Linux-Cluster) explizit zu aktivieren oder Helm das azuredisk-csi-driver Diagramm (Linux- und/oder Windows-Cluster) zu installieren.

Migrieren des beständigen Speichers zum Azure Disk CSI-Treiber

Das Upgrade eines AKS Engine-basierten Clusters von v1.20 (oder niedrigerer Version) auf v1.21 (oder höher) führt zu Ausfallzeiten für Arbeitslasten, die auf die kubernetes.io/azure-disk In-Tree-Volumebereitstellung angewiesen sind, da diese Bereitstellung nicht Teil des Cloudanbieters für Azure ist.

Wenn die in den zugrunde liegenden Azure-Datenträgern gespeicherten Daten beibehalten werden sollen, sind die folgenden zusätzlichen Schritte erforderlich, sobald der Clusterupgradevorgang abgeschlossen ist:

  1. Installieren des Azure Disk CSI-Treibers
  2. Entfernen der veralteten Speicherklassen in der Struktur
  3. Erneutes Erstellen der persistenten Volumes und Ansprüche

1. Manuelles Installieren des Azure Disk CSI-Treibers

Das folgende Skript verwendet Helm die Installation des Azure Disk CSI-Treibers:

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

Dadurch kube-addon-manager werden automatisch die Azure Disk CSI-Treiberspeicherklassen (disk.csi.azure.com) erstellt, 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. Erstellen sie persistente Volumes neu

Sobald der Azure Disk CSI-Treiber installiert und die Speicherklassen ersetzt wurden, besteht der nächste Schritt darin, die persistenten Volumes (PV) und persistenten Volumes (PVC) mithilfe des Azure Disk CSI-Treibers (oder alternative 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 allgemeinen Schritte sind:

  • Löschen Sie den Bereitstellungs- oder Zustandssatz, der auf die zu migrierenden PV + 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 + PVC-Paare (bei Bedarf Sicherungsressourcendefinitionen).
  • Aktualisieren Sie zum Migrieren die Ressourcendefinition der PVs, indem Sie das azureDisk Objekt entfernen und ein csi Objekt mit Verweis auf die ursprüngliche AzureDisk (Beispiel) hinzufügen.
  • Erstellen Sie in der folgenden Reihenfolge die PV-Ressource/S, DIE PVC-Ressource/s (falls erforderlich) und schließlich die Bereitstellung oder zustandsbehaftete Ressource neu.

Das folgende Migrationsskript wird als Vorlage bereitgestellt.

Wenn der Pod nach dem Ausführen des Migrationsskripts mit dem Fehler "Keine Volumes anfügen oder bereitstellen" hängen bleibt, stellen Sie sicher, dass azure Disk CSI-Treiber installiert und 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 Aktualisieren des AKS-Moduls.

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