Kubernetes – Respaldando volúmenes de Rancher Longhorn en Minio.

Kubernetes – Respaldando volúmenes de Rancher Longhorn en Minio.

Longhorn ha estado en beta desde que leí sobre este proyecto hace más de un año, actualmente está en la versión 0.8.1, cumple con lo necesario para usarlo como proveedor de almacenamiento en Kubernetes, al menos en mi caso.

Hace ya un tiempo escribí sobre esta implementación desarrollada por Rancher

https://arielantigua.com/weblog/2019/10/kubernetes-almacenamiento-con-rancher-longhorn-parte2/

En esta ocasión me ha tocado configurar la opción de respaldos ofrecida por Longhorn, actualmente solo respalda los volúmenes provisionados por su engine. Hace unos meses jugué un poco con Velero pero las pruebas no fueron satisfactorias como lo esperaba así que mientras tanto respaldare los volúmenes de Longhorn usando su propia implementación de respaldos.

En Longhorn un respaldo representa el estado de un volumen (un snapshot) en un momento determinado, este es almacenado en un espacio alternativo (backupstore, esto ha creado en Minio) el cual esta localizado fuera del sistema de Longhorn. https://longhorn.io/docs/0.8.0/concepts/backups/

El backupstore puede ser un NFS o una implementación AWS S3 compatible, en mi caso he decidido probar con Minio que es la implementación OpenSource de S3 mas conocida. El servicio de Minio que estoy usando está instalado en mi servidor de unRAID usando Docker y provee alrededor de 7TB que pueden ser usados para respaldos. En este espacio no cubriré como montarse un servidor de Minio, la documentación de Longhorn tiene un pequeño ejemplo de como correr uno en k8s.

Una vez tenemos las credenciales, URL y el nombre del bucket de nuestro Minio, procederemos a crear un Kind:Secret con dicha información.

Minio-secret.yaml :

apiVersion: v1
kind: Secret
metadata:
  name: minio-secret
  namespace: longhorn-system
type: Opaque
data:
  AWS_ACCESS_KEY_ID: bG9uZ2hvcm4tdGVzdC1hY2Nlc3Mta2V5 #
  AWS_SECRET_ACCESS_KEY: bG9uZ2hvcm4tdGVzdC1zZWNyZXQta2V5
  AWS_ENDPOINTS: aHR0cDovL21pbmlvLXNlcnZpY2UuZGVmYXVsdDo5MDAw

https://kubernetes.io/docs/concepts/configuration/secret/#creating-a-secret-manually

Longhorn UI:

En el manager de Longhorn se debe completar la información en Settings->General->Backup Target

Se debe remplazar longhorn por el nombre del bucket creado en Minio, en mi caso se llama longhorn. Ya realizada esta configuración se puede acceder al área de Backup y no recibiremos mensaje de error.

Para crear respaldos recurrentes debemos hacerlo desde el Volumen que queremos respaldar, procedemos al final donde encontraremos:

Hacemos click en Edit:

Agregaremos un nuevo calendario de backup haciendo click en + New

Se habilitará una nueva sección y allí debemos asegurarnos de seleccionar Backup y no snapshot.

En este punto tenemos un respaldo que será creado a las 12:00AM todos los días y almacenara la información en nuestro Minio. Si deseamos cambiar el horario, podemos hacer click en el mismo:

Si entendemos Cron con facilidad, podemos llenar la casilla con la configuración que deseamos, si no, podemos hacer uso de Generate Cron el cual encontré un poco difícil de manipular.

Cuando estemos complacidos con nuestra configuración, hacemos click en Save.

Así de fácil tenemos respaldos con Longhorn.

Para validar que nuestros respaldos están configurados y ejecutándose, lo podemos validar en Volumen.

Se puede apreciar que tenemos tres respaldos agendados y que uno de ellos ya fue ejecutado hace una hora.

En Backups se pueden ver con más detalles estos respaldos, al hacer click en el nombre nos despliegue la cantidad de respaldos disponibles, tamaño y fecha de creación.

Estoy cubierto con la creación del respaldo, para hacer uso de uno de esos respaldos, usaremos la opción de Create Desaster Recovery Volume

Hacemos click en OK

Una vez completado:

Se puede ver que el Volumen fue colocado en el mismo Namespace que tiene asignado el Volumen respaldado, incluso nos dice el tiempo en el que esta copia de seguridad fue creada, así tenemos una idea de la data que estamos recuperando.

Aun me falta mucho por explorar con relación a recuperar la data, estaré investigando mas si existe una manera de solicitar un respaldo desde k8s para que este sea presentado a un Pod sin tener que intervenir desde el manager de Longhor.

Autor: Ariel Antigua

Automation guy with a love for Containers!