Usare le esecuzioni di distribuzione graduale per gestire i posizionamenti delle risorse di Azure Kubernetes Fleet Manager

Si applica a: ✔️ Gestione flotta con un cluster hub

Le esecuzioni di rollout graduale del posizionamento in Azure Kubernetes Fleet Manager offrono un approccio controllato per distribuire carichi di lavoro Kubernetes in più cluster membri tramite un processo articolato fase per fase. Per ridurre al minimo i rischi, questo approccio viene distribuito in sequenza nei cluster di destinazione, con tempi di attesa facoltativi e controlli di approvazione tra fasi.

Questo articolo illustra come creare ed eseguire esecuzioni di aggiornamenti a fasi per distribuire i carichi di lavoro progressivamente ed eseguire il rollback alle versioni precedenti quando necessario.

Azure Kubernetes Fleet Manager supporta due ambiti per gli aggiornamenti a fasi:

  • Ambito cluster: usare ClusterStagedUpdateRun con ClusterResourcePlacement per gli amministratori della flotta che gestiscono le modifiche a livello di infrastruttura.
  • Con ambito spazio dei nomi: usare StagedUpdateRun con ResourcePlacement per i team delle applicazioni che gestiscono le distribuzioni negli spazi dei nomi specifici.

L'esempio presentato in questo articolo mostra come usare un run di rollout con risorse con ambito a livello di cluster. Con ambito limitato allo spazio dei nomi, si comporta esattamente allo stesso modo rispetto alle risorse all'interno dello stesso spazio dei nomi.

Prima di iniziare

  • Impostare le seguenti variabili di ambiente:

    export SUBSCRIPTION_ID=<subscription>
    export GROUP=<resource-group>
    export FLEET=<fleet-name>
    export MEMBER_CLUSTER_1=aks-member-1
    export MEMBER_CLUSTER_2=aks-member-2
    
  • Per completare questo articolo è necessario interfaccia della riga di comando di Azure installato. Per installare o aggiornare, vedere Installare il interfaccia della riga di comando di Azure.

  • È necessaria l'estensione fleet interfaccia della riga di comando di Azure. È possibile installarlo eseguendo il comando seguente:

    az extension add --name fleet
    

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

    az extension update --name fleet
    
  • Se l'interfaccia della riga di comando di Kubernetes (kubectl) non è ancora disponibile, è possibile installarla usando questo comando:

    az aks install-cli
    

Configurare l'ambiente

Questo articolo utilizza un Fleet Manager con un cluster centrale e due cluster membri. Se non si ha un Fleet Manager, seguire la guida introduttiva per creare un Fleet Manager con un cluster hub. Quindi, aggiungi Servizio Azure Kubernetes (AKS) o i cluster Kubernetes abilitati per Azure Arc come membri.

Assicurarsi che i cluster membri abbiano le etichette seguenti in modo che sia presente un cluster in ogni fase dell'implementazione.

nome membro labels
aks-member-1 environment=canary
aks-member-2 environment=staging

Applicare etichette ai cluster membri usando il comando seguente.

az fleet member update \
    --resource-group ${GROUP} \
    --fleet-name ${FLEET} \
    --name ${MEMBER_CLUSTER_1} \
    --labels environment=canary
az fleet member update \
    --resource-group ${GROUP} \
    --fleet-name ${FLEET} \
    --name ${MEMBER_CLUSTER_2} \
    --labels environment=staging
  1. Nel portale di Azure passare a Fleet Manager.

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

  3. Nell'elenco dei cluster membri selezionare un cluster. Scegliere quindi Modifica etichette nel menu azione.

  4. Aggiungi l'etichetta appropriata al cluster membro, quindi seleziona Applica.

  5. Ripetere per ogni cluster membro.

    Screenshot del portale di Azure che mostra una nuova etichetta aggiunta a un cluster membro Kubernetes Fleet Manager Azure.

Prepara il carico di lavoro Kubernetes per la distribuzione

