Condividi tramite


Aggiornamento in sequenza di NGroups

Introduzione

Man mano che cambiano i requisiti, può essere necessario aggiornare i gruppi di NGroups e i relativi gruppi di contenitori (CG).

Per l'aggiornamento di un gruppo NGroups sono disponibili due modalità di aggiornamento: manuale (opzione predefinita) e in sequenza.

L'aggiornamento in sequenza (UR) prevede 2 opzioni: l'aggiornamento sul posto e l'aggiornamento con sostituzione. L'aggiornamento in sequenza con sostituzione è l'opzione predefinita.

Questo documento descrive in dettaglio l'aggiornamento in sequenza. L'aggiornamento manuale è illustrato nella documentazione di NGroups disponibile selezionando il collegamento.

Descrizione della funzionalità

Si consideri un esempio di base riferito all'aggiornamento di un riferimento al profilo di un gruppo di contenitori da cgprofile1 a cgprofile2.

Aggiornamento in sequenza sul posto

Quando si aggiorna il riferimento a cgprofile2 e si esegue un comando UPDATE NGroups con l'aggiornamento in sequenza sul posto, i gruppi di contenitori esistenti vengono aggiornati con cgprofile2. L'aggiornamento ai gruppi di contenitori esistenti viene effettuato in batch di piccole dimensioni (e non contemporaneamente). Garantisce un impatto minimo sul carico di lavoro, perché solo una piccola percentuale di gruppi di contenitori potrebbe non essere disponibile durante l'aggiornamento.

È possibile configurare le dimensioni del batch e altre impostazioni relative alla modalità di aggiornamento in sequenza con l'API NGroups.

Poiché gli aggiornamenti in sequenza sul posto aggiornano i gruppi di contenitori esistenti, Istanze di Container Azure (ACI) impone alcune limitazioni alle proprietà dei gruppi di contenitori.

Vedere le limitazioni di Istanze di Container di Azure relative all'aggiornamento dei gruppi dei contenitori. Vedere anche qui per le proprietà nei gruppi di contenitori che richiedono un'eliminazione (rispetto a un aggiornamento).

Aggiornamento in sequenza con sostituzione

Quando si aggiorna il riferimento a cgprofile2 e si esegue un comando UPDATE NGroups con l'aggiornamento in sequenza con sostituzione, vengono creati nuovi gruppi di contenitori con cgprofile2. I gruppi di contenitori esistenti con cgprofile1 vengono eliminati. Questa operazione di creazione ed eliminazione viene effettuata in piccoli batch (e non contemporaneamente). Garantisce un impatto minimo sul carico di lavoro, perché l'aggiornamento interessa solo una piccola percentuale di gruppi di contenitori.

Analogamente all'aggiornamento in sequenza sul posto, è possibile configurare le dimensioni del batch e altre impostazioni correlate della modalità di aggiornamento in sequenza con l'API NGroups.

Istanze di Azure Container impone meno limitazioni perché l'aggiornamento in sequenza con sostituzione crea nuovi gruppi di contenitori. Di conseguenza, l'aggiornamento in sequenza con sostituzione è un'opzione più potente, nonché l'opzione predefinita quando un cliente seleziona un aggiornamento in sequenza.

Uso

Attivare un aggiornamento in sequenza

L'aggiornamento in sequenza si attiva quando viene effettuata una chiamata PUT NGroups e il profilo di gruppo di contenitori nella chiamata PUT è diverso da quello a cui NGroups fa attualmente riferimento.

NGroups raggruppa quindi automaticamente le istanze in batch e aggiorna un batch alla volta. Il parametro maxBatchPercent determina le dimensioni del batch.

Aggiornare un batch

  • Un aggiornamento sul posto richiama una chiamata PUT CG per aggiornare ogni gruppo di contenitori del batch.

  • Un aggiornamento con sostituzione richiama una chiamata PUT CG per creare nuovi gruppi di contenitori ed eliminare quelli esistenti del batch. La corrispondenza tra i gruppi di contenitori creati e quelli eliminati è di 1:1. Tuttavia, i nomi dei gruppi di contenitori sono diversi.

Se un numero sufficiente di gruppi di contenitori nel batch fornisce segnali integri dopo il periodo pauseTimeBetweenBatches, NGroups avvia automaticamente il batch successivo per l'aggiornamento. In caso contrario, arresta l'implementazione. Il parametro maxUnhealthyPercent specifica il numero totale di gruppi di contenitori non integri, mentre il parametro maxUnhealthyUpdatedPercent specifica il numero totale di gruppi di contenitori non integri dopo l'aggiornamento.

Ecco un esempio per rilasciare una richiesta di aggiornamento in sequenza a NGroups:

{ 
    "location": "{{location}}", 
    "properties": { 
        "updateProfile": { 
            "updateMode": "Rolling", 

            "rollingUpdateProfile": { 
                // Maximum percentage of total CGs which can be updated  
                // simultaneously by rolling update in one batch. 
                “maxBatchPercent”: “10”, // optional, defaults to 20% 

                // Maximum percentage of the total CGs across the whole NGroup  
                // that can be unhealthy at a time either by rolling update or health 
                // checks by liveness probes. If there are more unhealthy CGs than this,  
                // the current rolling update is marked as failed. 
                // This check is a prerequisite to start any batch. 
                “maxUnhealthyPercent”: “10”, // optional, defaults to 20% 

                // Maximum percentage of the updated CGs which can be in unhealthy state  
                // after each batch is updated. If there are more unhealthy CGs than this,  
                // the current rolling update is marked as failed. 
                “maxUnhealthyUpdatedPercent”: 10, // optional, defaults to 20% 

                // The wait time between batches after completing one batch of the rolling 
                // update and before starting the next batch. The time duration should  
                // be specified in ISO 8601 format for duration. 
                "pauseTimeBetweenBatches": "PT2M", // optional, defaults to PT1M 

                // A nullable boolean property. Default is null 
                // Sets the mode to either in-place RU (when true) or replace (default) RU. 
                “inPlaceUpdate”: null/false/true 
            } 
        }, 
        "containerGroupProfiles": [
            { 
                "resource": { 
                    "id": "/subscriptions/{{subId}}/resourceGroups/{{rgName}}/providers/Microsoft.ContainerInstance/containerGroupProfiles/cgp1" 
                } 
            } 
        ] 
    } 
} 

Se la versione dell'immagine è impostata sul tag più recente per le immagini del contenitore all'interno del profilo di gruppo di contenitore, NGroups preleva automaticamente la versione più recente dell'immagine durante l'aggiornamento in sequenza. Per evitare comportamenti imprevisti nell'applicazione, è consigliabile non usare il tag più recente per le immagini. Usare invece versioni specifiche.

Note

Per usare l'aggiornamento con sostituzione, impostare il tag "rollingupdate.replace.enabled: true" per la risorsa NGroups. Questo tag è temporaneo e non sarà necessario in futuro.

“tags”: { 
    “rollingupdate.replace.enabled”: true 
} 

Recuperare lo stato di un aggiornamento in sequenza in esecuzione

Per ottenere lo stato più recente dell'aggiornamento in sequenza, è possibile usare questa API REST:

GET /subscriptions/{subscriptionId}/resourceGroups/{{rgName}}/providers/Microsoft.ContainerInstance/NGroups/{{ngroupsName}}/latestRollingUpdate

Viene restituita una risposta contenente informazioni pertinenti sull'aggiornamento in sequenza.

Annullare un aggiornamento in sequenza

Per annullare un aggiornamento in sequenza, usare l'API seguente. Dopo l'annullamento, RU non può essere ripresa o riavviata. È necessario attivare un nuovo aggiornamento in sequenza.

POST /subscriptions/{subscriptionId}/resourceGroups/{{rgName}}/providers/Microsoft.ContainerInstance/NGroups/{{ngroupsName}}/cancelRollingUpdate

Non è necessario fornire un corpo della richiesta quando si chiama questa API.

È anche importante sapere che l'annullamento di un RU non effettua automaticamente il rollback allo stato precedente, ma resta nello stato in cui si trovava al momento dell'annullamento. Ad esempio, nel caso in cui si voglia aggiornare un riferimento al profilo CG da cgprofile1 a cgprofile2 e a un certo punto l'operazione viene annullata, alcuni CG potrebbero avere il nuovo profilo cgprofile2 e altri rimangono con cgprofile1.

Limite di un batch in un aggiornamento in sequenza

I gruppi di contenitori di un batch specifico in un aggiornamento in sequenza non superano il limite di un modello di errore. Un modello di errore rappresenta una combinazione di area/dominio di errore (FD). Ad esempio, l'area 1/FD 0 è un limite del modello di errore, l'area 1/ FD 1 è un altro limite del modello di errore mentre l'area 2/ FD 0 è un altro limite ancora del modello di errore.

Se un cliente dispone di una configurazione NGroups multiarea con tre aree, un batch è circoscritto ai gruppi di contenitori appartenenti al massimo a una sola zona. Un batch non è mai costituito da gruppi di contenitori distribuiti in più aree.

Se un cliente dispone di una configurazione NGroups multiarea e più FD, un batch è comunque costituito da gruppi di contenitori appartenenti al massimo a un solo FD in una singola area.

NGroups mantiene questo limite del modello di errore in un batch, anche quando il numero di gruppi di contenitori selezionati per un batch è molto inferiore all'impostazione maxBatchPercent. Riflette il fatto che NGroups preferisce aggiornamenti sicuri rispetto a quelli più veloci (e quindi più rischiosi).

L'unica volta in cui viene superato un limite del modello di errore è quando l'aggiornamento in sequenza seleziona i gruppi di contenitori non integri per il primo batch. In questo batch, l'aggiornamento in sequenza tenta di aggiornare tutti i gruppi di contenitori non integri per migliorare la disponibilità complessiva di NGroups. Di conseguenza, quando si aggiornano gruppi di contenitori non integri, l'aggiornamento in sequenza può superare l'impostazione maxBatchPercent.