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

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à.

Il servizio Azure Kubernetes arresta ora automaticamente le operazioni di aggiornamento costituite da una modifica della versione secondaria con API deprecate e invia un messaggio di errore per avvisare l'utente del problema.

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'uso delle API deprecate (scelta consigliata) o ignorare la convalida per ignorare le modifiche dell'API.

  1. Nel portale di Azure passare alla pagina di panoramica del cluster e selezionare Diagnostica e risoluzione dei problemi.

  2. Passare alla categoria Crea, Aggiorna, Elimina e Ridimensiona e selezionare deprecazioni delle API Kubernetes.

    A screenshot of the Azure portal showing the 'Selected Kubernetes API deprecations' section.

  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.

  4. Ripetere l'aggiornamento del cluster.

È anche possibile controllare l'utilizzo delle API precedenti abilitando Informazioni dettagliate sui contenitori ed esplorando i log di controllo kube. Controllare il verbo nell'utilizzo deprecato dell'API per capire se si tratta di un caso d'uso dell'orologio.

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.

  • 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 myAKSCluster --resource-group myResourceGroup --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.

  • Dopo aver completato il comando precedente, è possibile ritentare l'operazione di aggiornamento.

    az aks upgrade --name myAKSCluster --resource-group myResourceGroup --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.