In questo passaggio si esegue il staging di un carico di lavoro Kubernetes nel cluster hub di Fleet Manager in modo da poterlo distribuire tramite un'implementazione a fasi nei cluster membri.

  1. Ottenere il file kubeconfig del cluster hub di Flotta Kubernetes usando il comando az fleet get-credentials:

    az fleet get-credentials \
        --resource-group ${GROUP} \
        --name ${FLEET}
    

    Il risultato dovrebbe essere simile al seguente esempio.

    Merged "hub" as current context in /home/fleet/.kube/config
    

    Note

    Se si riceve un errore di tipo InvalidHubOperation con un messaggio che indica che la flotta è priva di hub, aggiungi un cluster di hub. Per altre informazioni, vedere Aggiornare il tipo di cluster hub.

  2. Creare un namespace nel cluster hub di Fleet Manager.

    kubectl create namespace test-app
    
  3. Salvare il codice YAML seguente come test-workload.yaml.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      namespace: test-app
    spec:
      selector:
        matchLabels:
          app: nginx
      replicas: 2
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: mcr.microsoft.com/azurelinux/base/nginx:1.28@sha256:3352a36cbcab4708883a3e77b64f64159e11e1aab358c010e1c4e465dbfb4f57
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-service
      namespace: test-app
    spec:
      selector:
        app: nginx
      ports:
      - protocol: TCP
        port: 80
        targetPort: 80
      type: LoadBalancer
    
  4. Distribuire il carico di lavoro di test sul cluster hub di Fleet Manager usando kubectl.

    kubectl apply -f test-workload.yaml
    
  1. Nel portale di Azure passare a Fleet Manager.

  2. Nel menu del servizio, in Risorse della flotta, selezionare Namespace>+ Crea.

    Note

    Se le risorse della flotta non sono visualizzate, Fleet Manager non ha un cluster hub. Per altre informazioni su come aggiungerne una, vedere Aggiornare il tipo di cluster hub.

  3. Nel menu selezionare Spazio dei nomi, immettere un nome e quindi selezionare Crea.

    Screenshot del portale di Azure che mostra uno spazio dei nomi denominato test-app creato nel cluster hub di Fleet Manager.

    Dopo alcuni istanti, la pagina viene aggiornata e lo spazio dei nomi viene visualizzato nell'elenco degli spazi dei nomi nel cluster hub di Fleet Manager. È ora pronto per ospitare tutte le risorse da distribuire tra cluster membri.

  4. Nella parte superiore dell'elenco degli spazi dei nomi selezionare + Crea>applica un YAML e usare gli esempi seguenti.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      namespace: test-app
    spec:
      selector:
        matchLabels:
          app: nginx
      replicas: 2
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: mcr.microsoft.com/azurelinux/base/nginx:1.28@sha256:3352a36cbcab4708883a3e77b64f64159e11e1aab358c010e1c4e465dbfb4f57
            ports:
            - containerPort: 80
    
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-service
      namespace: test-app
    spec:
      selector:
        app: nginx
      ports:
      - protocol: TCP
        port: 80
        targetPort: 80
      type: LoadBalancer
    

    Copiare e incollare gli esempi e applicarli uno alla volta, come illustrato nell'immagine seguente.

    Screenshot del portale di Azure che mostra la finestra di dialogo Applica con YAML popolata con una distribuzione pronta per essere applicata al cluster hub di Fleet Manager.

    Lo spazio dei nomi e i relativi carichi di lavoro sono ora pronti per essere distribuiti ai cluster membri. La distribuzione e il servizio non sono pianificati nel cluster hub di Fleet Manager.

Definire l'ordinamento dei cluster usando una strategia di implementazione

