Migrar Blobfuse (v1) a Blobfuse2

Introducción

La semana pasada tuve que resolver un caso de un cliente en el que necesitaba migrar de BlobFuse (v1) a Blobfuse2. Busqué en la web y no encontré mucho contenido al respecto, así que decidí hacer una publicación sobre ello.

No es una tarea muy difícil, pero puede ser un poco complicada si estás administrando muchas unidades de Mount en tu VM/VMs.

La documentación oficial (repositorio oficial de GitHub) no nos da mucha información, solo la herramienta:

Blobfuse2 mountv1

Para facilitar la migración, MS creó una herramienta para montar con los archivos de configuración de v1 y migrar de blobfuse a blobfuse2 sin problemas.

Ejecuta el siguiente comando con los mismos parámetros CLI que usarías con blobfuse:

blobfuse2 mountv1 <MOUNT_PATH> --config-file=<BLOBFUSE_V1_CONFIG_PATH> <BLOBFUSE_V1_CLI_PARAMETERS> --output-file=<OPTIONAL_DESIRED_BLOBFUSE2_CONFIG_PATH>

Esto nos permitirá montar Blobfuse2 con los antiguos archivos de configuración de Blobfuse (v1) y, lo más interesante, exportar el nuevo archivo de configuración v2 usando la opción — output-file=.

Consideraciones

Un desafío surge porque las ubicaciones de los archivos de configuración de Blobfuse v1, las rutas tmp y las rutas de montaje se definen individualmente para cada unidad de montaje. Sus configuraciones dependen de la configuración inicial establecida por el administrador que configuró los montajes de blobfuse por primera vez.

Prerrequisitos

Primero que nada, necesitamos evaluar y auditar las rutas de configuración actuales de blobfuse v1:

  • Ruta de montaje.
  • Ruta tmp.
  • Ruta del archivo de configuración.

Es MUY recomendable estandarizar esto para que cada Mount Unit en cada VM para que todos funcionen con las mismas rutas. La estandarización es clave para evitar perder tiempo en el futuro. Por ejemplo, podrías estandarizar las rutas de esta manera:

  • Ruta de montaje: /srv/[nombre-del-montaje]
  • Ruta tmp: /mnt/resources/blobfusetmp/[nombre-temporal-para-el-contenedor]
  • Ruta del archivo de configuración: /root/[nombre-del-archivo-de-configuración-del-contenedor.yaml].

Todos los montajes en las VMs deberían tener las mismas rutas.

¡Ahora vamos a migrar!

Laboratorio

En este caso de laboratorio de pruebas, tenemos el siguiente escenario:

  • 1 VM ubuntu (ubuntu-test).
  • 3 unidades blobfuse (v1) mapeadas a 1) contenedor-bronce, 2) contenedor-oro y 3) contenedor-plata.
  • 1 almacenamiento blob de Azure con los contenedores 1) contenedor-bronce, 2) contenedor-oro y 3) contenedor-plata.
  • El acceso y la autorización desde las VMs a los contenedores SA se realizan a través de Identidades de Sistema Gestionado (MSI).

Primero auditamos las rutas de montaje, rutas tmp y rutas de archivos de configuración:

Rutas de montaje:

  • /srv/bronce
  • /srv/plata
  • /srv/oro

Rutas tmp:

  • /mnt/resource/blobfusetmp/bronce
  • /mnt/resource/blobfusetmp/plata
  • /mnt/resource/blobfusetmp/oro

Rutas de archivos de configuración:

  • /root

Instalar Blobfuse2:

Para instalar Blobfuse2, sigue estos pasos:

Descargar paquete:

  • En Ubuntu:
wget https://packages.microsoft.com/config/ubuntu//packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt-get update
  • En RHEL:
sudo rpm -Uvh https://packages.microsoft.com/rhel//prod/blobfuse2--RHEL--x86_64.rpm

Instalar paquete:

En Ubuntu 20.04 y superior:

sudo apt-get install fuse3 blobfuse2

En Ubuntu 18.04:

sudo apt-get install fuse blobfuse2

En RedHat/CentOS:

sudo yum install fuse3 blobfuse2

En SUSE:

sudo zypper install fuse3 blobfuse2

Desmontar y montar:

Con este enfoque, primero necesitamos desmontar blobfuse (v1) y montar Blobfuse2 exportando el archivo de configuración modificado.

nano mig-bf-1-to-2.sh
chmod +x mig-bf-1-to-2.sh

Vamos a crear un script “mig-bf-1-to-2.sh” para ejecutar estos pasos y no tener tiempo de inactividad:

#!/bin/bash

# Exit on any command failure
set -e

# Define a function that acts as a "catch" block
error_handler() {
    echo "An error occurred. Cleaning up and exiting."
    # You can add any cleanup code here if needed
    exit 1
}

# Trap any errors (catch)
trap error_handler ERR

mkdir /root/bf2-config

fusermount -u /srv/bronze
blobfuse2 mountv1 /srv/bronze --tmp-path=/mnt/resource/blobfusetmp/bronze --config-file=/root/config-bronze.cfg -o attr_timeout=240 -o entry_timeout=240 -o negative_timeout=120 -o allow_other --output-file=/root/bf2-config/config-bronze.yaml

fusermount -u /srv/silver
blobfuse2 mountv1 /srv/silver --tmp-path=/mnt/resource/blobfusetmp/silver --config-file=/root/config-silver.cfg -o attr_timeout=240 -o entry_timeout=240 -o negative_timeout=120 -o allow_other --output-file=/root/bf2-config/config-silver.yaml

fusermount -u /srv/gold
blobfuse2 mountv1 /srv/gold --tmp-path=/mnt/resource/blobfusetmp/gold --config-file=/root/config-gold.cfg -o attr_timeout=240 -o entry_timeout=240 -o negative_timeout=120 -o allow_other --output-file=/root/bf2-config/config-gold.yaml

Ejecuta el script:

Crear nuevo script de montaje

Ahora podemos crear (o modificar si ya existe) un script de montaje para que monte todo con una única ejecución del script: mount-blobfuse.sh

                                                                                                                                                                                                                                                           mkdir /srv/bronze
mkdir /srv/silver
mkdir /srv/gold
mkdir /mnt/resource/blobfusetmp/bronze -p
mkdir /mnt/resource/blobfusetmp/silver -p
mkdir /mnt/resource/blobfusetmp/gold -p

#Blobfuse v1 mounting steps:

#blobfuse /srv/bronze --tmp-path=/mnt/resource/blobfusetmp/bronze --config-file=/root/config-bronze.cfg -o attr_timeout=240 -o entry_timeout=240 -o negative_timeout=120 -o allow_other
#blobfuse /srv/silver --tmp-path=/mnt/resource/blobfusetmp/silver --config-file=/root/config-silver.cfg -o attr_timeout=240 -o entry_timeout=240 -o negative_timeout=120 -o allow_other
#blobfuse /srv/gold --tmp-path=/mnt/resource/blobfusetmp/gold --config-file=/root/config-gold.cfg -o attr_timeout=240 -o entry_timeout=240 -o negative_timeout=120 -o allow_other

#Blobfuse2 mounting steps:

blobfuse2 /srv/bronze --tmp-path=/mnt/resource/blobfusetmp/bronze --config-file=/root/bf2-config/config-bronze.yaml -o attr_timeout=240 -o entry_timeout=240 -o negative_timeout=120 -o allow_other
blobfuse2 /srv/silver --tmp-path=/mnt/resource/blobfusetmp/silver --config-file=/root/bf2-config/config-silver.yaml -o attr_timeout=240 -o entry_timeout=240 -o negative_timeout=120 -o allow_other
blobfuse2 /srv/gold --tmp-path=/mnt/resource/blobfusetmp/gold --config-file=/root/bf2-config/config-gold.yaml -o attr_timeout=240 -o entry_timeout=240 -o negative_timeout=120 -o allow_other

Cuando lo ejecutes:

Bueno, esta es la forma que encontré para hacer este proceso de forma controlada. Si alguien encuentra una forma más automatizada de hacerlo, por favor, avísenme en los comentarios.


Posted

in

, , ,

by

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.