Uppgradera ett Kubernetes-kluster med AKS-motorn på Azure Stack Hub

Med AKS-motorn kan du uppgradera Kubernetes-klustret som ursprungligen distribuerades med hjälp av verktyget på Azure Stack Hub. Du kan underhålla klustren med hjälp av AKS-motorn. Dina underhållsaktiviteter liknar alla IaaS-system. Du bör vara medveten om tillgängligheten för nya uppdateringar och använda AKS-motorn för att tillämpa dem.

Uppgradera ett kluster

Uppgraderingskommandot uppdaterar Kubernetes-versionen och bas-OS-avbildningen. Varje gång du kör uppgraderingskommandot skapar AKS-motorn för varje nod i klustret en ny virtuell dator med hjälp av den AKS-basavbildning som är associerad med den version av aks-motorn som används.

För AKS Engine-versionerna 0.73.0 och senare kan du använda aks-engine upgrade kommandot för att underhålla valutan för varje huvud- och agentnod i klustret.

För AKS Engine-versionerna 0.75.3 och senare kan du använda aks-engine-azurestack upgrade kommandot för att underhålla valutan för varje huvud- och agentnod i klustret.

Microsoft hanterar inte klustret. Men Microsoft tillhandahåller verktyget och vm-avbildningen som du kan använda för att hantera klustret.

För ett distribuerat kluster omfattar uppgraderingarna:

  • Kubernetes
  • Azure Stack Hub Kubernetes-provider
  • Base OS

Tänk på följande när du uppgraderar ett produktionskluster:

  • Använder du rätt klusterspecifikation (apimodel.json) och resursgrupp för målklustret?
  • Använder du en tillförlitlig dator för klientdatorn för att köra AKS-motorn och från vilken du utför uppgraderingsåtgärder?
  • Kontrollera att du har ett säkerhetskopieringskluster och att det fungerar.
  • Om möjligt kör du kommandot från en virtuell dator i Azure Stack Hub-miljön för att minska nätverkshoppen och potentiella anslutningsfel.
  • Kontrollera att din prenumeration har tillräckligt med utrymme för hela processen. Processen allokerar nya virtuella datorer under processen.
  • Inga systemuppdateringar eller schemalagda aktiviteter planeras.
  • Konfigurera en stegvis uppgradering på ett kluster som är konfigurerat exakt som produktionsklustret och testa uppgraderingen där innan du gör det i ditt produktionskluster

Steg för att uppgradera till en nyare Kubernetes-version

Anteckning

AKS-basavbildningen uppgraderas också om du använder en nyare version av aks-motorn och avbildningen är tillgänglig på Marketplace.

Följande instruktioner använder de minsta stegen för att utföra uppgraderingen. Mer information finns i artikeln Uppgradera Kubernetes-kluster.

  1. Du måste först fastställa vilka versioner du kan rikta in dig på för uppgraderingen. Den här versionen beror på vilken version du har för närvarande och använder sedan det versionsvärdet för att utföra uppgraderingen. Kubernetes-versionerna som stöds av AKS-motorn kan visas genom att köra följande kommando:

    Anteckning

    För AKSe version 0.75.3 och senare är aks-engine-azurestack get-versionskommandot för att hämta versionerna av AKS-motorn .

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

    En fullständig mappning av AKS-motorn, AKS-basavbildningen och Kubernetes-versioner finns i AKS-motorversioner som stöds.

  2. Samla in den information som du behöver för att köra upgrade kommandot. Kommandot upgrade använder följande parametrar:

    Parameter Exempel Description
    azure-env AzureStackCloud För att ange för AKS-motorn att målplattformen är Azure Stack Hub använder du AzureStackCloud.
    location lokalt Regionnamnet för din Azure Stack Hub. För ASDK är regionen inställd på local.
    resource-group kube-rg Ange namnet på en ny resursgrupp eller välj en befintlig resursgrupp. Resursnamnet måste vara alfanumeriskt och gemener.
    prenumerations-ID xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Ange ditt prenumerations-ID. Mer information finns i Prenumerera på ett erbjudande
    api-modell ./kubernetes-azurestack.json Sökväg till klusterkonfigurationsfilen eller API-modellen.
    klient-ID xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Ange guid för tjänstens huvudnamn. Klient-ID:t identifierades som program-ID när Azure Stack Hub-administratören skapade tjänstens huvudnamn.
    klienthemlighet xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Ange hemligheten för tjänstens huvudnamn. Det här är den klienthemlighet som du konfigurerade när du skapade tjänsten.
    identitetssystem Adfs Valfritt. Ange din identitetshanteringslösning om du använder Active Directory Federated Services (AD FS).
  3. Kör följande kommando med dina värden på plats:

    Anteckning

    För AKSe version 0.75.3 och senare är aks-engine-azurestack upgradekommandot för att uppgradera AKS-motorn .

    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. Om uppgraderingen av någon anledning stöter på ett fel kan du köra upgrade kommandot igen när du har åtgärdat problemet. AKS-motorn återupptar åtgärden där den misslyckades föregående gång.