Creare una strategia di implementazione per definire l'ordine in cui i cluster ricevono le risorse. È anche possibile aggiungere altri controlli, ad esempio i tempi di immersione e le approvazioni prima o dopo ogni fase. Per ulteriori informazioni, vedere Definire strategie di distribuzione del posizionamento delle risorse riutilizzabili per Azure Kubernetes Fleet Manager.

  1. Salvare il codice YAML seguente come crp-two-stages-strategy.yaml.

    apiVersion: placement.kubernetes-fleet.io/v1
    kind: ClusterStagedUpdateStrategy
    metadata:
      name: two-stages-strategy
    spec:
      stages:
        - name: staging
          labelSelector:
            matchLabels:
              environment: staging
          afterStageTasks:
            - type: TimedWait
              waitTime: 4m
        - name: canary
          labelSelector:
            matchLabels:
              environment: canary
          beforeStageTasks:
            - type: Approval
    
  2. Applicare il manifesto della strategia al cluster hub di Fleet Manager.

    kubectl apply -f crp-two-stages-strategy.yaml
    
  3. Controlla lo stato della risorsa di strategia.

    kubectl get clusterstagedupdatestrategy two-stages-strategy
    

    Il risultato dovrebbe essere simile al seguente esempio.

    NAME                  AGE
    two-stages-strategy   47m
    

Usare il processo seguente per creare una strategia contenente le due fasi Staging e Canary con un tempo di attesa di 4 minuti e un'approvazione preliminare per la Canary fase.

  1. Nel portale di Azure passare a Fleet Manager.

  2. Nel menu del servizio, in Risorse flotta selezionare Posizionamento> risorseStrategie di implementazione a fasi, quindi Crea.

  3. Immettere un nome per la strategia.

  4. Selezionare l'ambito della strategia, scegliendo Con ambito cluster o Con ambito spazio dei nomi.

    • Per con ambito namespace, seleziona il Namespace esistente nel cluster hub di Fleet Manager in cui sono predisposte le risorse Kubernetes da distribuire.
  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.
    • (Facoltativo) Attendere dopo la fase : selezionare questa opzione se si vuole definire una pausa prima di passare alla fase successiva.
    • (Facoltativo) Durata attesa : selezionare una durata predefinita oppure immettere un valore personalizzato in secondi.
    • Selettore di etichette del cluster: scegliere un'etichetta del cluster membro esistente da usare per selezionare i cluster per questa fase.
    • (Facoltativo) Etichetta di ordinamento cluster : scegliere un'etichetta del cluster membro esistente da usare per ordinare i cluster all'interno della fase.
    • (Facoltativo) Concorrenza temporanea : impostare il numero di cluster da aggiornare simultaneamente nella fase corrente.

    Screenshot del portale di Azure che mostra una nuova fase da aggiungere a una strategia di implementazione temporanea di Kubernetes Fleet Manager Azure.

    Note

    Il numero massimo di fasi in ogni strategia è 31.

  6. Ripetere fino a quando non vengono aggiunte tutte le fasi alla strategia. Selezionare Crea per creare la strategia.

    Una schermata del portale di Azure che mostra una strategia di distribuzione graduale del posizionamento di Azure Kubernetes Fleet Manager con due fasi, in attesa di essere creata.

  7. La pagina viene aggiornata e l'elenco visualizza la strategia appena creata.

    Screenshot del portale di Azure che mostra un elenco delle strategie di implementazione in staging di Kubernetes Fleet Manager Azure.

Selezionare i cluster usando un posizionamento delle risorse

Usare un posizionamento delle risorse per selezionare le risorse da distribuire e definire i criteri per selezionare i cluster che ricevono le risorse.

