Questo documento descrive come utilizzare bmctl per eseguire il backup e il ripristino dei cluster creati con Google Distributed Cloud (solo software) su bare metal. Queste istruzioni si applicano a tutti i tipi di cluster.
Di cosa viene eseguito il backup e di cosa no
La procedura di backup e ripristino di bmctl è progettata per proteggere lo stato del piano di controllo.
Il sistema esegue il backup dei seguenti oggetti:
- Archivio etcd. Tutte le risorse Kubernetes e gli oggetti personalizzati che definiscono la configurazione e lo stato scelto del cluster (ad esempio, specifiche dei pod, deployment e ConfigMap, secret).
- Certificati PKI. Certificati utilizzati per la comunicazione sicura all'interno del cluster.
- File di configurazione e manifest dei nodi. Configurazioni relative ai nodi del cluster.
Il sistema non esegue il backup dei seguenti oggetti:
- Stato di runtime dei pod e dei container live. I processi in esecuzione effettivi e lo stato in memoria delle applicazioni su tutti i nodi (piano dati).
- Spazio di archiviazione dei volumi permanenti. I dati archiviati nei volumi permanenti non sono inclusi. Tutti i volumi creati dal provisioner di volumi locali (LVP) rimangono invariati.
Poiché non viene eseguito il backup dello stato di runtime live, dopo un ripristino, Kubernetes ricrea i pod in base alle specifiche in etcd. Tuttavia, lo stato in memoria esatto delle applicazioni al momento del backup viene perso.
Se hai bisogno di ulteriore assistenza, contatta l'assistenza clienti Google Cloud. Puoi anche consultare Richiedere assistenza per ulteriori informazioni sulle risorse di assistenza, tra cui:- Requisiti per l'apertura di una richiesta di assistenza.
- Strumenti per la risoluzione dei problemi, come la configurazione dell'ambiente, i log e le metriche.
- Componenti supportati.
Eseguire il backup di un cluster
Il comando bmctl backup cluster aggiunge le informazioni del cluster dall'archivio etcd e i certificati PKI per il cluster specificato al cluster in un file tar. L'archivio etcd è l'archivio di backup di Kubernetes per tutti i dati del cluster e contiene tutti gli oggetti Kubernetes e gli oggetti personalizzati necessari per gestire lo stato del cluster. I certificati PKI vengono utilizzati per l'autenticazione tramite TLS. Di questi
dati viene eseguito il backup dal piano di controllo del cluster o da uno dei piani di
controllo per un
deployment ad alta disponibilità (HA)
.
Il file tar di backup contiene credenziali sensibili, tra cui le chiavi del service account e la chiave SSH. Archivia i file di backup in una posizione sicura. Per evitare l'esposizione involontaria dei file, la procedura di backup di Google Distributed Cloud utilizza solo file in memoria.
Esegui regolarmente il backup dei cluster per assicurarti che i dati degli snapshot siano relativamente aggiornati. Modifica la frequenza dei backup in base alla frequenza delle modifiche significative apportate ai cluster.
La versione di bmctl che utilizzi per eseguire il backup di un cluster deve corrispondere alla versione del cluster di gestione.
Se hai installato Node Agent sui cluster, la directory /tmp sul nodo di amministrazione e su tutti i nodi di destinazione deve avere 12 GB di spazio libero. Se non riesci a
modificare le dimensioni della directory /tmp per i nodi di destinazione, consulta
Modificare la capacità di archiviazione locale per i nodi di destinazione.
Se non riesci a modificare le dimensioni della directory /tmp per il nodo di amministrazione, consulta
Modificare la capacità di archiviazione locale per un nodo di amministrazione.
Per eseguire il backup di un cluster:
Assicurati che il cluster funzioni correttamente, con credenziali funzionanti e connettività SSH a tutti i nodi.
Lo scopo della procedura di backup è acquisire il cluster in uno stato di funzionamento noto, in modo da poter ripristinare l'operazione in caso di errore irreversibile.
Utilizza il seguente comando per controllare il cluster:
bmctl check cluster -c CLUSTER_NAME --kubeconfig ADMIN_KUBECONFIGSostituisci quanto segue:
CLUSTER_NAME: il nome del cluster di cui prevedi di eseguire il backup.ADMIN_KUBECONFIG: il percorso del file kubeconfig per il cluster di amministrazione.
Esegui il seguente comando per assicurarti che il cluster di destinazione non sia in uno stato di riconciliazione:
kubectl describe cluster CLUSTER_NAME -n CLUSTER_NAMESPACE --kubeconfig ADMIN_KUBECONFIGSostituisci quanto segue:
CLUSTER_NAME: il nome del cluster di cui eseguire il backup.CLUSTER_NAMESPACE: lo spazio dei nomi per il cluster. Per impostazione predefinita, gli spazi dei nomi dei cluster per Google Distributed Cloud sono il nome del cluster preceduto dacluster-. Ad esempio, se assegni al cluster il nometest, lo spazio dei nomi ha un nome simile acluster-test.ADMIN_KUBECONFIG: il percorso del file kubeconfig per il cluster di amministrazione.
Controlla la sezione
Statusnell'output del comando per leConditionsdi tipoReconciling.Come mostrato nell'esempio seguente, uno stato
Falseper questeConditionsindica che il cluster è stabile e pronto per il backup.... Status: ... Cluster State: Running ... Control Plane Node Pool Status: ... Conditions: Last Transition Time: 2023-11-03T16:37:15Z Observed Generation: 1 Reason: ReconciliationCompleted Status: False Type: Reconciling ...Esegui il seguente comando per eseguire il backup del cluster:
bmctl backup cluster -c CLUSTER_NAME --kubeconfig ADMIN_KUBECONFIGSostituisci quanto segue:
CLUSTER_NAME: il nome del cluster di cui eseguire il backup.ADMIN_KUBECONFIG: il percorso del file kubeconfig del cluster di amministrazione.
Per impostazione predefinita, il file tar di backup viene salvato nella directory dell'area di lavoro (
bmctl-workspace, per impostazione predefinita) sulla workstation di amministrazione. Il file tar ha il nomeCLUSTER_NAME_backup_TIMESTAMP.tar.gz, doveCLUSTER_NAMEè il nome del cluster di cui viene eseguito il backup eTIMESTAMPè la data e l'ora in cui è stato eseguito il backup. Ad esempio, se il nome del cluster ètestuser, il file di backup ha un nome simile atestuser_backup_2006-01-02T150405Z0700.tar.gz.Per specificare un nome e una posizione diversi per il file di backup, utilizza il flag
--backup-file.
Il file di backup scade dopo un anno e la procedura di ripristino del cluster non funziona con i file di backup scaduti.
Ripristinare un cluster
Il ripristino di un cluster da un backup è un'ultima risorsa e deve essere utilizzato quando un cluster ha subito un errore irreversibile e non può essere ripristinato in altro modo. Ad esempio, i dati etcd sono danneggiati o il pod etcd è in un loop di arresto anomalo.
Il file tar di backup contiene credenziali sensibili, tra cui le chiavi del service account e la chiave SSH. Per evitare l'esposizione involontaria dei file, la procedura di ripristino di Google Distributed Cloud utilizza solo file in memoria.
La versione di bmctl che utilizzi per ripristinare un cluster deve corrispondere alla versione del cluster di gestione.
Per ripristinare un cluster:
Assicurati che tutte le macchine dei nodi disponibili per il cluster al momento del backup funzionino correttamente e siano raggiungibili.
Assicurati che la connettività SSH tra i nodi funzioni con le chiavi SSH utilizzate al momento del backup.
Queste chiavi SSH vengono ripristinate nell'ambito della procedura di ripristino.
Assicurati che le chiavi del account di servizio utilizzate al momento del backup siano ancora attive.
Queste chiavi del account di servizio vengono ripristinate per il cluster ripristinato.
Per ripristinare un cluster di amministrazione, ibrido o autonomo, esegui il seguente comando:
bmctl restore cluster -c CLUSTER_NAME --backup-file BACKUP_FILESostituisci quanto segue:
CLUSTER_NAME: il nome del cluster che stai ripristinando.BACKUP_FILE: il percorso e il nome del file di backup che stai utilizzando.
Per ripristinare un cluster utente, esegui il seguente comando:
bmctl restore cluster -c CLUSTER_NAME --backup-file BACKUP_FILE \ --kubeconfig ADMIN_KUBECONFIGSostituisci quanto segue:
CLUSTER_NAME: il nome del cluster che stai ripristinando.BACKUP_FILE: il percorso e il nome del file di backup che stai utilizzando.ADMIN_KUBECONFIG: il percorso del file kubeconfig del cluster di amministrazione.
Al termine della procedura di ripristino, viene generato un nuovo file kubeconfig per il cluster ripristinato.
Al termine del ripristino, segui questi passaggi per verificare che sia andato a buon fine:
Esegui i seguenti comandi per verificare la disponibilità dei nodi e i pod di sistema in esecuzione con il file kubeconfig generato:
Esistono due tipi di pod etcd:
etcd-HOST_NAME, che corrisponde al pod principaleetcdetcd-events-HOST_NAME, che corrisponde al podetcd-events
kubectl get pods -n kube-system --kubeconfig GENERATED_KUBECONFIG kubectl get nodes --kubeconfig GENERATED_KUBECONFIGPer ogni pod etcd, esegui il seguente comando per verificare l'integrità di etcd:
kubectl exec ETCD_POD_NAME -n kube-system \ --kubeconfig GENERATED_KUBECONFIG \ -- /bin/sh -c 'ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \ --cacert=/etc/kubernetes/pki/etcd/ca.crt --key=/etc/kubernetes/pki/etcd/peer.key \ --cert=/etc/kubernetes/pki/etcd/peer.crt endpoint health'Per un membro etcd integro, la risposta dovrebbe essere simile alla seguente:
https://127.0.0.1:2379 is healthy: successfully committed proposal: took = 11.514177msPer ogni pod
etcd-events, esegui il seguente comando per verificare l'integrità dietcd-events:kubectl exec ETCD_EVENTS_POD_NAME -n kube-system \ --kubeconfig GENERATED_KUBECONFIG \ -- /bin/sh -c 'ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2382 \ --cacert=/etc/kubernetes/pki/etcd/ca.crt --key=/etc/kubernetes/pki/etcd/peer.key \ --cert=/etc/kubernetes/pki/etcd/peer.crt endpoint health'Per un membro etcd-events integro, la risposta dovrebbe essere simile alla seguente:
https://127.0.0.1:2382 is healthy: successfully committed proposal: took = 14.308148ms
Risoluzione dei problemi
Se riscontri problemi con la procedura di backup o ripristino, le seguenti sezioni potrebbero aiutarti a risolvere il problema.
Se hai bisogno di ulteriore assistenza, contatta l'assistenza Google.
Esaurimento della memoria durante un backup o un ripristino
Durante la procedura di backup o ripristino potresti ricevere messaggi di errore non molto autoesplicativi o chiari sui passaggi successivi. Se la workstation su cui esegui il comando bmctl non ha molta RAM, potresti non avere memoria sufficiente per eseguire la procedura di backup o ripristino.
Google Distributed Cloud versione 1.13 e successive può utilizzare il parametro --use-disk nel comando di backup. Per conservare le autorizzazioni dei file, questo parametro modifica le autorizzazioni dei file, pertanto l'utente che esegue il comando deve essere un utente root (o utilizzare sudo).
Autorizzazioni mancanti per i file durante il ripristino
Dopo un'attività di ripristino riuscita, l'eliminazione del bootstrap può non riuscire con un messaggio di errore simile al seguente esempio:
Error: failed to restore node config files: sftp: "Failure" (SSH_FX_FAILURE)
Questo errore potrebbe indicare che alcune directory richieste dal ripristino non sono scrivibili.
Google Distributed Cloud versione 1.14 e successive hanno messaggi di errore più chiari sulle directory che devono essere scrivibili. Assicurati che le directory segnalate siano scrivibili e aggiorna le autorizzazioni delle directory in base alle esigenze.
L'aggiornamento della chiave SSH dopo un backup interrompe la procedura di ripristino
Le operazioni correlate a SSH durante la procedura di ripristino potrebbero non riuscire se la chiave SSH viene aggiornata dopo l'esecuzione del backup. In questo caso, la nuova chiave SSH diventa non valida per la procedura di ripristino.
Per risolvere il problema, puoi aggiungere temporaneamente di nuovo la chiave SSH originale, quindi eseguire il ripristino. Al termine della procedura di ripristino, puoi ruotare la chiave SSH.
Impossibile creare un backup per un nodo Node Agent
Se utilizzi Node Agent e ricevi un errore che indica che la creazione del backup non riesce a creare un file di archivio, simile a questo:
I0508 15:29:36.831790 657351 backup_cluster.go:255] Retrying backup node: 128.187.102.133, due to error: failed receive chunk data: rpc error: code = Unknown desc = archiver.CreateArchiveWithList
failed: failed to create archive file: failed to copy data from file: var/lib/etcd-events/member/snap/db, file size: 26136576, copy bytes: 12478464,
error: write /tmp/uploadFileTemp1561164777: no space left on device
Verifica che nella directory /tmp sul nodo di amministrazione e su tutti i nodi di destinazione siano presenti 12 GB di spazio libero. Se non riesci a modificare le dimensioni della directory /tmp per i tuoi
nodi di destinazione, consulta Aumentare la capacità di archiviazione locale per i backup di Node Agent.
Dopo aver verificato che nella directory /tmp sul nodo di amministrazione e su tutti i nodi di destinazione siano presenti 12 GB di spazio libero, riprova a eseguire il backup.