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.
È 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.
Raccogliere le informazioni necessarie per eseguire il
upgrade
comando. Ilupgrade
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). 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
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
- 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
. - 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. - 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.
- 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:
- 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à conaks-engine
. Nella versione 0.75.3 e versioni successive di AKS Engine, usareaks-engine-azurestack
. - Individuare le sezioni per
masterProfile
eagentPoolProfiles
, all'interno di tali sezioni modificare il valore didistro
inaks-ubuntu-20.04
. - Salvare il
api-model.json
file e usare ilapi-model.json
file nelaks-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:
- Installare il driver CSI del disco di Azure
- Rimuovere le classi di archiviazione nell'albero deprecate
- 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 valoreRetain
(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 oggettocsi
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
- Leggi del motore AKS sulla piattaforma Azure Stack Hub
- Scala un cluster Kubernetes su Azure Stack Hub utilizzando il motore AKS