Definire strategie di aggiornamento riutilizzabili con Azure Kubernetes Fleet Manager

Si applica a: ✔️ Fleet Manager ✔️ Fleet Manager con cluster hub

Gli amministratori possono controllare la sequenza di aggiornamenti ai cluster gestiti da Fleet definendo una serie di fasi e gruppi. Possono configurare quando le approvazioni e le pause devono essere eseguite all'interno di tali fasi e gruppi. L'intera configurazione può essere salvata come strategia di aggiornamento che può essere gestita indipendentemente dalle esecuzioni degli aggiornamenti o dagli aggiornamenti automatici, consentendo di riutilizzare le strategie in base alle esigenze.

Questo articolo illustra come definire strategie di aggiornamento usando gruppi e fasi.

Diagramma che mostra una strategia di aggiornamento di esempio contenente due fasi di aggiornamento. Ogni fase di aggiornamento contiene due gruppi di aggiornamento. Ogni gruppo di aggiornamento contiene due cluster membri.

Prerequisiti

  • Leggere la panoramica concettuale degli aggiornamenti di Fleet, che fornisce una spiegazione delle esecuzioni degli aggiornamenti, delle fasi, dei gruppi e delle strategie a cui si fa riferimento in questa guida.

  • È necessario disporre di una risorsa flotta con uno o più cluster membri. In caso contrario, seguire l’avvio rapido per creare una risorsa Fleet e unire i cluster di Servizio Azure Kubernetes (AKS) come membri.

  • Impostare le seguenti variabili di ambiente:

    export GROUP=<resource-group>
    export FLEET=<fleet-name>
    export CLUSTERID=<aks-cluster-resource-id>
    export STRATEGY=<strategy-name>
    
  • Se si seguono le istruzioni interfaccia della riga di comando di Azure in questo articolo, installare la versione più recente del interfaccia della riga di comando di Azure. Per eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure.

  • È necessaria anche l'estensione fleet interfaccia della riga di comando di Azure. Per installarlo, eseguire il comando seguente:

    az extension add --name fleet
    

    Eseguire il comando per eseguire l'aggiornamento az extension update alla versione più recente dell'estensione rilasciata:

    az extension update --name fleet
    

Selezionare i cluster per la strategia

Esistono due modi per selezionare i cluster inclusi in ogni fase e gruppo della strategia di aggiornamento per controllare la sequenza di aggiornamento:

  • Etichette dei membri (scelta consigliata): assegnare etichette a ogni membro della flotta e usare memberSelector per selezionare i membri in base a tali etichette. Ogni membro può avere più etichette.
  • Aggiornare i gruppi: assegnare un gruppo di aggiornamento a ogni membro della flotta, quindi definire i gruppi nella strategia che corrispondono a tali nomi di gruppo. Ogni membro può appartenere a un solo gruppo.

Creare una strategia di aggiornamento usando selettori di membri (anteprima)

Usare le etichette dei membri per selezionare i cluster nelle strategie di aggiornamento. Offrono maggiore flessibilità. Per informazioni concettuali, vedere Raggruppare i cluster usando le etichette dei membri.

Importante

Le funzionalità di anteprima di Azure Kubernetes Fleet Manager sono disponibili in modalità self-service e richiedono l'adesione dell'utente. Le anteprime vengono fornite "così come sono" e "come disponibili" e sono escluse dai contratti di servizio e dalla garanzia limitata. Le versioni di anteprima di Azure Kubernetes Fleet Manager sono parzialmente coperte dal supporto tecnico secondo il principio del massimo impegno. Di conseguenza, queste funzionalità non sono destinate all'uso in produzione.

Applicare etichette sui cluster membri

Applicare etichette all'aggiunta di un cluster membro alla flotta

Usare il az fleet member create comando per applicare etichette ai membri della flotta. L'esempio seguente applica due etichette al cluster membro: env=staging e tier=frontend:

az fleet member create \
    --resource-group $GROUP \
    --fleet-name $FLEET \
    --name member1 \
    --member-cluster-id $CLUSTERID \
    --labels "env=staging tier=frontend"

Applicare etichette a un membro della flotta esistente

Usare il az fleet member update comando per applicare etichette ai membri della flotta.

az fleet member update \
 --resource-group $GROUP \
 --fleet-name $FLEET \
 --name member1 \
 --labels "env=staging tier=frontend"

Creare una strategia di aggiornamento

Una strategia di aggiornamento è costituita da una o più fasi, in cui una fase può contenere uno o più gruppi di aggiornamento.