Per usare un'implementazione a fasi, impostare il tipo di implementazione strategy su External in modo da poter controllare la distribuzione delle risorse in base a un'implementazione a fasi definita in un secondo momento.

  1. Salvare il codice YAML seguente come crp-distribute-workload-ext.yaml.

    apiVersion: placement.kubernetes-fleet.io/v1
    kind: ClusterResourcePlacement
    metadata:
      name: distribute-test-app
    spec:
      resourceSelectors:
        - group: ""
          kind: Namespace
          version: v1          
          name: test-app
      policy:
        placementType: PickAll
      strategy:
        type: External
    

    Importante

    Se non si imposta il tipo strategy su External, la distribuzione della risorsa viene avviata non appena si applica il manifest utilizzando una strategia RollingUpdate.

  2. Applica il manifest di posizionamento al cluster hub di Fleet Manager.

    kubectl apply -f crp-distribute-workload-ext.yaml
    
  3. Controllare lo stato del posizionamento delle risorse.

    kubectl get clusterresourceplacement distribute-test-app
    

    Il risultato dovrebbe essere simile al seguente esempio.

    NAME                  GEN   SCHEDULED   SCHEDULED-GEN   AVAILABLE   AVAILABLE-GEN   AGE
    distribute-test-app   1     True        1                                           60s
    
  1. Nel portale di Azure passare a Fleet Manager.

  2. Nel menu Servizio, in Risorse flotta, selezionare Posizionamenti risorse>+ Crea.

  3. Nella scheda Informazioni di base configurare le opzioni seguenti:

    • In Dettagli del posizionamento, immettere un nome per il posizionamento.

    • In Dettagli risorsa, lascia Ambito come Con ambito cluster e immetti il Group Version Kind (GVK) e il nome della risorsa da distribuire. In questo esempio usare i valori seguenti.

      group: ""
      kind: Namespace
      version: v1          
      name: test-app
      
    • In Selezione del cluster membro, per Tipo di posizionamento scegliere Tutti i cluster.

    • Per l’Rollout, selezionare External. Usare la strategia di aggiornamento a fasi per selezionare la strategia di implementazione creata in precedenza.

    • Lasciare deselezionata la casella Avvia l'implementazione automatica.

    Screenshot del portale di Azure che mostra la scheda Informazioni di base completa per il posizionamento delle risorse con ambito cluster che usa una strategia di aggiornamento a fasi per l'implementazione.

  4. Selezionare Avanti per esaminare il manifesto risultante ClusterResourcePlacement . È possibile modificare il manifesto, se necessario, convalidarlo usando l'opzione Convalida (esecuzione secca) oppure selezionare Rivedi e crea per procedere alla conferma finale.

    Screenshot del portale di Azure che mostra la scheda Revisione YAML con una convalida dell'esecuzione a secco riuscita per il posizionamento delle risorse con ambito cluster tramite una strategia esterna per uno spazio dei nomi denominato test-app.

  5. Selezionare Crea per creare l'esecuzione dell'implementazione, ma non avviarla.

    Screenshot del portale di Azure che mostra la scheda Rivedi e crea per un posizionamento delle risorse con ambito cluster usando un'implementazione a fasi per uno spazio dei nomi denominato test-app.

  6. La pagina viene aggiornata e l'elenco Posizionamento risorse visualizza il posizionamento appena creato. Mostra il numero di cluster selezionati e se lo scheduler della flotta può soddisfare i criteri di posizionamento. Si noti che il tipo di distribuzione è impostato su Esterno.

    Screenshot del portale Azure che mostra l'elenco dei posizionamenti delle risorse con un singolo posizionamento delle risorse denominato distribute-test-app che ha un tipo di distribuzione esterna.

Quando si utilizza il portale di Azure per creare un posizionamento con una strategia di implementazione graduale, viene creata automaticamente un'esecuzione di implementazione a fasi.

Usare l'implementazione a fasi per controllare la distribuzione

