Aggiornare un cluster Kubernetes usando il motore del servizio Azure Kubernetes nell'hub di Azure Stack

Il motore del servizio Azure Kubernetes consente di aggiornare il cluster Kubernetes distribuito in origine usando lo strumento nell'hub di Azure Stack. È possibile gestire i cluster usando il motore del servizio Azure Kubernetes. Le attività di manutenzione sono simili a qualsiasi sistema IaaS. È necessario tenere presente la disponibilità di nuovi aggiornamenti e usare il motore del servizio Azure Kubernetes per applicarli.

Aggiornare un cluster

Il comando di aggiornamento aggiorna la versione di Kubernetes e l'immagine del sistema operativo di base. Ogni volta che si esegue il comando di aggiornamento, per ogni nodo del cluster, il motore del servizio Azure Kubernetes crea una nuova macchina virtuale usando l'immagine di base del servizio Azure Kubernetes associata alla versione del motore del servizio Azure Kubernetes usata.

Per il motore del servizio Azure Kubernetes 0.73.0 e versioni successive, è possibile usare il aks-engine upgrade comando per mantenere la valuta di ogni nodo master e agente nel cluster.

Per il motore del servizio Azure Kubernetes versione 0.75.3 e successive, è possibile usare il aks-engine-azurestack upgrade comando per mantenere la valuta di ogni nodo master e agente nel cluster.

Microsoft non gestisce il cluster. Microsoft fornisce tuttavia lo strumento e l'immagine della macchina virtuale che è possibile usare per gestire il cluster.

Per un cluster distribuito, gli aggiornamenti coprono:

  • Kubernetes
  • Provider Kubernetes dell'hub di Azure Stack
  • Sistema operativo di base

Quando si aggiorna un cluster di produzione, tenere presente quanto segue:

  • Si usano le specifiche del cluster corrette (apimodel.json) e il gruppo di risorse per il cluster di destinazione?
  • Si sta usando un computer affidabile per il computer client per eseguire il motore del servizio Azure Kubernetes e da cui si eseguono operazioni di aggiornamento?
  • Assicurarsi di disporre di un cluster di backup e che sia operativo.
  • Se possibile, eseguire il comando da una macchina virtuale all'interno dell'ambiente dell'hub di Azure Stack per ridurre gli hop di rete e i potenziali errori di connettività.
  • Assicurarsi che la sottoscrizione disponga di spazio sufficiente per l'intero processo. Il processo alloca nuove macchine virtuali durante il processo.
  • Non sono pianificati aggiornamenti di sistema o attività pianificate.
  • Configurare un aggiornamento a fasi in un cluster configurato esattamente come cluster di produzione e testare l'aggiornamento prima di farlo nel cluster di produzione

Passaggi per eseguire l'aggiornamento a una versione più recente di Kubernetes

Nota

L'immagine di base del servizio Azure Kubernetes viene aggiornata anche se si usa una versione più recente del motore del servizio Azure Kubernetes e l'immagine è disponibile nel marketplace.

Le istruzioni seguenti usano i passaggi minimi per eseguire l'aggiornamento. Per altri dettagli, vedere l'articolo Aggiornamento dei cluster Kubernetes.

  1. È prima necessario determinare le versioni di destinazione per l'aggiornamento. Questa versione dipende dalla versione attualmente disponibile e quindi dal valore della versione per eseguire l'aggiornamento. Le versioni di Kubernetes supportate dal motore del servizio Azure Kubernetes possono essere elencate eseguendo il comando seguente:

    Nota

    Per AKSe versione 0.75.3 e successive, il comando per ottenere le versioni del motore del servizio Azure Kubernetes è aks-engine-azurestack get-versions.

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

    Per un mapping completo del motore del servizio Azure Kubernetes, dell'immagine di base del servizio Azure Kubernetes e delle versioni supportate del motore del servizio Azure Kubernetes.

  2. Raccogliere le informazioni necessarie per eseguire il upgrade comando. Il upgrade comando usa i parametri seguenti:

    Parametro Esempio Descrizione
    azure-env AzureStackCloud Per indicare al motore del servizio Azure Kubernetes che la piattaforma di destinazione è l'hub di Azure Stack, usare AzureStackCloud.
    posizione locali Nome dell'area per l'hub di Azure Stack. Per ASDK, l'area è impostata su local.
    resource-group kube-rg Immettere il nome di un nuovo gruppo di risorse o selezionare un gruppo di risorse esistente. Il nome della risorsa deve essere alfanumerico e minuscolo.
    subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Immettere l'ID sottoscrizione. Per altre informazioni, vedere Sottoscrivere un'offerta
    api-model ./kubernetes-azurestack.json Percorso del file di configurazione del cluster o modello API.
    client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Immettere il GUID dell'entità servizio. ID client identificato come ID applicazione quando l'amministratore dell'hub di Azure Stack ha creato l'entità servizio.
    client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Immettere il segreto dell'entità servizio. Si tratta del segreto client configurato durante la creazione del servizio.
    identity-system Adfs facoltativo. Specificare la soluzione di gestione delle identità se si usa Active Directory Federated Services (AD FS).
  3. Con i valori applicati, eseguire il comando seguente:

    Nota

    Per AKSe versione 0.75.3 e successive, il comando per aggiornare il motore del servizio Azure Kubernetes è 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. Se per qualsiasi motivo l'operazione di aggiornamento rileva un errore, è possibile rieseguire il upgrade comando dopo aver risolto il problema. Il motore del servizio Azure Kubernetes riprenderà l'operazione in cui non è riuscita l'ora precedente.

Passaggi per aggiornare solo l'immagine del sistema operativo

  1. Esaminare la tabella supported-kubernetes-versions e determinare se si dispone della versione del motore del servizio Azure Kubernetes e dell'immagine di base del servizio Azure Kubernetes che si prevede per l'aggiornamento. Se si usa il motore del servizio Azure Kubernetes versione 0.73.0 o successiva, per visualizzare la versione dell'esecuzione del motore del servizio Azure Kubernetes: . aks-engine version Se si usa il motore del servizio Azure Kubernetes versione 0.75.3 o successiva, per visualizzare la versione del motore servizio Azure Kubernetes eseguire: aks-engine-azurestack version.
  2. Aggiornare di conseguenza il motore del servizio Azure Kubernetes nel computer in cui è stato installato il motore del servizio Azure Kubernetes: ./get-akse.sh --version vx.xx.x sostituendo x.xx.x con la versione di destinazione.
  3. Chiedere all'operatore dell'hub di Azure Stack di aggiungere la versione dell'immagine di base del servizio Azure Kubernetes necessaria in Azure Stack Hub Marketplace che si prevede di usare.
  4. Eseguire il aks-engine upgrade comando usando la stessa versione di Kubernetes già in uso, ma aggiungere .--force È possibile visualizzare un esempio in Forzare un aggiornamento.

Procedura per aggiornare il cluster alla versione del sistema operativo Ubuntu 20.04

Con il motore del servizio Azure Kubernetes versione 0.75.3 e successive è possibile aggiornare le macchine virtuali del cluster da Ubuntu 18.04 a 20.04. Seguire questa procedura:

  1. Individuare e modificare il file generato durante la api-model.json distribuzione. Deve essere lo stesso file usato per qualsiasi operazione di aggiornamento o scalabilità con aks-engine. Nel motore del servizio Azure Kubernetes versione 0.75.3 e successive usare aks-engine-azurestack.
  2. Individuare le sezioni per masterProfile e agentPoolProfiles, all'interno di tali sezioni modificare il valore di distro in aks-ubuntu-20.04.
  3. Salvare il api-model.json file e usare il api-model.json file nel aks-engin upgrade comando come si farebbe nei passaggi per eseguire l'aggiornamento a una versione più recente di Kubernetes

Procedura per aggiornare il cluster se si usano volumi di archiviazione con il motore del servizio Azure Kubernetes v0.70.0 e versioni successive

Il provider di servizi cloud per Azure (noto anche come cloud-controller-managerprovider di servizi cloud out-of-tree o provider di servizi cloud esterni) implementa l'interfaccia del provider di servizi cloud Kubernetes per i cloud di Azure. L'implementazione out-of-tree è la sostituzione dell'implementazione in albero deprecata.

Nell'hub di Azure Stack, a partire da Kubernetes v1.21, i cluster basati sul motore del servizio Azure Kubernetes useranno cloud-controller-manageresclusivamente . Di conseguenza, per distribuire un cluster Kubernetes v1.21+, è necessario impostare su orchestratorProfile.kubernetesConfig.useCloudControllerManagertrue nel modello API (ad esempio). Il processo di aggiornamento del motore del servizio Azure Kubernetes aggiornerà automaticamente il useCloudControllerManager flag.

Nota