Nota

Un'esperienza del portale di Azure sarà disponibile prima della disponibilità generale di questa funzionalità.

  1. Creare un file JSON per definire le fasi e i gruppi per l'esecuzione dell'aggiornamento. Le fasi vengono eseguite in sequenza nell'ordine in cui vengono visualizzate nel file JSON. I gruppi vengono eseguiti in parallelo in ogni fase. Il file di esempio seguente (example-labels-strategy.json) definisce una strategia con due fasi usando memberSelector per selezionare i cluster in base alle etichette e include impostazioni facoltative maxConcurrency :

    • La fase staging utilizza un memberSelector a livello di fase per selezionare tutti i cluster con l'etichetta env=staging e creare un gruppo implicito.
    • La fase production utilizza un memberSelector a livello di fase per prefiltrare tutti i cluster con l'etichetta env=production, quindi definisce due gruppi, ciascuno dotato del proprio memberSelector per selezionare i cluster in base all'etichetta tier.

    Quando memberSelector è impostato su un gruppo, il name campo del gruppo viene usato solo come identificatore di visualizzazione per la reportistica dello stato e la registrazione dei log e non viene più usato per la selezione dei membri della flotta basata sui gruppi di aggiornamento.

    {
        "stages": [
            {
                "name": "staging",
                "memberSelector": { "byLabel": "env=staging" },
                "maxConcurrency": "1",
                "afterStageWaitInSeconds": 600
            },
            {
                "name": "production",
                "memberSelector": { "byLabel": "env=production" },
                "maxConcurrency": "4",
                "groups": [
                    {
                        "name": "frontend",
                        "memberSelector": { "byLabel": "tier=frontend" },
                        "maxConcurrency": "3"
                    },
                    {
                        "name": "backend",
                        "memberSelector": { "byLabel": "tier=backend" },
                        "maxConcurrency": "3"
                    }
                ]
            }
        ]
    }
    

Nota

Il maxConcurrency campo è facoltativo e controlla il numero di cluster che possono eseguire l'aggiornamento simultaneo a livello di fase o di gruppo. Usare un valore più grande per aggiornare i cluster più velocemente all'interno della flotta o un valore inferiore per un'implementazione più controllata che limita il raggio di esplosione in caso di problemi.

Quando una fase utilizza memberSelector senza gruppi (come staging), tutti i membri corrispondenti formano un unico gruppo implicito e la maxConcurrency fase controlla direttamente la concorrenza. Quando i gruppi sono definiti (ad esempio production), il livello maxConcurrency di fase funge da limite complessivo in tutti i gruppi.

In questo esempio, la staging fase imposta maxConcurrency su "1", in modo che i cluster di staging si aggiornino uno alla volta. La fase production consente fino a "4" cluster contemporaneamente, mentre i gruppi frontend e backend sono ciascuno limitati a "3".

I valori possono essere un numero intero fisso (ad esempio, "3") o una percentuale (ad esempio, "50%"). Se omesso, il sistema applica i valori predefiniti. Per informazioni dettagliate su come questi valori vengono risolti e sui relativi limiti superiori, vedere Concorrenza massima (anteprima).

  1. Creare una nuova strategia di aggiornamento usando il az fleet updatestrategy create comando con il --stages flag impostato sul nome del file JSON.

    az fleet updatestrategy create \
     --resource-group $GROUP \
     --fleet-name $FLEET \
     --name $STRATEGY \
     --stages example-labels-strategy.json
    

Creare una strategia di aggiornamento usando i gruppi di aggiornamento

È possibile selezionare i cluster nelle strategie di aggiornamento assegnandoli a un singolo gruppo di aggiornamento. Definire una strategia di aggiornamento che assegna questi gruppi di aggiornamento alle fasi. All'interno di una fase di aggiornamento, gli aggiornamenti vengono applicati a ogni gruppo di aggiornamento in parallelo. All'interno di un gruppo di aggiornamento, i cluster membri vengono aggiornati in sequenza.

Nota

Un membro della flotta può far parte solo di un gruppo di aggiornamento, ma un gruppo di aggiornamento può avere più membri della flotta assegnati. Un gruppo di aggiornamento non è un tipo di risorsa separato. I gruppi di aggiornamento sono semplicemente stringhe che rappresentano riferimenti ai membri della flotta. Pertanto, se tutti i membri della flotta con riferimenti a un gruppo di aggiornamento comune vengono eliminati, tale gruppo di aggiornamento specifico smette di esistere.