In questo articolo si crea la distribuzione graduale con un state di Initialize in modo da poter avviare la distribuzione quando si desidera, invece di avviare immediatamente l'esecuzione quando viene applicato il file manifesto. Impostare lo stato su Run per iniziare immediatamente.

  1. Salvare il codice YAML seguente come staged-rollout-test-app.yaml.

    apiVersion: placement.kubernetes-fleet.io/v1
    kind: ClusterStagedUpdateRun
    metadata:
      name: staged-rollout-test-app
    spec:
      placementName: distribute-test-app
      stagedRolloutStrategyName: two-stages-strategy
      state: Initialize
    

    Note

    Se non si imposta il tipo strategy su External, la distribuzione della risorsa viene avviata non appena si applica il manifest utilizzando una strategia RollingUpdate.

  2. Applicare il manifesto dell'implementazione a fasi al cluster hub di Fleet Manager.

    kubectl apply -f staged-rollout-test-app.yaml
    
  3. Controllare lo stato della risorsa di esecuzione dell'implementazione. È inizializzato ma non procede.

    kubectl get clusterstagedupdaterun staged-rollout-test-app
    

    Il risultato dovrebbe essere simile al seguente esempio.

    NAME                      PLACEMENT             RESOURCE-SNAPSHOT-INDEX   POLICY-SNAPSHOT-INDEX   INITIALIZED   PROGRESSING   SUCCEEDED   AGE
    staged-rollout-test-app   distribute-test-app                             0                       True                                    101s
    

Gestione dello stato di implementazione a fasi

Dopo aver pronto tutte le risorse, è ora possibile controllare l'implementazione delle risorse tra cluster membri.

Avviare un'implementazione a fasi

Per avviare una distribuzione graduale, modifica il campo state nella specifica impostandolo su Run.

kubectl patch clusterstagedupdaterun staged-rollout-test-app --type merge -p '{"spec":{"state":"Run"}}'

Controllare lo stato della risorsa di esecuzione dell'implementazione. È inizializzato ma non procede.

kubectl get clusterstagedupdaterun staged-rollout-test-app

Il risultato dovrebbe essere simile al seguente, tenendo presente che l'avanzamento è ora True.

NAME                      PLACEMENT             RESOURCE-SNAPSHOT-INDEX   POLICY-SNAPSHOT-INDEX   INITIALIZED   PROGRESSING   SUCCEEDED   AGE
staged-rollout-test-app   distribute-test-app                             0                       True          True                      36m

Note

Quando l'implementazione raggiunge un'attività TimedWait o Approvazione, lo stato di avanzamento diventa False. Usare describe per determinare il motivo della sospensione.

Visualizza lo stato dettagliato della distribuzione descrivendo il ClusterStagedUpdateRun.

kubectl describe clusterstagedupdaterun staged-rollout-test-app

Nella risposta, esamina Status, osservando Conditions e Stages Status per capire quale fase e quale cluster sono attualmente in elaborazione, oppure se un'attività TimedWait o Approval è attualmente attiva.

Name:         staged-rollout-test-app
Namespace:
Labels:       <none>
Annotations:  <none>
API Version:  placement.kubernetes-fleet.io/v1
Kind:         ClusterStagedUpdateRun
Metadata:
  Creation Timestamp:  2026-07-27T04:25:14Z
  Finalizers:
    kubernetes-fleet.io/stagedupdaterun-finalizer
  Generation:        3
  Resource Version:  2684410
  UID:               5e20d0a1-515a-4f1c-b566-89676100a968
Spec:
  Placement Name:                distribute-test-app
  Resource Snapshot Index:
  Staged Rollout Strategy Name:  two-stages-strategy
  State:                         Run
Status:
  Applied Strategy:
    Comparison Option:  PartialComparison
    Type:               ClientSideApply
    When To Apply:      Always
    When To Take Over:  Always
  Conditions:
    Last Transition Time:  2026-07-27T04:25:14Z
    Message:               The UpdateRun initialized successfully
    Observed Generation:   3
    Reason:                UpdateRunInitializedSuccessfully
    Status:                True
    Type:                  Initialized
    Last Transition Time:  2026-07-27T05:01:56Z
    Message:               The update run is making progress
    Observed Generation:   3
    Reason:                UpdateRunProgressing
    Status:                True
    Type:                  Progressing
  Deletion Stage Status:
    Clusters:
    Stage Name:                   kubernetes-fleet.io/deleteStage
  Policy Observed Cluster Count:  2
  Policy Snapshot Index Used:     0
  Resource Snapshot Index Used:   0
  Staged Update Strategy Snapshot:
    Stages:
      After Stage Tasks:
        Type:       TimedWait
        Wait Time:  1h0m0s
      Label Selector:
        Match Labels:
          Environment:  staging
      Max Concurrency:  1
      Name:             staging
      Before Stage Tasks:
        Type:  Approval
      Label Selector:
        Match Labels:
          Environment:  canary
      Max Concurrency:  1
      Name:             canary
  Stages Status:
    After Stage Task Status:
      Type:  TimedWait
    Clusters:
      Cluster Name:  aks-place-member-02-fm
      Conditions:
        Last Transition Time:  2026-07-27T05:01:56Z
        Message:               Cluster update started
        Observed Generation:   3
        Reason:                ClusterUpdatingStarted
        Status:                True
        Type:                  Started
    Conditions:
      Last Transition Time:  2026-07-27T05:01:56Z
      Message:               Clusters in the stage started updating
      Observed Generation:   3
      Reason:                StageUpdatingStarted
      Status:                True
      Type:                  Progressing
    Stage Name:              staging
    Start Time:              2026-07-27T05:01:56Z
    Before Stage Task Status:
      Approval Request Name:  staged-rollout-test-app-before-canary
      Type:                   Approval
    Clusters:
      Cluster Name:  aks-place-member-01-fm
    Stage Name:      canary
Events:              <none>
  1. Nel portale di Azure passare a Fleet Manager.

  2. Nel menu del servizio, in Fleet Resources (Risorse flotta) selezionare Staged rollout runs (Esecuzioni di implementazione a fasi).

  3. Nell'elenco selezionare l'esecuzione dell'implementazione a fasi creata automaticamente nel passaggio precedente e quindi selezionare Avvia nel menu azione.

    Schermata del portale di Azure che mostra l'elenco delle esecuzioni della distribuzione graduale con una singola esecuzione della distribuzione graduale selezionata.

  4. La pagina viene aggiornata e l'elenco esecuzioni di implementazione a fasi visualizza l'esecuzione a fasi con lo stato di avanzamento, con la fase attualmente in esecuzione visualizzata.

    Screenshot del portale di Azure che mostra l'elenco di esecuzioni di implementazione a fasi con un'unica esecuzione a fasi in corso e che si trova nella fase denominata staging.

  5. Quando la distribuzione raggiunge TimedWait, lo stato diventa In attesa. È possibile passare il puntatore del mouse sull'icona delle informazioni per verificare che questo stato sia dovuto a un oggetto TimedWait.

    Schermata del portale di Azure che mostra l'elenco delle esecuzioni del rollout graduale con una singola esecuzione del rollout graduale in attesa. È presente una finestra popup informativa che conferma che l'esecuzione è in attesa della scadenza di un intervallo di attesa temporizzato.

Interrompere un rilascio graduale

Per arrestare una distribuzione graduale in esecuzione, modificare il campo state nella specifica impostandolo su Stop. Questa azione interrompe normalmente l'esecuzione dell'implementazione a fasi, quindi i cluster in corso completano gli aggiornamenti prima dell'arresto del processo.

kubectl patch clusterstagedupdaterun staged-rollout-test-app --type merge -p '{"spec":{"state":"Stop"}}'

L'esecuzione dell'aggiornamento in fasi è stata inizializzata, ma non è più in esecuzione.

kubectl get clusterstagedupdaterun staged-rollout-test-app

L'output dovrebbe essere simile al seguente, notando che progressing è ora False.

NAME                      PLACEMENT             RESOURCE-SNAPSHOT-INDEX   POLICY-SNAPSHOT-INDEX   INITIALIZED   PROGRESSING   SUCCEEDED   AGE
staged-rollout-test-app   distribute-test-app                             0                       True          False                     46m

