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.
¿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:
Si accedemos dentro del backup, podemos ver todos los ficheros que se han generado:
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