Assegnare cluster a gruppi di aggiornamento

Assegnarlo al gruppo quando si aggiunge il cluster membro alla flotta

  1. Nel portale di Azure, vai alla risorsa Azure Kubernetes Fleet Manager.

  2. Nel menu del servizio, in Impostazioni, selezionare Cluster membri>Aggiungi.

    Screenshot della pagina del portale di Azure per Gestione flotta Kubernetes di Azure per l'aggiunta di cluster membri.

  3. Selezionare il cluster da aggiungere e quindi selezionare Avanti: Rivedi e aggiungi.

  4. Immettere il nome del gruppo di aggiornamento a cui si vuole assegnare il cluster e quindi selezionare Aggiungi.

    Screenshot della pagina del portale di Azure per il passaggio di revisione e aggiunta dei cluster membri in Azure Kubernetes Fleet Manager.

Assegnare un cluster membro a un gruppo di aggiornamento quando si aggiunge il cluster membro alla flotta usando il comando az fleet member create con il parametro --update-group impostato sul nome del gruppo di aggiornamento.

az fleet member create \
    --resource-group $GROUP \
    --fleet-name $FLEET \
    --name member1 \
    --member-cluster-id $CLUSTERID \
    --update-group group-1a

Assegnare un membro della flotta esistente a un gruppo di aggiornamento

  1. Nel portale di Azure, vai alla risorsa Azure Kubernetes Fleet Manager.

  2. Nel menu del servizio, in Impostazioni, selezionare Cluster membri.

  3. Selezionare i cluster da assegnare a un gruppo di aggiornamento e quindi selezionare Assegna gruppo di aggiornamento

    Screenshot della pagina del portale di Azure per l'assegnazione di cluster membri esistenti a un gruppo.

  4. Immettere il nome del gruppo di aggiornamento a cui si vuole assegnare il cluster e quindi selezionare Assegna.

    Screenshot della pagina del portale di Azure per i cluster membri che mostra il modulo per l'aggiornamento del gruppo di un cluster membro.

Assegna un membro esistente della flotta a un gruppo di aggiornamento usando il comando az fleet member update con il flag --update-group assegnato al nome del gruppo di aggiornamento.

az fleet member update \
 --resource-group $GROUP \
 --fleet-name $FLEET \
 --name member1 \
 --update-group group-1

Creare una strategia di aggiornamento

Una strategia di aggiornamento è costituita da una o più fasi, in cui una fase può contenere uno o più gruppi di aggiornamento.

  1. Nel portale di Azure, vai alla risorsa Azure Kubernetes Fleet Manager.

  2. Dal menu del servizio, in Impostazioni, selezionare Strategie di aggiornamento> e quindi Crea.

  3. Immettere un nome per la strategia.

  4. La prima volta che si visualizza la pagina, viene visualizzato un diagramma di spiegazione della strategia di aggiornamento che consente di visualizzare il funzionamento delle strategie.

    Screenshot del portale di Azure che mostra la creazione della strategia di aggiornamento.

  5. Selezionare Crea fase e immettere:

    • Nome della fase - nomina la fase - deve essere univoco tra tutti i nomi delle fasi nella strategia.
    • (Facoltativo) Approvazioni delle fasi: selezionare questa opzione se si desidera attendere un'approvazione prima che inizi questa fase o dopo che viene completata. Per altre informazioni, vedere Aggiungere approvazioni per aggiornare gruppi e fasi.
    • (Facoltativo) Pausa dopo la fase : selezionare questa opzione se si vuole definire una pausa prima di passare alla fase successiva.
    • (Facoltativo) Sospendere la durata : selezionare una durata predefinita oppure immettere un valore personalizzato in secondi.

    Screenshot del portale di Azure che mostra la creazione della fase di strategia di aggiornamento di Azure Kubernetes Fleet Manager.

  6. Assegnare uno o più gruppi di aggiornamento alla fase e quindi selezionare Crea.

    Nota

    Il numero massimo di gruppi di aggiornamento in ogni fase dell’aggiornamento è 50.

    Screenshot del portale di Azure che mostra la creazione della fase di strategia di aggiornamento di Azure Kubernetes Fleet Manager, selezionando i gruppi di aggiornamento da includere.