Per interrompere una distribuzione graduale in corso, segui questi passaggi. Questa azione arresta in modo controllato la distribuzione graduale, così i cluster già in fase di aggiornamento completano gli aggiornamenti prima che il processo si arresti.

  1. Nel portale di Azure passare a Fleet Manager.

  2. Nel menu del servizio, in Fleet Resources (Risorse flotta) selezionare Staged rollout runs (Esecuzioni di implementazione a fasi).

  3. Nell'elenco, seleziona l'esecuzione della distribuzione graduale che vuoi interrompere. Quindi, scegli Arresta dal menu delle azioni.

    Schermata del portale di Azure che mostra l'elenco delle esecuzioni dell'implementazione a fasi con una singola esecuzione dell'implementazione a fasi in corso.

  4. La pagina si aggiorna e l'elenco delle esecuzioni di implementazione a fasi visualizza l'esecuzione di implementazione a fasi con stato Arrestato.

    Schermata del portale di Azure che mostra l'elenco delle esecuzioni di distribuzione graduale con una singola esecuzione di distribuzione graduale con stato Arrestato.

È possibile riavviare l'implementazione seguendo le istruzioni riportate in Avviare un'implementazione a fasi.

Note

È possibile interrompere una distribuzione in qualsiasi momento. I cluster in corso continuano a essere completati. Le approvazioni in sospeso rimangono invariate.

Cancellare un'approvazione della fase in sospeso

Aggiungere attività di approvazione prima o dopo una fase. Queste attività richiedono un'azione esplicita per essere rimosse.

Quando un'esecuzione di implementazione a fasi raggiunge un'approvazione, crea una richiesta di approvazione (ClusterApprovalRequest o ApprovalRequest). È necessario applicare patch a questa richiesta. Dopo aver applicato la patch, l'esecuzione del rollout continua.

Verificare la presenza di eventuali approvazioni in sospeso usando i comandi seguenti.

kubectl get clusterapprovalrequest

Quando si verifica la presenza di risorse in sospeso ApprovalRequest , assicurarsi di specificare lo spazio dei nomi in cui risiedono le risorse.

kubectl get clusterapprovalrequest -n test-app

Se si riceve una risposta di No resources found, non sono attualmente presenti approvazioni con ambito cluster in sospeso.

Se sono presenti approvazioni in sospeso, la risposta dovrebbe essere simile all'esempio seguente.

NAME                                    UPDATE-RUN                STAGE    APPROVED   AGE
staged-rollout-test-app-before-canary   staged-rollout-test-app   canary              4m13s

Note

Il sistema genera i nomi delle risorse delle richieste di approvazione usando il formato {update-run-name}-{before|after}-{stage-name}.

È possibile approvare ClusterApprovalRequest creando un file di patch JSON e applicandolo.

cat << EOF > approval.json
"status": {
    "conditions": [
        {
            "lastTransitionTime": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
            "message": "lgtm",
            "observedGeneration": 1,
            "reason": "testPassed",
            "status": "True",
            "type": "Approved"
        }
    ]
}
EOF

Note

Assicurarsi che observedGeneration corrisponda alla generazione dell'oggetto di approvazione. Questo valore è in genere 1.

Inviare una richiesta di patch per approvare la richiesta usando il file JSON creato.

kubectl patch clusterapprovalrequests staged-rollout-test-app-before-canary --type='merge' --subresource=status --patch-file approval.json

Verificare che l'approvazione sia stata applicata alla richiesta.

kubectl get clusterapprovalrequest staged-rollout-test-app-before-canary

Il risultato dovrebbe essere simile al seguente esempio. Si noti che APPROVED è impostato su True.

NAME                                    UPDATE-RUN                STAGE    APPROVED   AGE
staged-rollout-test-app-before-canary   staged-rollout-test-app   canary   True       6m

Il rollout continua.

kubectl get clusterstagedupdaterun staged-rollout-test-app

L'output dovrebbe essere simile al seguente, che mostra un'esecuzione completata con SUCCEEDED impostato su True.

