L'operatore Stateful High Availability (HA) ti consente di utilizzare l'integrazione integrata di GKE con Persistent Disk a livello di regione per automatizzare e controllare la velocità di failover dei pod StatefulSet. Durante il failover, l'operatore gestisce automaticamente il rilevamento dell'errore del nodo, il distacco di un volume da un nodo non riuscito e garantisce l'attacco 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 regionali come livello di archiviazione. Questi dischi forniscono la replica sincrona dei dati tra due zone in una regione. In caso di errori del nodo o della rete zonale, questa architettura consente ai tuoi carichi di lavoro di eseguire il failover (tramite collegamento forzato) delle repliche allo spazio di archiviazione su un altro nodo in una zona diversa.
Stateful HA Operator ti consente di apportare le seguenti ottimizzazioni:
- Migliora il tempo di ripristino delle applicazioni con una sola replica: se utilizzi una sola replica, puoi utilizzare l'operatore Stateful HA e sostituire lo spazio di archiviazione zonale con lo spazio di archiviazione regionale quando viene eseguito il provisioning dell'applicazione, per aumentare la durabilità e la disponibilità dei dati in caso di errore del nodo.
- Ridurre i costi di networking tra zone: la replica dei dati in più zone può essere costosa per le applicazioni con velocità effettiva elevata. Puoi utilizzare Stateful HA Operator per eseguire l'applicazione in una singola zona, mantenendo un percorso di failover a una zona alternativa adatta al contratto di servizio della tua applicazione.
Limitazioni
- Il tipo di volume
gcePersistentDisk
non è supportato. Utilizza un
PersistentVolume
che utilizza il driver CSI per il disco permanente. - Con un'architettura dell'operatore HA stateful a replica singola, GKE persiste i dati in due zone tramite ilPersistent Diske regionale, ma i dati sono accessibili solo mentre la replica dell'applicazione è integra. Durante un failover, la tua applicazione non sarà temporaneamente disponibile mentre la replica viene riprogrammata su un nuovo nodo integro. Se la tua applicazione ha un obiettivo di tempo di ripristino (RTO) molto basso, ti consigliamo di utilizzare un approccio con più repliche.
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:
- Attiva l'API Google Kubernetes Engine. Attiva l'API Google Kubernetes Engine
- Se vuoi utilizzare Google Cloud CLI per questa attività,
installala e poi
inizializzala. Se hai già installato gcloud CLI, scarica l'ultima versione eseguendo
gcloud components update
.
Requisiti
- Il control plane e i nodi del cluster devono eseguire GKE versione 1.28 o successive.
- Quando utilizzi l'operatore Stateful HA, questo configura automaticamente il tuo StatefulSet collegato in modo che utilizzi i dischi permanenti regionali. Tuttavia, è tua responsabilità assicurarti che i pod siano configurati per utilizzare questi dischi e siano in grado di essere eseguiti in tutte le zone associate allo spazio di archiviazione sottostante.
- Assicurati che la tua applicazione venga eseguita su forme di macchine supportate dal Persistent Disk regionale: E2, N1, N2, N2D.
- Assicurati che il driver CSI per il disco permanente di Compute Engine sia abilitato. Il driver CSI per Persistent Disk è abilitato per impostazione predefinita sui nuovi cluster Autopilot e Standard e non può essere disabilitato o modificato quando utilizzi Autopilot. Se devi aggiungere manualmente il driver CSI Persistent Disk dal tuo cluster, consulta Abilitazione del driver CSI Persistent Disk 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
Configurare e utilizzare l'operatore HA stateful
Segui questi passaggi per configurare l'operatore HA stateful per i tuoi workload stateful:
- Attiva il componente aggiuntivo
StatefulHA
. - Installa una risorsa HighAvailabilityApplication.
- Installa uno StatefulSet.
- Ispeziona la risorsa HighAvailabilityApplication.
Attiva il componente aggiuntivo StatefulHA
Per utilizzare l'operatore HA stateful, il componente aggiuntivo StatefulHA
deve essere abilitato sul tuo cluster.
Cluster Autopilot: GKE attiva automaticamente il componente aggiuntivo
StatefulHA
al momento della creazione del cluster. Se vuoi utilizzare l'operatore HA stateful 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 di gcloud CLI per creare un cluster standard e aggiungi il seguente flag:
--add-on=StatefulHA
. - Cluster Standard esistente: segui le istruzioni di gcloud CLI per aggiornare le impostazioni di un cluster Standard e utilizza il seguente flag per attivare il componente aggiuntivo:
--update-addons=StatefulHA=ENABLED
.
- Creazione di un nuovo cluster: segui le istruzioni di gcloud CLI per creare un cluster standard e aggiungi il seguente flag:
GKE installa automaticamente una StorageClass denominata
standard-rwo-regional
quando il componente aggiuntivo è abilitato.
Installa una risorsa HighAvailabilityApplication
HighAvailabilityApplication
è una risorsa Kubernetes che semplifica le impostazioni di StatefulSet e aumenta la disponibilità dei pod su GKE.
Stateful HA Operator riconcilia le risorse HighAvailabilityApplication
su
GKE.
Nella specifica HighAvailabilityApplication
, devi impostare
HighAvailabilityApplication.spec.resourceSelection.resourceKind
su
StatefulSet
.
Per scoprire come configurare la risorsa HighAvailability, consulta la documentazione di riferimento di HighAvailabilityApplication
.
Vedi il seguente esempio 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 che da StatefulSet.
- APP_NAMESPACE: lo spazio dei nomi dell'applicazione. Questo spazio dei nomi deve essere condiviso sia da HighAvailabilityApplication che da StatefulSet protetto.
In questo esempio:
HighAvailabilityApplication.spec.policy.storageSettings.requireRegionalSettings
è impostato sutrue
. In questo modo viene applicato lo spazio di archiviazione regionale.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. Questo è il timeout per l'eliminazione forzata di un pod dopo che il nodo in cui è in esecuzione è contrassegnato come non raggiungibile.
Crea la risorsa. La risorsa
HighAvailabilityApplication
identifica un StatefulSet con uno spazio dei nomi e un nome corrispondenti.kubectl apply -f stateful-ha-example-resource.yaml
Installa un oggetto StatefulSet
Installa un oggetto StatefulSet. Ad esempio, puoi installare un StatefulSet PostgreSQL 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
StorageClass di StatefulSet in standard-rwo-regional
, che utilizza il Persistent Disk
regionale.
Ispeziona la risorsa HighAvailabilityApplication
Esegui questo comando per verificare che il failover automatico sia abilitato nell'applicazione di esempio:
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
Utilizzare dischi permanenti esistenti
Se utilizzi un Persistent Disk esistente e un PersistentVolume definito staticamente, configura PersistentVolume con force-attach: true
in .spec.csi.volumeAttributes
. Ad esempio:
apiVersion: v1
kind: PersistentVolume
metadata:
name: PV_NAME
spec:
storageClassName: "STORAGE_CLASS_NAME"
capacity:
storage: DISK_SIZE
accessModes:
- ReadWriteOnce
claimRef:
name: PV_CLAIM_NAME
namespace: default
csi:
driver: pd.csi.storage.gke.io
volumeHandle: DISK_ID
fsType: FS_TYPE
volumeAttributes:
force-attach: true