Per questo scenario vengono create fasi e gruppi in modo che corrispondano ai dettagli usati per il processo del portale di Azure.

  1. Creare un file JSON per definire le fasi e i gruppi per l'esecuzione dell'aggiornamento. Le fasi vengono eseguite in sequenza nell'ordine in cui vengono visualizzate nel file JSON. I gruppi vengono eseguiti in parallelo all'interno di ogni fase, quindi l'ordinamento non è importante. Il file di esempio seguente (example-stages.json) definisce una strategia con due fasi e include le impostazioni facoltative maxConcurrency e maxAllowedFailures:

    {
        "stages": [
            {
                "name": "stage-1",
                "maxConcurrency": "7",
                "maxAllowedFailures": "2",
                "groups": [
                    {
                        "name": "group-1",
                        "maxConcurrency": "3",
                        "maxAllowedFailures": "1"
                    },
                    {
                        "name": "group-2",
                        "maxConcurrency": "50%",
                        "maxAllowedFailures": "25%"
                    }
                ],
                "afterStageWaitInSeconds": 300
            },
            {
                "name": "stage-2",
                "maxConcurrency": "100%",
                "maxAllowedFailures": "0",
                "groups": [
                    {
                        "name": "group-3",
                        "maxConcurrency": "2",
                        "maxAllowedFailures": "0"
                    }
                ]
            }
        ]
    }
    

    maxConcurrency

    Il maxConcurrency campo è facoltativo e controlla il numero di cluster che possono eseguire l'aggiornamento simultaneo a livello di fase o di gruppo. Usare un valore più grande per aggiornare i cluster più velocemente all'interno della flotta o un valore inferiore per un'implementazione più controllata che limita il raggio di esplosione in caso di problemi.

    In questo esempio, stage-1 imposta maxConcurrency su "7", il che consente fino a "7" cluster in questa fase di eseguire l'aggiornamento contemporaneamente. All'interno di stage-1, group-1 limita la concorrenza a "3" cluster, il che significa che fino a "3" elementi in questo gruppo possono eseguire l'aggiornamento simultaneamente. group-2 consente l'aggiornamento "50%" simultaneo dei cluster, ad esempio se il gruppo contiene 4 cluster, fino a 2 può eseguire l'aggiornamento contemporaneamente.

    I valori possono essere un numero intero fisso (ad esempio, "3") o una percentuale (ad esempio, "100%"). Se omesso, il sistema applica i valori predefiniti. Per informazioni dettagliate su come questi valori vengono risolti e sui relativi limiti superiori, vedere Concorrenza massima (anteprima).

    maxAllowedFailures

    Il campo maxAllowedFailures è facoltativo e determina quanti errori di aggiornamento dei cluster membri sono tollerati prima che il gruppo o la fase vengano contrassegnati come non riusciti. Per impostazione predefinita (quando non è impostato o "0"), un singolo errore arresta l'intera esecuzione dell'aggiornamento.

    Questa impostazione valuta solo il numero di errori. Non applica un tasso minimo di successo. Un gruppo o una fase può quindi terminare Completed anche se alcuni o tutti i membri hanno avuto esito negativo, purché la soglia di errore non sia stata superata quando Fleet ha preso le decisioni di pianificazione.

    In questo esempio, stage-1 imposta maxAllowedFailures su "2", tollerando fino a due guasti dei membri nell'intera fase. All'interno di stage-1, group-1 tollera il guasto di "1" e group-2 tollera il guasto di "25%" dei suoi membri (ad esempio, se il gruppo contiene 4 cluster, viene tollerato un massimo di 1 guasto). stage-2 imposta maxAllowedFailures su "0", il che significa che qualsiasi errore arresta immediatamente l'esecuzione ed è spesso utile per le fasi di produzione.

    Per la maggior parte delle implementazioni, preferisce valori basati su percentuale perché sono più scalabili tra diverse dimensioni di gruppo. Evitare di impostare il valore sul numero totale di membri, a meno che non si desideri intenzionalmente un comportamento di fatto di "mai fallire" per quel segmento.

    I valori possono essere un numero intero fisso (ad esempio, "3") o una percentuale (ad esempio, "25%"). Per informazioni dettagliate sulla risoluzione di questi valori, vedere Numero massimo di errori consentiti (anteprima).

  2. Creare una nuova strategia di aggiornamento usando il az fleet updatestrategy create comando con il --stages flag impostato sul nome del file JSON.

    az fleet updatestrategy create \
     --resource-group $GROUP \
     --fleet-name $FLEET \
     --name $STRATEGY \
     --stages example-stages.json
    

Passaggi successivi

È possibile usare una strategia di aggiornamento come parte di un'esecuzione di aggiornamento manuale o di un profilo di aggiornamento automatico. Vedere: