Backing Up and Restoring etcd
Kubernetes almacena los estados declarados y observados del clúster en el almacén de clave-valor distribuido etcd. Es importante contar con un plan de respaldo que pueda ayudarlo a restaurar los datos en caso de corrupción de datos. La copia de seguridad de los datos debe realizarse periódicamente en períodos cortos de tiempo para evitar perder la menor cantidad posible de datos históricos.
El proceso de copia de seguridad almacena los datos ectd en un llamado archivo de instantánea. Este archivo de instantánea se puede utilizar para restaurar los datos etcd en cualquier momento. Puede cifrar el archivo de instantánea para proteger la información confidencial. La herramienta etcdctl es fundamental para el procedimiento de copia de seguridad y restauración.
Como administrador, deberá comprender cómo utilizar la herramienta para ambas operaciones. Es posible que deba instalarlo etcdctl si aún no está disponible en el nodo del plano de control. Puede encontrar instrucciones de instalación en el repositorio de GitHub de etcd.
https://github.com/etcd-io/etcd/releases

Según la topología de su clúster, su clúster puede constar de una o varias instancias de etcd. Consulte la sección “Configuración del clúster de alta disponibilidad” para obtener más información sobre cómo configurarlo. Las siguientes secciones explican la configuración de un clúster etcd de un solo nodo.
Puede encontrar instrucciones adicionales sobre el proceso de copia de seguridad y restauración para clústeres etcd de varios nodos en la documentación oficial de Kubernetes.
https://kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-etcd/
Backing Up etcd
Abra un shell interactivo en la máquina que aloja etcd usando el comando ssh. El siguiente comando apunta al nodo del plano de control llamado kube-control-plane que ejecuta Ubuntu 18.04.5 LTS:
$ ssh kube-control-plane…
Verifique la versión instalada de etcdctl para verificar que la herramienta se haya instalado. En este nodo, la versión es 3.4.14:
$ etcdctl version
etcdctl version: 3.4.14API version: 3.4
Etcd se implementa como un pod en el espacio de kube-system nombres. Inspeccione la versión describiendo el Pod. En el siguiente resultado, encontrará que la versión es 3.4.13-0:
$ kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE…etcd-kube-control-plane 1/1 Running 0 33m…
$ kubectl describe pod etcd-kube-control-plane -n kube-system
…Containers: etcd: Container ID: docker://28325c63233edaa94e16691e8082e8d86f5e7da58c0fb54 \ d95d68dec6e80cf54 Image: k8s.gcr.io/etcd:3.4.3-0 Image ID: docker-pullable://k8s.gcr.io/etcd@sha256:4afb99b4690b418 \ ffc2ceb67e1a17376457e441c1f09ab55447f0aaf992fa646…
El mismo comando describe revela la configuración del servicio etcd. Busque el valor de la opción –listen-client-urls para la URL del punto final.
En el siguiente resultado, el host es localhost y el puerto es 2379. El certificado del servidor se encuentra en /etc/kubernetes/pki/etcd/server.crt definido por la opción –cert-file.
El certificado de CA se puede encontrar en /etc/kubernetes/pki/etcd/ca.crt especificado por la opción –trusted-ca-file:
$ kubectl describe pod etcd-kube-control-plane -n kube-system
…Containers: etcd: … Command: etcd … –cert-file=/etc/kubernetes/pki/etcd/server.crt –key-file=/etc/kubernetes/pki/etcd/server.key –listen-client-urls=/etc/kubernetes/pki/etcd/server.key –trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt…
Use el comando etcdctl para crear la copia de seguridad con la versión 3 de la herramienta. Para un buen punto de partida, copie el comando de la documentación oficial de Kubernetes .
https://kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-etcd/#built-in-snapshot
Proporcione las opciones de línea de comandos obligatorias –cacert, –certy –key. La opción –endpoints no es necesaria ya que estamos ejecutando el comando en el mismo servidor que etcd. Después de ejecutar el comando, el archivo /tmp/etcd-backup.db ha sido creado:
$ sudo ETCDCTL_API=3 etcdctl –cacert=/etc/kubernetes/pki/etcd/ca.crt \ –cert=/etc/kubernetes/pki/etcd/server.crt \ –key=/etc/kubernetes/pki/etcd/server.key \ snapshot save /opt/etcd-backup.db
{“level”:”info”,”ts”:1625860312.3468597, \”caller”:”snapshot/v3_snapshot.go:119″, \”msg”:”created temporary db file”,”path”:”/opt/etcd-backup.db.part”}{“level”:”info”,”ts”:”2021-07-09T19:51:52.356Z”, \”caller”:”clientv3/maintenance.go:200″, \”msg”:”opened snapshot stream; downloading”}{“level”:”info”,”ts”:1625860312.358686, \”caller”:”snapshot/v3_snapshot.go:127″, \”msg”:”fetching snapshot”,”endpoint”:”127.0.0.1:2379″}{“level”:”info”,”ts”:”2021-07-09T19:51:52.389Z”, \”caller”:”clientv3/maintenance.go:208″, \”msg”:”completed snapshot read; closing”}{“level”:”info”,”ts”:1625860312.392891, \”caller”:”snapshot/v3_snapshot.go:142″, \”msg”:”fetched snapshot”,”endpoint”:”127.0.0.1:2379″, \”size”:”2.3 MB”,”took”:0.045987318}{“level”:”info”,”ts”:1625860312.3930364, \”caller”:”snapshot/v3_snapshot.go:152″, \”msg”:”saved”,”path”:”/opt/etcd-backup.db”}Snapshot saved at /opt/etcd-backup.db
Salga del nodo usando el exit comando:
$ exit
logout…
Restoring etcd
Creó una copia de seguridad de etcd y la almacenó en un espacio seguro. No hay nada más que hacer en este momento.
En el caso de un escenario de desastre, los datos en etcd se corrompen o la máquina que administra etcd experimenta una falla de almacenamiento físico. Ese es el momento en el que desea extraer la copia de seguridad de etcd para restaurarla.
Para restaurar etcd desde la copia de seguridad, use el etcdctl snapshot restore comando. Como mínimo, proporcione la opcion –data-dir de línea de comandos. Aquí, estamos usando el directorio de datos /tmp/from-backup.
Después de ejecutar el comando, debería poder encontrar la copia de seguridad restaurada en el directorio /var/lib/from-backup:
$ sudo ETCDCTL_API=3 etcdctl –data-dir=/var/lib/from-backup snapshot restore /opt/etcd-backup.db
$ sudo ls /var/lib/from-backup
Edite el manifiesto YAML del pod etcd , que se puede encontrar en /etc/kubernetes/manifests/etcd.yaml.
Cambie el valor del atributo spec.volumes.hostPath con el nombre etcd-data del valor original /var/lib/etcd a /var/lib/from-backup:
$ cd /etc/kubernetes/manifests/
$ sudo vim etcd.yaml
…spec:
volumes: …
– hostPath:
path: /var/lib/from-backup
type: DirectoryOrCreate
name: etcd-data…
El pod etcd-kube-control-plane se volverá a crear y apunta al directorio de copia de seguridad restaurado:
$ kubectl get pod etcd-kube-control-plane -n kube-system
NAME READY STATUS RESTARTS AGEetcd-kube-control-plane 1/1 Running 0 5m1s
En caso de que el Pod no pase al estado “En ejecución”, intente eliminarlo manualmente con el comando:
kubectl delete pod etcd-kube-control-plane -n kube-system
Salga del nodo usando el comando exit:
$ exit
logout…





