Condividi tramite


Aggiornare un cluster Kubernetes utilizzando AKS engine su Azure Stack Hub

Il motore AKS consente di aggiornare il cluster Kubernetes inizialmente distribuito usando lo strumento su Azure Stack Hub. È possibile mantenere i cluster utilizzando il motore AKS. 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 di Kubernetes di Azure Stack Hub
  • Sistema operativo di base

Quando si aggiorna un cluster di produzione, prendere in considerazione:

  • Stai usando le specifiche corrette del cluster (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 in uso e poi usa quel valore di 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 AKS è aks-engine-azurestack get-versions.

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

    Per una mappatura completa del motore AKS, dell'immagine di base di AKS e delle versioni di Kubernetes, vedere Supported AKS Engine Versions.

  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 ad AKS engine che la piattaforma di destinazione è Azure Stack Hub, usare AzureStackCloud.
    posizione locale Nome dell'area per l'hub di Azure Stack. Per ASDK, l'area è impostata su local.
    gruppo di risorse 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.
    ID di sottoscrizione xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Immettere l'ID sottoscrizione. Per altre informazioni, vedere Sottoscrivere un'offerta
    modello API ./kubernetes-azurestack.json Percorso del file di configurazione del cluster o modello API.
    ID cliente xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Immettere il GUID dell'entità servizio. L'ID cliente identificato come ID applicazione quando l'amministratore di Azure Stack Hub ha creato il principale del servizio.
    segreto del client xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Immettere il segreto dell'entità del servizio. Questo è il segreto client configurato durante la creazione del servizio.
    sistema di identità 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 AKS è 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 AKS riprenderà l'operazione nel punto in cui è fallita la volta precedente.

Passaggi per aggiornare solo l'immagine del sistema operativo

  1. Esaminare la tabella supported-kubernetes-versions e determinare se si dispone della versione di AKS Engine e dell'immagine di base AKS che si intende aggiornare. Se si usa AKS Engine versione 0.73.0 o inferiore, per visualizzare la versione di aks-engine eseguire: aks-engine version. Se si utilizza la versione 0.75.3 o successiva di AKS Engine, per visualizzare la versione di aks-engine, eseguire: aks-engine-azurestack version.
  2. Aggiorna di conseguenza il motore AKS nel computer in cui hai installato aks-engine: ./get-akse.sh --version vx.xx.x sostituendo x.xx.x con la versione di destinazione.
  3. Chiedi all'operatore di Azure Stack Hub di aggiungere la versione dell'immagine di base AKS necessaria nel Marketplace di Azure Stack Hub che intendi 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 la versione 0.75.3 e successive di AKS è 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. Nella versione 0.75.3 e versioni successive di AKS Engine, 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

Passaggi per aggiornare il cluster se stai usando volumi di archiviazione con il motore AKS v0.70.0 e versioni più recenti

Il progetto Cloud Provider per Azure (noto anche come cloud-controller-manager, cloud provider out-of-tree o cloud provider esterno) implementa l'interfaccia del cloud provider di Kubernetes per i cloud di Azure. L'implementazione fuori dall'albero è la sostituzione per l'implementazione deprecata nell'albero.

Nell'hub di Azure Stack, a partire da Kubernetes v1.21, i cluster basati su AKS Engine useranno esclusivamente cloud-controller-manager. Di conseguenza, per installare un cluster Kubernetes v1.21+, è necessario impostare orchestratorProfile.kubernetesConfig.useCloudControllerManager su true nel modello API (ad esempio). Il processo di aggiornamento di AKS Engine aggiornerà automaticamente il flag useCloudControllerManager.

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+, è altamente consigliato eseguire un backup completo dei dati dell'applicazione e verificare in un ambiente di pre-produzione che le risorse di archiviazione del cluster (PV e PVC) possano essere migrate a un nuovo gestore di volumi. Informazioni su come eseguire la migrazione al driver CSI del disco di Azure qui.

Provisioner dei volumi

Il volume provisioner nativo è compatibile solo con il provider cloud nativo. 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.

AKS Engine non abiliterà alcun driver CSI per impostazione predefinita su Azure Stack Hub. Per carichi di lavoro che richiedono un driver CSI, è possibile abilitare esplicitamente l'addon (solo cluster Linux) oppure usare Helm per installare il chart (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 su AKS Engine dalla versione 1.20 (o versione precedente) alla versione 1.21 (o superiore) causerà un'interruzione dei carichi di lavoro che si basano sul provisioner dei volumi integrato kubernetes.io/azure-disk perché questo provisioner non fa parte del Cloud Provider per Microsoft 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 richieste 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 sia impostata su valore Retain (esempio).
  • Eliminare le coppie PV + PVC per la migrazione (eseguire il backup delle definizioni delle risorse, se necessario).
  • Per eseguire la migrazione, aggiornare la definizione della risorsa dei PVs rimuovendo l'oggetto azureDisk e aggiungendo un oggetto csi con riferimento all'originale AzureDisk (esempio).
  • Ricreare, nell'ordine seguente, le risorse PV, le risorse PVC (se necessario) e infine il deployment o lo statefulset.

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.

Forzare 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 AKS Base Image. È 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 AKS engine è 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