NAME                      PLACEMENT             RESOURCE-SNAPSHOT-INDEX   POLICY-SNAPSHOT-INDEX   INITIALIZED   PROGRESSING   SUCCEEDED   AGE
staged-rollout-test-app   distribute-test-app                             0                       True          False         True        9m

Quando un'esecuzione di implementazione a fasi raggiunge un'approvazione, usare il processo seguente per cancellare l'approvazione in modo che l'esecuzione continui.

  1. Nel portale di Azure passare a Fleet Manager.

  2. Nel menu del servizio, in Fleet Resources (Risorse flotta) selezionare Staged rollout runs (Esecuzioni di implementazione a fasi).

  3. Nell'elenco, individua l'esecuzione della distribuzione graduale con stato Approvazione in sospeso.

    Schermata del portale di Azure che mostra l'elenco delle esecuzioni della distribuzione graduale con una singola esecuzione della distribuzione graduale in attesa di approvazione.

  4. È possibile aprire la finestra di dialogo di approvazione da una delle tre posizioni seguenti:

    • Inline nella visualizzazione elenco di esecuzione a fasi dell'implementazione (illustrata in precedenza).
    • Dalla visualizzazione dei dettagli per l'esecuzione dell'implementazione a fasi:
      • Dal campo Stato nella sezione Informazioni di base.
      • Inline nella visualizzazione Fase.

    Schermata del portale di Azure che mostra la visualizzazione dettagliata dell'esecuzione della distribuzione graduale con due collegamenti per l'approvazione in sospeso.

  5. Selezionare un'opzione per aprire la finestra di dialogo Approvazione . Immettere un messaggio facoltativo e scegliere Approva.

    Screenshot del portale di Azure che mostra la finestra di dialogo di approvazione dell'esecuzione a fasi con un campo messaggio completato.

  6. La pagina viene aggiornata e l'elenco esecuzioni di implementazione a fasi visualizza l'esecuzione a fasi con lo stato di avanzamento.

    Schermata del portale di Azure che mostra l'approvazione dell'esecuzione del rollout graduale che avanza nella fase canary dopo l'approvazione.

  7. L'esecuzione dell'implementazione a fasi continua finché non termina e nell'elenco Esecuzioni dell'implementazione a fasi viene visualizzata con lo stato Succeeded.

    Screenshot del portale di Azure che mostra l'esecuzione dell'implementazione a fasi completata correttamente.

Eliminare un'esecuzione dell'implementazione

Rimuovere un'implementazione a fasi eliminando la risorsa Kubernetes nel cluster hub di Fleet Manager.

kubectl delete clusterstagedupdaterun staged-rollout-test-app
  1. Nel portale di Azure passare a Fleet Manager.

  2. Nel menu del servizio, in Fleet Resources (Risorse flotta) selezionare Staged rollout runs (Esecuzioni di implementazione a fasi).

  3. Nell'elenco selezionare l'esecuzione dell'implementazione a fasi da eliminare e quindi scegliere Elimina dal menu azione.

  4. Nella finestra di dialogo Elimina verificare che la risorsa sia corretta e quindi selezionare Conferma eliminazione. Infine, scegliere Elimina.

    Screenshot del portale di Azure che mostra la finestra di dialogo Elimina per un'esecuzione di implementazione a fasi selezionata.

  5. La pagina viene aggiornata e l'esecuzione dell'implementazione a fasi eliminata non è più presente.

Note

L'eliminazione di un'esecuzione di implementazione a fasi completata non comporta la rimozione delle risorse inserite. Per rimuovere le risorse inserite, è necessario eliminare il posizionamento delle risorse.

Passaggi successivi

In questo articolo si è appreso come usare le esecuzioni di implementazione a fasi per controllare la distribuzione delle risorse tra cluster membri usando il posizionamento delle risorse.

Per altre informazioni sulle esecuzioni di implementazione a fasi e sui concetti correlati, vedere le risorse seguenti: