Condividi tramite


Arrestare automaticamente gli aggiornamenti del cluster del servizio Azure Kubernetes nelle modifiche che causano un'interruzione dell'API

Questo articolo spiega come arrestare automaticamente gli aggiornamenti del cluster del servizio Azure Kubernetes nelle modifiche che causano un'interruzione dell'API.

Panoramica

Per rimanere all'interno di una versione di Kubernetes supportata, è necessario aggiornare il cluster almeno una volta all'anno e prepararsi a tutte le possibili interruzioni. Queste interruzioni includono quelle causate da modifiche che causano interruzioni dell'API, deprecazione e dipendenze, ad esempio Helm e L'interfaccia di archiviazione contenitori (CSI). Può essere difficile prevedere queste interruzioni ed eseguire la migrazione di carichi di lavoro critici senza subire tempi di inattività.

È possibile configurare il cluster del servizio Azure Kubernetes per arrestare automaticamente le operazioni di aggiornamento costituite da una modifica della versione secondaria con API deprecate e segnalare il problema. Questa funzionalità consente di evitare interruzioni impreviste e pertanto di risolvere le API deprecate prima di procedere con l'aggiornamento.

Operazioni preliminari

Prima di iniziare, verificare di aver soddisfatto i prerequisiti seguenti:

  • L'operazione di aggiornamento è una modifica della versione secondaria di Kubernetes per il piano di controllo del cluster.
  • La versione di Kubernetes a cui si sta eseguendo l'aggiornamento è 1.26 o successiva.
  • L'ultimo utilizzo delle API deprecate per la versione di destinazione a cui si esegue l'aggiornamento deve avvenire entro 12 ore prima dell'operazione di aggiornamento. Il servizio Azure Kubernetes registra l'utilizzo orario, pertanto qualsiasi utilizzo delle API deprecate entro un'ora non è garantito che venga visualizzato nel rilevamento.

Attenuare le operazioni di aggiornamento arrestate

Se si soddisfano i prerequisiti, tentare un aggiornamento e ricevere un messaggio di errore simile al seguente messaggio di errore:

Bad Request({
  "code": "ValidationError",
  "message": "Control Plane upgrade is blocked due to recent usage of a Kubernetes API deprecated in the specified version. Please refer to https://kubernetes.io/docs/reference/using-api/deprecation-guide to migrate the usage. To bypass this error, set enable-force-upgrade in upgradeSettings.overrideSettings. Bypassing this error without migrating usage will result in the deprecated Kubernetes API calls failing. Usage details: 1 error occurred:\n\t* usage has been detected on API flowcontrol.apiserver.k8s.io.prioritylevelconfigurations.v1beta1, and was recently seen at: 2023-03-23 20:57:18 +0000 UTC, which will be removed in 1.26\n\n",
  "subcode": "UpgradeBlockedOnDeprecatedAPIUsage"
})

Sono disponibili due opzioni per attenuare il problema: è possibile rimuovere l'utilizzo delle API deprecate (scelta consigliata) o ignorare la convalida per ignorare le modifiche all'API.

  1. Nel portale di Azure passare alla risorsa cluster e selezionare Diagnostica e risoluzione dei problemi.

  2. Selezionare Crea, aggiorna, elimina e ridimensiona>Deprecazioni API Kubernetes.

    Screenshot del portale di Azure che mostra la sezione

  3. Attendere 12 ore dal momento in cui è stato rilevato l'ultimo utilizzo deprecato dell'API. Controllare il verbo nell'utilizzo deprecato dell'API per sapere se si tratta di un orologio. Se si tratta di un watch, è possibile attendere l'azzeramento del valore di utilizzo. È anche possibile controllare l'utilizzo delle API precedenti abilitando Informazioni dettagliate sui contenitori e analizzando i log di audit di Kube.

  4. Ripetere l'aggiornamento del cluster.

Ignorare la convalida per ignorare le modifiche dell'API

Nota

Questo metodo richiede l'uso dell'interfaccia della riga di comando di Azure versione 2.53 o successiva. Se è installata l'estensione dell'interfaccia della riga di comando di aks-preview, è necessario eseguire l'aggiornamento alla versione 0.5.154 o versione successiva. Questo metodo non è consigliato, perché le API deprecate nella versione di Kubernetes di destinazione potrebbero non funzionare a lungo termine. È consigliabile rimuoverle il prima possibile al termine dell'aggiornamento.

  1. Ignorare la convalida per ignorare le modifiche di rilievo dell'API usando il comando az aks update. Specificare il flag enable-force-upgrade e impostare la proprietà upgrade-override-until per definire la fine della finestra durante la quale la convalida viene ignorata. Se non viene impostato alcun valore, per impostazione predefinita la finestra viene impostata su tre giorni dall'ora corrente. La data e l'ora specificate devono essere future.

    az aks update --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME --enable-force-upgrade --upgrade-override-until 2023-10-01T13:00:00Z
    

    Nota

    Z è l'operatore di progettazione della zona per l'offset UTC/GMT zero, noto anche come ora "Zulu". In questo esempio la fine della finestra viene impostata su 13:00:00 GMT. Per altre informazioni, vedere Rappresentazioni di data e ora combinate.

  2. Ripetere l'aggiornamento del cluster usando il comando az aks upgrade.

    az aks upgrade --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME --kubernetes-version $KUBERNETES_VERSION
    

Passaggi successivi

Questo articolo ha illustrato come arrestare automaticamente gli aggiornamenti del cluster del servizio Azure Kubernetes nelle modifiche che causano un'interruzione dell'API. Per altre informazioni sulle opzioni di aggiornamento per i cluster del servizio Azure Kubernetes, vedere Opzioni di aggiornamento per i cluster del servizio Azure Kubernetes.