Questo documento mostra come eseguire il backup e il ripristino dell'archivio etcd per un cluster di amministrazione creato con Google Distributed Cloud (solo software) per VMware. Questo documento
fornisce anche uno script che puoi utilizzare per
eseguire automaticamente il backup dell'archivio etcd di un cluster. Puoi anche
eseguire il backup e il ripristino
di un cluster di amministrazione utilizzando lo strumento a riga di comando gkectl.
Puoi creare un file di backup per il ripristino da disastri imprevisti che potrebbero danneggiare i dati etcd del cluster. Archivia il file di backup in una posizione esterna al cluster e che non dipende dal funzionamento del cluster.
Limitazioni
La procedura di backup e ripristino descritta in questo documento presenta le seguenti limitazioni:
- Questa procedura non esegue il backup dei dati specifici dell'applicazione. 
- Questa procedura non esegue il backup dei PersistentVolume. 
- I workload pianificati dopo la creazione di un backup non vengono ripristinati con quel backup. 
- Non puoi ripristinare un cluster dopo un upgrade non riuscito. 
- Questa procedura non ha lo scopo di ripristinare un cluster eliminato. 
- Non utilizzare questa procedura per i cluster con cluster avanzato abilitato. Fai riferimento a Backup e ripristino di cluster avanzati con gkectl. 
Per ulteriori informazioni sulle limitazioni, vedi Incompatibilità dell'infrastruttura.
Backup di un cluster di amministrazione
Un backup del cluster di amministrazione contiene quanto segue:
- Uno snapshot di etcd del cluster di amministrazione.
- I secret del control plane di amministrazione, necessari per l'autenticazione ai cluster di amministrazione e utente.
Completa i seguenti passaggi prima di creare un backup del cluster di amministrazione:
- Trova l'indirizzo IP esterno del cluster di amministrazione, che viene utilizzato per SSH nel control plane del cluster di amministrazione: - kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] get nodes -n kube-system -o wide | grep master - dove [ADMIN_CLUSTER_KUBECONFIG] è il file kubeconfig del cluster di amministrazione. 
- Crea una chiave SSH denominata - vsphere_tmpdalla chiave privata del cluster di amministrazione.- Puoi trovare la chiave privata nei secret dei cluster di amministrazione: - kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] get secrets sshkeys -n kube-system -o yaml - Nell'output del comando, puoi trovare la chiave privata nel campo - vsphere_tmp.- Copia la chiave privata in - vsphere_tmp:- echo "[PRIVATE_KEY]" | base64 -d > vsphere_tmp; chmod 600 vsphere_tmp 
- Verifica di poter accedere alla shell del control plane amministrativo utilizzando questa chiave privata: - ssh -i vsphere_tmp ubuntu@[EXTERNAL_IP] 
- Esci dal container: - exit 
Backup dell'archivio etcd di un cluster di amministrazione
Per eseguire il backup dell'archivio etcd del cluster di amministrazione:
- Recupera il nome del pod etcd: - kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] get pods \ -n kube-system -l component=etcd,tier=control-plane -ojsonpath='{$.items[*].metadata.name}{"\n"}'
- Accedi alla shell del container kube-etcd del pod: - kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] exec -it \ -n kube-system [ADMIN_ETCD_POD] -- bin/sh- dove [ADMIN_ETCD_POD] è il nome del pod etcd. 
- Dalla shell, utilizza - etcdctlper creare un backup denominato- snapshot.dbnella directory locale:- ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt \ --cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt \ --key=/etc/kubernetes/pki/etcd/healthcheck-client.key snapshot save /tmp/snapshot.db
- Esci dal container: - exit 
- Copia il backup dal contenitore kube-etcd utilizzando - kubectl cp:- kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] cp \ kube-system/[ADMIN_ETCD_POD]:tmp/snapshot.db [RELATIVE_DIRECTORY] - dove [RELATIVE_DIRECTORY] è un percorso in cui vuoi archiviare il backup. 
Backup dei secret di un cluster di amministrazione
Per eseguire il backup dei secret del control plane di amministrazione:
- Utilizza SSH per connetterti al nodo del control plane di amministrazione: - ssh -i vsphere_tmp ubuntu@EXTERNAL_IP - Sostituisci - EXTERNAL_IPcon l'indirizzo IP esterno del control plane amministrativo, che hai annotato in precedenza.
- Facoltativo, ma consigliato: crea una directory di backup locale. - Devi modificare le autorizzazioni dei secret di backup per copiarli dal nodo. - mkdir backup 
- Copia localmente i secret nella directory di backup locale: - sudo cp -r /etc/kubernetes/pki/* backup/ 
- Modifica le autorizzazioni dei segreti di backup: - sudo chmod -R a+rX backup/ 
- Esci dal nodo del control plane di amministrazione: - exit 
- Esegui - scpper copiare la cartella di backup dal nodo del control plane amministrativo:- sudo scp -r -i vsphere_tmp ubuntu@EXTERNAL_IP:backup/ RELATIVE_DIRECTORY - Sostituisci - RELATIVE_DIRECTORYcon un percorso in cui vuoi archiviare il backup.
Ripristino di un cluster di amministrazione
La seguente procedura ricrea un cluster di amministrazione di cui è stato eseguito il backup e tutti i control plane utente che gestiva al momento della creazione dello snapshot etcd.
- Esegui - scpper copiare- snapshot.dbnel control plane amministrativo:- sudo scp -i vsphere_tmp snapshot.db ubuntu@[EXTERNAL_IP]: - dove [EXTERNAL_IP] è l'indirizzo IP esterno del control plane di amministrazione, che hai raccolto in precedenza. 
- Accedi alla shell del control plane di amministrazione: - sudo ssh -i vsphere_tmp ubuntu@[EXTERNAL_IP] 
- Copia - snapshot.db/in- /mnt:- sudo cp snapshot.db /mnt/ 
- Crea una directory temporanea, ad esempio - backup:- mkdir backup 
- Esci dal control plane amministrativo: - exit 
- Copia i certificati in - backup/:- sudo scp -r -i vsphere_tmp [BACKUP_CERT_FILE] ubuntu@[EXTERNAL_IP]:backup/ 
- Accedi alla shell del nodo del control plane di amministrazione: - ssh -i vsphere_tmp ubuntu@[EXTERNAL_IP] - dove [EXTERNAL_IP] è l'indirizzo IP esterno del control plane di amministrazione, che hai raccolto in precedenza. 
- Interrompi - kube-etcde- kube-apiserver.- sudo mv /etc/kubernetes/manifests/etcd.yaml /tmp/etcd.yaml - sudo mv /etc/kubernetes/manifests/kube-apiserver.yaml /tmp/kube-apiserver.yaml 
- Copia i segreti di backup in - /etc/kubernetes/pki/:- sudo cp -r backup/* /etc/kubernetes/pki/ 
- Corsa - etcdctl restore:- ETCDCTL_API=3 sudo etcdctl snapshot restore /backup/snapshot.db sudo rm -r /var/lib/etcd/* sudo mv /default.etcd/member/ /var/lib/etcd/ 
- Riavvia - kube-etcde- kube-apiserver.- sudo mv /tmp/etcd.yaml /etc/kubernetes/manifests/etcd.yaml - sudo mv /tmp/kube-apiserver.yaml /etc/kubernetes/manifests/kube-apiserver.yaml 
- Verifica che - kube-etcde- kube-apiserversiano stati avviati.- sudo crictl ps -a 
- Copia - /etc/kubernetes/admin.confin una cartella- .kubein modo che sia accessibile dalla workstation amministrativa:- mkdir -p [HOME]/.kube - sudo cp -i /etc/kubernetes/admin.conf [HOME]/.kube/config - sudo chown $(id -u):$(id -g) $HOME/.kube/config 
- Esci dal control plane amministrativo: - exit 
- Copia il file kubeconfig appena generato dal nodo di amministrazione: - sudo scp -i vsphere_tmp ubuntu@[EXTERNAL_IP]:[HOME]/.kube/config kubeconfig - sudo chown $(id -u):$(id -g) kubeconfig - dove: - [EXTERNAL_IP] è l'indirizzo IP esterno del control plane di amministrazione.
- [HOME] è la home directory sul nodo amministratore.
 - Ora puoi utilizzare questo nuovo file kubeconfig per accedere al cluster ripristinato. 
Risoluzione dei problemi relativi al ripristino di un cluster di amministrazione
Se si verifica un problema durante il ripristino del cluster amministratore, devi contattare l'Assistenza Google per risolverlo.
Nel frattempo, puoi controllare quanto segue per risolvere ulteriormente il problema.
- Trovare l'ID contenitore etcd - sudo crictl ps -a | grep [ADMIN_ETCD_POD] - dove [ADMIN_ETCD_POD] è il nome del pod etcd. 
- Esamina i log del container etc - sudo crictl logs [ETCD_CONTAINER_ID] - dove [ETCD_CONTAINER_ID] è l'ID del contenitore etcd. 
- Cerca i seguenti messaggi di log di autorizzazione negata, ad esempio - etcdserver: create snapshot directory error:mkdir /var/lib/etcd/member/snap: permission denied
- Se vengono trovati messaggi di autorizzazione negata, aggiorna la proprietà di /opt/data/var/lib/etcd/ - sudo chown -R 2001:2001 /opt/data/var/lib/etcd/ 
- Verifica che - kube-etcde- kube-apiserversiano stati avviati.- sudo crictl ps 
Backup automatico del cluster
Puoi utilizzare lo script fornito qui come esempio di come eseguire automaticamente il backup dei cluster. Tieni presente che il seguente script non è supportato e deve essere utilizzato solo come riferimento per scrivere uno script migliore, più solido e completo. Prima di eseguire lo script, inserisci i valori per le cinque variabili all'inizio dello script:
- Imposta BACKUP_DIRsul percorso in cui vuoi archiviare i backup dei cluster di amministrazione e utente. Questo percorso non deve esistere.
- Imposta ADMIN_CLUSTER_KUBECONFIGsul percorso del file kubeconfig del cluster di amministrazione
- Imposta USER_CLUSTER_NAMESPACEsul nome del cluster utente. Il nome del tuo cluster utente è uno spazio dei nomi nel cluster di amministrazione.
- Imposta EXTERNAL_IPsul VIP che hai riservato per il servizio del control plane di amministrazione.
- Imposta SSH_PRIVATE_KEYsul percorso della tua chiave SSH.
- Se utilizzi una rete privata, imposta JUMP_IPsull'indirizzo IP del jump server della tua rete.
#!/usr/bin/env bash
# Automates manual steps for taking backups of user and admin clusters.
# Fill in the variables below before running the script.
BACKUP_DIR=""                       # path to store user and admin cluster backups
ADMIN_CLUSTER_KUBECONFIG=""         # path to admin cluster kubeconfig
USER_CLUSTER_NAMESPACE=""           # user cluster namespace
EXTERNAL_IP=""                      # admin control plane node external ip - follow steps in documentation
SSH_PRIVATE_KEY=""                  # path to vsphere_tmp ssh private key - follow steps in documentation
JUMP_IP=""                          # network jump server IP - leave empty string if not using private network.
mkdir -p $BACKUP_DIR
mkdir $BACKUP_DIR/pki
# USER CLUSTER BACKUP
# Snapshot user cluster etcd
kubectl --kubeconfig=${ADMIN_CLUSTER_KUBECONFIG} exec -it -n ${USER_CLUSTER_NAMESPACE} kube-etcd-0 -c kube-etcd -- /bin/sh -ec "export ETCDCTL_API=3; etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etcd.local.config/certificates/etcdCA.crt --cert=/etcd.local.config/certificates/etcd.crt --key=/etcd.local.config/certificates/etcd.key snapshot save /tmp/${USER_CLUSTER_NAMESPACE}_snapshot.db"
kubectl --kubeconfig=${ADMIN_CLUSTER_KUBECONFIG} cp ${USER_CLUSTER_NAMESPACE}/kube-etcd-0:tmp/${USER_CLUSTER_NAMESPACE}_snapshot.db $BACKUP_DIR/user-cluster_${USER_CLUSTER_NAMESPACE}_snapshot.db 
# ADMIN CLUSTER BACKUP
# Set up ssh options
SSH_OPTS=(-oStrictHostKeyChecking=no -i ${SSH_PRIVATE_KEY})
if [ "${JUMP_IP}" != "" ]; then
    SSH_OPTS+=(-oProxyCommand="ssh -oStrictHostKeyChecking=no -i ${SSH_PRIVATE_KEY} -W %h:%p ubuntu@${JUMP_IP}")
fi
# Copy admin certs
ssh "${SSH_OPTS[@]}" ubuntu@${EXTERNAL_IP} 'sudo chmod -R a+rX /etc/kubernetes/pki/*'
scp -r "${SSH_OPTS[@]}" ubuntu@${EXTERNAL_IP}:/etc/kubernetes/pki/* ${BACKUP_DIR}/pki/
# Snapshot admin cluster etcd
admin_etcd=$(kubectl --kubeconfig=${ADMIN_CLUSTER_KUBECONFIG} get pods -n kube-system -l component=etcd,tier=control-plane -ojsonpath='{$.items[*].metadata.name}{"\n"}')
kubectl --kubeconfig=${ADMIN_CLUSTER_KUBECONFIG} exec -it -n kube-system ${admin_etcd} -- /bin/sh -ec "export ETCDCTL_API=3; etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt --key=/etc/kubernetes/pki/etcd/healthcheck-client.key snapshot save /tmp/admin_snapshot.db"
kubectl --kubeconfig=${ADMIN_CLUSTER_KUBECONFIG} cp -n kube-system ${admin_etcd}:tmp/admin_snapshot.db $BACKUP_DIR/admin-cluster_snapshot.db
Passaggi successivi
- Eseguire il backup e il ripristino di un cluster utente
- Diagnostica dei problemi relativi ai cluster
- Scopri di più su augur, uno strumento open source per il ripristino di singoli oggetti dai backup di etcd.