Considerazioni sull'aggiornamento: il processo di aggiornamento di un cluster Kubernetes da v1.20 (o versione inferiore) a v1.21 (o versione successiva) causerà tempi di inattività ai carichi di lavoro basati sul provisioner del volume nell'albero kubernetes.io/azure-disk . Prima di eseguire l'aggiornamento a Kubernetes v1.21+, è consigliabile eseguire un backup completo dei dati dell'applicazione e convalidare in un ambiente di pre-produzione che le risorse di archiviazione cluster (PV e PVC) possono essere migrate in un nuovo provisioner del volume. Informazioni su come eseguire la migrazione al driver CSI di Disco di Azure qui.

Provisioner del volume

Il provisioner del volume nell'albero è compatibile solo con il provider cloud ad albero. Pertanto, un cluster v1.21+ deve includere un driver CSI (Container Storage Interface) se i carichi di lavoro utente si basano sull'archiviazione persistente. Alcune soluzioni disponibili nell'hub di Azure Stack sono elencate qui.

Il motore del servizio Azure Kubernetes non abilita alcun driver CSI per impostazione predefinita nell'hub di Azure Stack. Per i carichi di lavoro che richiedono un driver CSI, è possibile abilitare in modo esplicito il azuredisk-csi-driveraddon (cluster solo Linux) o usare Helm per installare il azuredisk-csi-driver grafico (cluster Linux e/o Windows).

Eseguire la migrazione dell'archiviazione persistente al driver CSI del disco di Azure

Il processo di aggiornamento di un cluster basato sul motore del servizio Azure Kubernetes da v1.20 (o versione inferiore) alla versione v1.21 (o versione successiva) causerà tempi di inattività per i carichi di lavoro che kubernetes.io/azure-disk si basano sul provisioner del volume nell'albero perché questo provisioner non fa parte del provider di servizi cloud per Azure.

Se i dati persistenti nei dischi di Azure sottostanti devono essere conservati, è necessario eseguire i passaggi aggiuntivi seguenti dopo il completamento del processo di aggiornamento del cluster:

  1. Installare il driver CSI del disco di Azure
  2. Rimuovere le classi di archiviazione nell'albero deprecate
  3. Ricreare i volumi e le attestazioni persistenti

1. Installare manualmente il driver CSI del disco di Azure

Lo script seguente usa Helm per installare il driver CSI del disco di 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. Sostituire le classi di archiviazione

L'oggetto kube-addon-manager creerà automaticamente le classi di archiviazione driver CSI di Azure () una volta eliminate manualmente le classi di archiviazione nell'albero (disk.csi.azure.comkubernetes.io/azure-disk):

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. Ricreare volumi persistenti

Dopo aver installato il driver CSI del disco di Azure e le classi di archiviazione sostituite, il passaggio successivo consiste nel ricreare i volumi persistenti (PV) e le attestazioni di volumi persistenti (PVC) usando il driver CSI di Azure (o la soluzione CSI alternativa).

Si tratta di un processo in più passaggi che può essere diverso a seconda del modo in cui queste risorse sono state inizialmente distribuite. I passaggi fondamentali sono:

  • Eliminare la distribuzione o il set con stato che fa riferimento alle coppie PV + PVC per eseguire la migrazione (definizione della risorsa di backup se necessario).
  • Verificare che la proprietà dei persistentVolumeReclaimPolicy PVs sia impostata su valore Retain (esempio).
  • Eliminare le coppie PV + PVC per eseguire la migrazione (se necessario, le definizioni delle risorse di backup).
  • Per eseguire la migrazione, aggiornare la definizione di risorsa del PVs rimuovendo l'oggetto azureDisk e aggiungendo un csi oggetto con riferimento all'originale AzureDisk (esempio).
  • Ricreare, nell'ordine seguente, la risorsa PV/s, la risorsa PVC/s (se necessario) e infine la distribuzione o il set con stato.

Lo script di migrazione seguente viene fornito come modello.

Dopo aver eseguito lo script di migrazione, se il pod è bloccato con l'errore "Impossibile collegare o montare volumi", assicurarsi che i driver CSI del disco di Azure siano stati installati e le classi di archiviazione siano state ricreate.

Forzare un aggiornamento

Potrebbero verificarsi condizioni in cui è possibile forzare un aggiornamento del cluster. Ad esempio, al giorno 1 si distribuisce un cluster in un ambiente disconnesso usando la versione più recente di Kubernetes. Il giorno seguente Ubuntu rilascia una patch a una vulnerabilità per cui Microsoft genera una nuova immagine di base del servizio Azure Kubernetes. È possibile applicare la nuova immagine forzando un aggiornamento usando la stessa versione di Kubernetes già distribuita.

Nota

Per AKSe versione 0.75.3 e versioni successive, il comando per aggiornare il motore del servizio Azure Kubernetes è 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

Per istruzioni, vedere Forza aggiornamento.

Passaggi successivi