Steg för att endast uppgradera OS-avbildningen

  1. Granska tabellen -kubernetes-versions som stöds och kontrollera om du har den version av aks-engine och AKS-basavbildning som du planerar för uppgraderingen. Om du använder AKS Engine version 0.73.0 eller senare kan du visa versionen av aks-engine run: aks-engine version. Om du använder AKS Engine version 0.75.3 eller senare kan du visa versionen av aks-engine run: aks-engine-azurestack version.
  2. Uppgradera AKS-motorn på den dator där du har installerat aks-engine run: ./get-akse.sh --version vx.xx.x ersätt x.xx.x med din målversion.
  3. Be din Azure Stack Hub-operatör att lägga till den version av AKS-basavbildningen som du behöver på Azure Stack Hub Marketplace som du planerar att använda.
  4. aks-engine upgrade Kör kommandot med samma version av Kubernetes som du redan använder, men lägg till --force. Du kan se ett exempel i Tvinga en uppgradering.

Steg för att uppdatera kluster till os-version Ubuntu 20.04

Med AKS-motorn version 0.75.3 och senare kan du uppgradera dina virtuella klusterdatorer från Ubuntu 18.04 till 20.04. Följ de här stegen:

  1. Leta upp och redigera api-model.json filen som genererades under distributionen. Detta bör vara samma fil som används för alla uppgraderings- eller skalningsåtgärder med aks-engine. I AKS Engine version 0.75.3 och senare använder du aks-engine-azurestack.
  2. Leta upp avsnitten för masterProfile och agentPoolProfiles, i dessa avsnitt ändra värdet distro för till aks-ubuntu-20.04.
  3. api-model.json Spara filen och använd api-model.json filen i kommandot aks-engin upgrade som i Stegen för att uppgradera till en nyare Kubernetes-version

Steg för att uppgradera kluster om du använder lagringsvolymer med AKS Engine v0.70.0 och senare

Molnprovidern för Azure-projektet (även kallat cloud-controller-managerout-of-tree-molnleverantör eller extern molnleverantör) implementerar Kubernetes-molnprovidergränssnittet för Azure-moln. Out-of-tree-implementeringen är ersättningen för den inaktuella implementeringen i träd.

På Azure Stack Hub, från Kubernetes v1.21, använder cloud-controller-managerAKS Engine-baserade kluster exklusivt . För att distribuera ett Kubernetes v1.21+-kluster måste det därför anges orchestratorProfile.kubernetesConfig.useCloudControllerManager till true i API-modellen (exempel). AKS-motorns uppgraderingsprocess uppdaterar useCloudControllerManager automatiskt flaggan.

Anteckning

Uppgraderingsöverväganden: Processen att uppgradera ett Kubernetes-kluster från v1.20 (eller lägre version) till v1.21 (eller senare version) orsakar stilleståndstid för arbetsbelastningar som förlitar sig på kubernetes.io/azure-disk volymetableren i träd. Innan du uppgraderar till Kubernetes v1.21+ rekommenderar vi starkt att du utför en fullständig säkerhetskopiering av programdata och verifierar i en förproduktionsmiljö att klusterlagringsresurserna (PV och PVC) kan migreras till en ny volymetabler. Lär dig hur du migrerar till Azure Disk CSI-drivrutinen här.

Volymetabler

Volymetableren i träd är endast kompatibel med molnleverantören i träd. Därför måste ett v1.21+-kluster innehålla en CSI-drivrutin (Container Storage Interface) om användararbetsbelastningar förlitar sig på beständig lagring. Några lösningar som är tillgängliga på Azure Stack Hub visas här.

AKS-motorn aktiverar inte någon CSI-drivrutin som standard på Azure Stack Hub. För arbetsbelastningar som kräver en CSI-drivrutin är det möjligt att antingen uttryckligen azuredisk-csi-driver aktivera tillägget (endast Linux-kluster) eller använda Helm för att installera azuredisk-csi-driver diagrammet (Linux- och/eller Windows-kluster).

Migrera beständig lagring till Azure Disk CSI-drivrutinen

Processen att uppgradera ett AKS Engine-baserat kluster från v1.20 (eller lägre version) till v1.21 (eller senare version) orsakar stilleståndstid för arbetsbelastningar som förlitar sig på kubernetes.io/azure-disk volymetableren i träd eftersom den här etableringen inte är en del av molnleverantören för Azure.

Om data som sparas på de underliggande Azure-diskarna ska bevaras krävs följande extra steg när klusteruppgraderingsprocessen har slutförts:

  1. Installera Azure Disk CSI-drivrutinen
  2. Ta bort de inaktuella lagringsklasserna i träd
  3. Återskapa beständiga volymer och anspråk

1. Installera Azure Disk CSI-drivrutinen manuellt

Följande skript använder Helm för att installera Azure Disk CSI-drivrutinen:

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. Ersätt lagringsklasser

kube-addon-manager Skapar automatiskt Azure Disk CSI-drivrutinslagringsklasserna (disk.csi.azure.com) när lagringsklasserna i träd (kubernetes.io/azure-disk) tas bort manuellt:

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. Återskapa beständiga volymer

När Azure Disk CSI-drivrutinen har installerats och lagringsklasserna har ersatts är nästa steg att återskapa beständiga volymer (PV) och beständiga volymanspråk (PVC) med hjälp av Azure Disk CSI-drivrutinen (eller en alternativ CSI-lösning).

Det här är en process i flera steg som kan skilja sig beroende på hur dessa resurser ursprungligen distribuerades. De viktigaste stegen är:

  • Ta bort den distribution eller tillståndskänsliga uppsättning som refererar till PV + PVC-paren som ska migreras (definition av säkerhetskopieringsresurs om det behövs).
  • Kontrollera att PV:ernas persistentVolumeReclaimPolicy egenskap är inställd på värde Retain (exempel).
  • Ta bort PV + PVC-paren som ska migreras (definitioner för säkerhetskopieringsresurser om det behövs).
  • Om du vill migrera uppdaterar du PV:ernas resursdefinition genom att ta bort azureDisk objektet och lägga till ett csi objekt med referens till den ursprungliga AzureDisk (exempel).
  • Återskapa I följande ordning PV-resursen/s, PVC-resursen/-resurserna (om det behövs) och slutligen distributionen eller tillståndskänsliga datamängden.

Följande migreringsskript tillhandahålls som en mall.

När du har kört migreringsskriptet kontrollerar du att Azure Disk CSI-drivrutinen installerades och lagringsklasserna återskapades om podden har fastnat med felet "Det går inte att ansluta eller montera volymer".

Tvinga fram en uppgradering

Det kan finnas villkor där du kanske vill framtvinga en uppgradering av klustret. Dag ett distribuerar du till exempel ett kluster i en frånkopplad miljö med den senaste Kubernetes-versionen. Följande dag släpper Ubuntu en korrigering av en säkerhetsrisk som Microsoft genererar en ny AKS-basavbildning för. Du kan använda den nya avbildningen genom att tvinga fram en uppgradering med samma Kubernetes-version som du redan har distribuerat.

Anteckning

För AKSe version 0.75.3 och senare är aks-engine-azurestack upgradekommandot för att uppgradera AKS-motorn .

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

Anvisningar finns i Tvinga uppgradering.

Nästa steg