Velero: Copias de seguridad en Kubernetes

Seguimos hablando sobre Kubernetes, en este caso vamos a ver una herramienta para realizar copias de seguridad de los recursos del clúster y los volúmenes, llamada Velero

Con esta herramienta vamos a poder realizar copias de seguridad de nuestro clúster y poder restaurarlas en caso de pérdida. También permite migrar los servicios entre diferentes entornos de clúster, o bien replicar los entornos de producción en desarrollo y calidad, y a la inversa.

Logo oficial de Velero

¿Cómo funciona Velero?

Esta herramienta consta de dos partes, la primera un servidor que se ejecuta en el clúster de Kubernetes. La segunda parte es un cliente de línea de comandos, que se ejecuta de forma local.

Velero soporta diferentes proveedores en los que almacenar las copias de seguridad, nosotros vamos a utilizar MinIO, del que hablamos hace unos días y como os comenté es compatible con el almacenaje de objetos y con la API de S3 de AWS

Recordar que el entorno con Kubernetes, en mi caso, lo tengo montado con K3 en mi proveedor de confianza Clouding.io, ubicado en mi ciudad, Barcelona.

Instalación de Velero

Lo primero que haremos es conectarnos vía SSH al servidor «master» del entorno, y desde allí realizamos estos pasos:

# Nos descargamos la última versión
wget https://github.com/vmware-tanzu/velero/releases/download/v1.9.2/velero-v1.9.2-linux-amd64.tar.gz
# Descomprimimos
tar xvf velero-v1.9.2-linux-amd64.tar.gz
# Movemos el fichero binario
mv velero-v1.9.2-linux-amd64/velero /usr/local/bin
# Borramos los ficheros que nos hemos descargado y que ya no son necesarios
rm -rf /home/operador/velero*

De esta manera ya podemos empezar a trabajar con la herramienta.

Para poder trabajar con MinIO debemos crear un fichero con las credenciales:

vi minio.credentials

Con el siguiente contenido, que debemos adaptar a nuestros datos:

[default]
aws_access_key_id=usuario
aws_secret_access_key=password

A continuación, guardamos y salimos del fichero.

Ahora debemos desplegar Velero en nuestro Kubernetes.

De la siguiente manera:

velero install --use-restic \
        --default-volumes-to-restic \
        --provider aws \
        --plugins velero/velero-plugin-for-aws:v1.4.0 \
        --bucket backup \
        --secret-file ./minio.credentials \
        --use-volume-snapshots=false \
        --backup-location-config region=minio-dev,\
         s3ForcePathStyle="true",\
         s3Url=http://ip-del-servidor:9000,\
         publicUrl=http://ip-del-servidor:9000

Yo he creado un fichero ejecutable en bash, para que me quede todo más claro a la hora de modificar los parámetros. También he visto por Internet que hay gente que ha creado un fichero Dockerfile y luego un docker-compose, pero aquí, ya sabéis, para gustos colores.

Voy a intentar cada uno de los parámetros:

  • Al principio indicamos que vamos a utilizar la herramienta «restic» para realizar las copias de seguridad. Para más info: restic.net
  • En la segunda línea le indicamos que utilizamos los volúmenes para restic.
  • A continuación le decimos que proveedor será «aws»
  • Usamos el plugin de velero para aws
  • Indicamos el bucket que tengamos definido en MinIO, en mi caso se llama «backup»
  • En la línea siguiente indicamos el nombre del fichero de las credenciales.
  • Luego le decimos que no queremos habilitar las instantáneas de los volúmenes.
  • Ya al final le indicamos los datos para conectarse a MinIO

Tras desplegar, podemos ver los datos del despliegue con:

kubectl logs deployment/velero -n velero

Si todo ha ido bien ya tendríamos que poder ver los «pods» dentro del «namespace»

operador@servmaster:/home/operador# kubectl get pods -n velero
NAME                      READY   STATUS    RESTARTS   AGE
restic-2ndv6              1/1     Running   0          47m
restic-7l9f9              1/1     Running   0          47m
restic-9fnqd              1/1     Running   0          47m
velero-5787bdbbc6-zztxx   1/1     Running   0          47m

Ya es hora de empezar a trabajar con las copias de seguridad.

Ejemplos de copias de seguridad con Velero

Antes de nada vamos a hace una copia de seguridad básica, por ejemplo:

velero backup create copia-de-seguridad-test-30092022

Con el resultado al lanzar el comando:

operador@servmaster:/home/operador# velero backup create copia-de-seguridad-test-30092022
Backup request "copia-de-seguridad-test-30092022" submitted successfully.

Si os preguntáis si efectivamente se ha generado la copia, solo hemos de consultar MinIO, desde su interfaz web:

Listado de backups en MinIO

Si accedemos dentro del backup, podemos ver todos los ficheros que se han generado:

Listamos los ficheros generados en el backup

También podemos indicar que queremos realizar la copia de uno o más espacios de nombres:

velero backup copia-de-seguridad-namespace-test-30092022 --include-namespaces namespace-uno,namespace-dos,namespace-tres

O bien,  hacer cosas como indicar que haga una copia de seguridad de todos los espacios de nombres, menos de uno o dos:

velero backup copia-de-seguridad-namespace-test-30092022 --exclude-namespaces namespace-uno,namespace,dos

Con esta herramienta se pueden hacer muchas más cosas, como por ejemplo programas copias de seguridad, pero eso lo veremos en la siguiente entrada, que esta ya ha quedado un poco larga.

Espero que os haya sido interesante. Quiero agradecer a mi compañero Jordi G. , la información sobre esta herramienta y la ayuda que me ha prestado, para resolver algunas dudas.

Para cualquier cosa podéis consultar la documentación oficial en Velero Documentation