Condividi tramite


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 originariamente distribuito 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 versione 0.73.0 e successive, è possibile usare il aks-engine upgrade comando per mantenere la valuta di ogni nodo master e agente nel cluster.

Per le versioni del motore del servizio Azure Kubernetes 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, prendere in considerazione:

  • 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 nell'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. È necessario prima determinare le versioni di destinazione per l'aggiornamento. Questa versione dipende dalla versione attualmente disponibile e quindi da tale valore 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.
    location local 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. Questo è il 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 intende aggiornare. 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 dell'esecuzione del motore del servizio Azure Kubernetes: aks-engine-azurestack version.
  2. Aggiornare di conseguenza il motore del servizio Azure Kubernetes nel computer in cui è stato installato aks-engine: ./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 nella procedura 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 deprecata nell'albero.

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 dalla versione 1.20 (o versione precedente) alla versione 1.21 (o versione successiva) causerà tempi di inattività ai carichi di lavoro che si basano 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 di cui è possibile eseguire la migrazione delle risorse di archiviazione cluster (PV e PVC) a un nuovo provisioner del volume. Informazioni su come eseguire la migrazione al driver CSI del disco di Azure qui.

Provisioner dei volumi

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

Il motore del servizio Azure Kubernetes non abiliterà 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-drivercomponente aggiuntivo (cluster solo Linux) o usare Helm per installare il azuredisk-csi-driver grafico (cluster Linux e/o Windows).

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

Il processo di aggiornamento di un cluster basato sul motore del servizio Azure Kubernetes dalla versione 1.20 (o versione precedente) alla versione 1.21 (o versione successiva) causerà tempi di inattività ai carichi di lavoro basati sul provisioner del volume nell'albero kubernetes.io/azure-disk perché questo provisioner non fa parte del provider di servizi cloud per Azure.

Se i dati salvati in modo permanente nei dischi di Azure sottostanti devono essere mantenuti, al termine del processo di aggiornamento del cluster sono necessari i passaggi aggiuntivi seguenti:

  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

kube-addon-manager Creerà automaticamente le classi di archiviazione del driver CSI del disco di Azure (disk.csi.azure.com) dopo l'eliminazione manuale delle classi di archiviazione nell'albero (kubernetes.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 permanenti

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

Si tratta di un processo in più passaggi che può essere diverso a seconda della modalità di distribuzione iniziale di queste risorse. I passaggi generali sono:

  • Eliminare la distribuzione o il set con stato che fa riferimento alle coppie PV + PVC di cui eseguire la migrazione (se necessario, definizione della risorsa di backup).
  • Verificare che la proprietà dei persistentVolumeReclaimPolicy televisori sia impostata su value Retain (esempio).
  • Eliminare le coppie PV + PVC di cui eseguire la migrazione (se necessario).
  • Per eseguire la migrazione, aggiornare la definizione della risorsa dei televisori 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 il driver CSI del disco di Azure sia stato installato e che le classi di archiviazione siano state ricreate.

Forzatura di un aggiornamento

Potrebbero essere presenti condizioni in cui è possibile forzare un aggiornamento del cluster. Ad esempio, il 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 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 Forzare l'aggiornamento.

Passaggi successivi