Condividi tramite


Controllare il comportamento degli errori di aggiornamento

Panoramica

Questa guida descrive le funzionalità di comportamento degli errori di aggiornamento di Gestore del servizio di Microsoft Azure Operator (AOSM) per le funzioni di rete del contenitore. Queste funzionalità, come parte dell'iniziativa di procedure di aggiornamento sicuro di Gestore del servizio di Microsoft Azure Operator, offrono una scelta tra tentativi più veloci, con sospensione in caso di errore, rispetto al ritorno al punto iniziale, con ripristino dello stato precedente in caso di errore.

Sospensione in caso di errore

Qualsiasi aggiornamento tramite AOSM inizia con un'operazione di reput del servizio di rete del sito (SNS). L'operazione di reput elabora le applicazioni per le funzioni di rete (NfApps) disponibili nella versione di progettazione delle funzioni di rete (NFDV). L'operazione di reput implementa la seguente logica predefinita:

  • Le applicazioni NfApps vengono elaborate dopo l'ordinamento updateDependsOn o nell'ordine sequenziale visualizzato.
  • Le applicazioni NfApps con il parametro "applicationEnabled" impostato su disable vengono ignorati.
  • Le applicazioni NFApps sono presenti, ma se non vi viene fatto riferimento dal nuovo NFDV vengono eliminate.
  • La sequenza di esecuzione viene sospesa se uno degli aggiornamenti per NfApp ha esito negativo e viene considerato un ripristino dello stato precedente.
  • L'errore lascia la risorsa NF in uno stato di errore.

Con la sospensione in caso di errore, Gestore del servizio di Microsoft Azure Operator esegue il ripristino dello stato precedente solo dell'applicazione NfApp non riuscita, tramite i parametri testOptions, installOptions o upgradeOptions. Non viene eseguita alcuna azione sulle applicazioni NfApps che procedono con NfApp non riuscita. Questo metodo consente all'utente finale di risolvere i problemi relativi all'applicazione NfApp non riuscite e quindi di riavviare l'aggiornamento da quel punto in poi. Come comportamento predefinito, questo metodo è il più efficiente, ma può causare incoerenze della funzione di rete (NF) in uno stato di versione mista.

Ripristino dello stato precedente in caso di errore

Per risolvere il rischio di versioni delle applicazioni NfApp non corrispondenti, Gestore del servizio di Microsoft Azure Operator supporta ora il ripristino dello stato precedente a livello NF, in caso di errore. Con questa opzione abilitata, se un'operazione dell'applicazione NfApp ha esito negativo, sia l'applicazione NfApp non riuscita che tutte le NfApps completate prima, possono essere ripristinate allo stato iniziale della versione. Questo metodo riduce al minimo o elimina la quantità di tempo in cui NF viene esposta alle mancate corrispondenze della versione dell'applicazione NfApp. La funzionalità facoltativa di ripristino dello stato precedente in caso di errore funziona nel modo seguente:

  • Un utente avvia un'operazione di reput sSNS e abilita il ripristino dello stato precedente in caso di errore.
  • Viene acquisito e archiviato uno snapshot delle versioni dell'applicazione NfApp corrente.
  • Lo snapshot viene usato per determinare le singole azioni dell'applicazione NfApp eseguite per invertire quelle completate correttamente.
    • Azione "helm install" sui componenti eliminati,
    • Azione "helm rollback" sui componenti aggiornati,
    • Azione "helm delete" sui componenti appena installati
  • Si verifica un errore dell'applicazione NfApp, Gestore del servizio di Microsoft Azure Operator ripristina le applicazioni NfApps allo stato della versione dello snapshot prima dell'aggiornamento, con le azioni più recenti ripristinate per prime.

Nota

  • Gestore del servizio di Microsoft Azure Operator non crea uno snapshot se un utente non abilita il ripristino dello stato precedente in caso di errore.
  • Un ripristino dello stato precedente in caso di errore si applica solo alle applicazioni NFApps completate correttamente.
    • Usare i parametri testOptions, installOptions o upgradeOptions per controllare il ripristino dello stato precedente dell'applicazione NfApp non riuscita.

Gestore del servizio di Microsoft Azure Operator restituisce i messaggi e lo stato operativo seguenti, in base ai rispettivi risultati:

  - Upgrade Succeeded
    - Provisioning State: Succeeded
    - Message: <empty>
  - Upgrade Failed, Rollback Succeeded
    - Provisioning State: Failed
    - Message: Application(<ComponentName>) : <Failure Reason>; Rollback succeeded
  - Upgrade Failed, Rollback Failed
    - Provisioning State: Failed
    - Message: Application(<ComponentName>) : <Failure reason>; Rollback Failed (<RollbackComponentName>) : <Rollback Failure reason>

Come configurare il ripristino dello stato precedente in caso di errore

Il metodo più flessibile per controllare il comportamento degli errori consiste nell'estendere un nuovo parametro CGS (Configuration Group Schema), rollbackEnabled, per consentire il controllo del valore del gruppo di configurazione (CGV) tramite roleOverrideValues nel payload NF. Prima di tutto, definire il parametro CGS:

{
  "description": "NF configuration",
  "type": "object",
  "properties": {
    "nfConfiguration": {
      "type": "object",
      "properties": {
        "rollbackEnabled": {
          "type": "boolean"
        }
      },
      "required": [
        "rollbackEnabled"
      ]
    }
  }
}

Nota

  • Se nfConfiguration non viene fornito tramite il parametro roleOverrideValues, per impostazione predefinita il ripristino dello stato precedente è disabilitato.

Con il nuovo parametro rollbackEnable definito, l'operatore può ora fornire un valore di runtime, in roleOverrideValues, come parte del payload di reput NF.

example:
{
  "location": "eastus",
  "properties": {
    // ...
    "roleOverrideValues": [
          "{\"nfConfiguration\":{\"rollbackEnabled\":true}}",
            "{\"name\":\"nfApp1\",\"deployParametersMappingRuleProfile\":{\"applicationEnablement\" : \"Disabled\"}}",
            "{\"name\":\"nfApp2\",\"deployParametersMappingRuleProfile\":{\"applicationEnablement\" : \"Disabled\"}}",
          //... other nfapps overrides
       ]
  }
}

Nota

  • Ogni voce roleOverrideValues sostituisce il comportamento predefinito di NfAapps.
  • Se in roleOverrideValues vengono trovate più voci di nfConfiguration, il reput NF viene restituito come richiesta non valida.

Come risolvere i problemi di ripristino dello stato precedente in caso di errore

Informazioni sugli stati dei pod

Comprendere i diversi stati dei pod è fondamentale per una risoluzione dei problemi efficace. Di seguito sono riportati gli stati più comuni dei pod:

  • In sospeso: la pianificazione dei pod è in corso da parte di Kubernetes.
  • In esecuzione: tutti i contenitori nel pod sono in esecuzione e integri.
  • Operazione non riuscita: uno o più contenitori nel pod vengono terminati con un codice di uscita diverso da zero.
  • CrashLoopBackOff: un contenitore all'interno del pod si arresta ripetutamente in modo anomalo e Kubernetes non è in grado di riavviarlo.
  • ContainerCreating: la creazione del contenitore è in corso dal runtime del contenitore.

Controllare lo stato e i log dei pod

Per iniziare, controllare lo stato e i log dei pod usando un comando kubectl:

$ kubectl get pods
$ kubectl logs <pod-name>

Il comando get pods elenca tutti i pod nello spazio dei nomi corrente, insieme al relativo stato attuale. Il comando logs recupera i log per un pod specifico, consentendo di esaminare eventuali errori o eccezioni. Per risolvere i problemi di rete, usare i comandi seguenti:

$ kubectl get services
$ kubectl describe service <service-name>

Il comando get services visualizza tutti i servizi nello spazio dei nomi corrente. Il comando fornisce informazioni dettagliate su un servizio specifico, inclusi gli endpoint associati ed eventuali messaggi di errore pertinenti. Se si verificano problemi con i controller di rete virtuali, è possibile utilizzare i comandi seguenti per eseguirne il debug:

$ kubectl get persistentvolumeclaims
$ kubectl describe persistentvolumeclaims <pvc-name>

Il comando "get persistentvolumeclaims" elenca tutte le PVC nello spazio dei nomi corrente. Il comando describe fornisce informazioni dettagliate su una specifica PVC, inclusi lo stato, la classe di archiviazione associata ed eventuali eventi o errori rilevanti.