Aumenta la disponibilità delle app stateful con l'operatore HA stateful


L'operatore stateful ad alta disponibilità (HA) consente di utilizzare l'integrazione integrata di GKE con il disco permanente a livello di regione per automatizzare e controllare la velocità del failover dei pod StatefulSet. Durante il failover, l'operatore gestisce automaticamente il rilevamento dell'errore del nodo, scollegando un volume da un nodo in errore e garantendo il collegamento sicuro del volume al nodo di failover.

Perché utilizzare l'operatore HA stateful

Un'architettura stateful comune per ottenere un'alta disponibilità utilizza dischi permanenti a livello di regione come livello di archiviazione. Questi dischi offrono la replica sincrona dei dati tra due zone in una regione. In caso di guasti della rete dei nodi o della zona, questa architettura consente ai carichi di lavoro di eseguire il failover (tramite collegamento forzato) all'archiviazione su un altro nodo in una zona diversa.

L'operatore ad alta disponibilità stateful ti consente di apportare le seguenti ottimizzazioni:

  • Migliora i tempi di ripristino delle applicazioni a replica singola: se utilizzi una sola replica, puoi utilizzare Stateful HA Operator e sostituire lo spazio di archiviazione a livello di zona con Regional Storage quando viene eseguito il provisioning dell'applicazione, per aumentare la durabilità e la disponibilità dei dati in caso di errore del nodo.
  • Riduci i costi di networking tra zone: la replica dei dati in più zone può essere costosa per le applicazioni a velocità effettiva elevata. Puoi utilizzare l'operatore ad alta disponibilità Stateful per eseguire l'applicazione in una singola zona, mantenendo un percorso di failover a una zona alternativa che soddisfi lo SLA (accordo sul livello del servizio) dell'applicazione.

Limitazioni

Con un'architettura di operatore stateful ad alta disponibilità a replica singola, GKE conserva i dati in due zone tramite un Persistent Disk a livello di regione, ma i dati sono accessibili solo quando la replica dell'applicazione è integro. Durante un failover, l'applicazione sarà temporaneamente non disponibile mentre la replica viene ripianificata su un nuovo nodo integro. Se l'applicazione ha un Recovery Time Objective (Recovery Time Objective) molto basso, ti consigliamo di utilizzare un approccio con più repliche.

Prima di iniziare

Prima di iniziare, assicurati di aver eseguito le seguenti attività:

  • Abilita l'API Google Kubernetes Engine.
  • Abilita l'API Google Kubernetes Engine
  • Se vuoi utilizzare Google Cloud CLI per questa attività, installa e initialize gcloud CLI. Se hai già installato gcloud CLI, scarica la versione più recente eseguendo gcloud components update.

Requisiti

  • Il piano di controllo e i nodi del cluster devono eseguire GKE versione 1.28 o successiva.
  • Quando utilizzi l'operatore ad alta disponibilità Stateful, questo configura automaticamente lo StatefulSet collegato per l'utilizzo di dischi permanenti a livello di regione. Tuttavia, devi assicurarti che i pod siano configurati per l'utilizzo di questi dischi e che possano essere eseguiti in tutte le zone associate allo spazio di archiviazione sottostante.
  • Assicurati che l'applicazione venga eseguita su forme di macchina supportate da Persistent Disk a livello di regione: E2, N1, N2, N2D.
  • Assicurati che il driver CSI del disco permanente di Compute Engine sia abilitato. Il driver CSI del disco permanente è abilitato per impostazione predefinita sui nuovi cluster Autopilot e Standard e non può essere disabilitato o modificato quando si utilizza Autopilot. Se devi aggiungere manualmente il driver CSI del disco permanente dal cluster, consulta Abilitazione del driver CSI del disco permanente su un cluster esistente.
  • Se utilizzi un oggetto StorageClass personalizzato, configura il driver CSI Persistent Disk con il provisioner pd.csi.storage.gke.io e questi parametri:
    • availability-class: regional-hard-failover
    • replication-type: regional-pd

Configura e utilizza l'operatore HA Stateful

Segui questi passaggi per configurare l'operatore ad alta disponibilità stateful per i carichi di lavoro stateful:

  1. Attiva il componente aggiuntivo StatefulHA.
  2. Installa una risorsa HighAvailabilityApplication.
  3. Installa un oggetto StatefulSet.
  4. Esamina la risorsa HighAvailabilityApplication.

Attiva il componente aggiuntivo StatefulHA

Per utilizzare l'operatore ad alta disponibilità stateful, il componente aggiuntivo StatefulHA deve essere abilitato nel cluster.

  • Cluster Autopilot: GKE abilita automaticamente il componente aggiuntivo StatefulHA al momento della creazione del cluster. Se vuoi utilizzare Stateful HA Operator per un carico di lavoro esistente, esegui nuovamente il deployment del carico di lavoro su un nuovo cluster Autopilot.

  • Cluster standard:

    • Creazione di un nuovo cluster: segui le istruzioni dell'interfaccia a riga di comando gcloud per creare un cluster Standard e aggiungi il flag seguente: --add-on=StatefulHA.
    • Cluster standard esistente: segui le istruzioni dell'interfaccia a riga della gcloud CLI per aggiornare le impostazioni di un cluster Standard e utilizza il flag seguente per abilitare il componente aggiuntivo: --update-addons=StatefulHA=ENABLED.

Quando il componente aggiuntivo è abilitato, GKE installa automaticamente un oggetto StorageClass denominato standard-rwo-regional.

Installa una risorsa HighAvailabilityApplication

HighAvailabilityApplication è una risorsa Kubernetes che semplifica le impostazioni StatefulSet e aumenta la disponibilità dei pod su GKE. L'operatore ad alta disponibilità stateful riconcilia le risorse HighAvailabilityApplication su GKE.

Nella specifica HighAvailabilityApplication, devi impostare HighAvailabilityApplication.spec.resourceSelection.resourceKind su StatefulSet.

Per informazioni su come configurare la risorsa HighAvailability, consulta la documentazione di riferimento di HighAvailabilityApplication.

Vedi l'esempio seguente per PostgreSQL:

  1. Salva il seguente manifest in un file denominato stateful-ha-example-resource.yaml:

    kind: HighAvailabilityApplication
    apiVersion: ha.gke.io/v1
    metadata:
      name: APP_NAME
      namespace: APP_NAMESPACE
    spec:
      resourceSelection:
        resourceKind: StatefulSet
      policy:
        storageSettings:
          requireRegionalStorage: true
        failoverSettings:
          forceDeleteStrategy: AfterNodeUnreachable
          afterNodeUnreachable:
            afterNodeUnreachableSeconds: 20
    

    Sostituisci quanto segue:

    • APP_NAME: il nome di un'applicazione nel cluster che vuoi proteggere. Questo nome deve essere condiviso sia da HighAvailabilityApplication e StatefulSet.
    • APP_NAMESPACE: lo spazio dei nomi dell'applicazione. Questo spazio dei nomi deve essere condiviso sia da HighAvailabilityApplication sia da StatefulSet protetti.

    In questo esempio:

    • HighAvailabilityApplication.spec.policy.storageSettings.requireRegionalSettings è impostato su true. Questa operazione applica Regional Storage.
    • HighAvailabilityApplication.spec.policy.failoverSettings è impostato su AfterNodeUnreachable. Questo determina come viene attivata l'eliminazione forzata in caso di errore del nodo.
    • HighAvailabilityApplication.spec.policy.failoverSettings.afterNodeUnreachable è impostato su 20. Si tratta del timeout per forzare l'eliminazione di un pod dopo che il nodo in cui è in esecuzione è contrassegnato come non raggiungibile.
  2. Crea la risorsa. La risorsa HighAvailabilityApplication identifica uno StatefulSet con uno spazio dei nomi e un nome corrispondenti.

    kubectl apply -f stateful-ha-example-resource.yaml
    

Installa un oggetto StatefulSet

Installare un oggetto StatefulSet. Ad esempio, puoi installare PostgreSQL StatefulSet utilizzando Helm (Helm è preinstallato con Cloud Shell):

helm install postgresql oci://registry-1.docker.io/bitnamicharts/postgresql \
  --namespace=APP_NAMESPACE \
  --set fullnameOverride=APP_NAME

La risorsa HighAvailabilityApplication modifica automaticamente il valore StorageClass dello StatefulSet in standard-rwo-regional, che utilizza Persistent Disk a livello di regione.

Ispeziona la risorsa HighAvailabilityApplication

Esegui questo comando per verificare che nell'applicazione di esempio sia abilitato il failover automatico:

kubectl describe highavailabilityapplication APP_NAME

L'output dovrebbe essere simile al seguente:

Status:
Conditions:
  Last Transition Time:  2023-08-09T23:59:52Z
  Message:               Application is protected
  Observed Generation:   1
  Reason:                ApplicationProtected
  Status:                True
  Type:                  Protected