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:
- Attiva il componente aggiuntivo
StatefulHA
. - Installa una risorsa HighAvailabilityApplication.
- Installa un oggetto StatefulSet.
- 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
.
- 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:
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:
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 sutrue
. Questa operazione applica Regional Storage.HighAvailabilityApplication.spec.policy.failoverSettings
è impostato suAfterNodeUnreachable
. 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.
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