DEV Community

Wiluey Sousa
Wiluey Sousa

Posted on • Updated on

BlobFuse - Azure Blob Storage como Filesystem no Linux

Fala comunidade!

Depois de um tempo ausente, estamos de volta com força total e sem hiatos!

E nada melhor do que tirar a poeira da mobília com um post bacana sobre Infra Azure, concordam?

Bom, vamos lá!

Antes de mais nada, a primeira coisa a ser entendida antes de entrarmos no técnico é: Já ouviram falar sobre Blobfuse?

Blobfuse é um driver utilizado em sistemas operacionais baseados em Linux (diferentes distros) que simula um filesystem que aponta direto para um blob storage do Azure, ou seja, através do driver, o Blobfuse simula um diretório virtual.

O Blobfuse dá suporte à instalação nas seguintes distros:

  • Ubuntu: 16, 4, 18, 4 e 20, 4
  • RHELversions: 7.5, 7.8, 8.0, 8.1, 8.2
  • CentOS: 7.0, 8.0
  • Debian: 9.0, 10.0
  • SUSE: 15
  • OracleLinux 8.1

Mas will, não seria mais fácil apontar diretamente para um File Share dentro do meu Blob Storage?

Depende!

Por dois motivos:

  • File Share tem o limite de 5TB, parece muito, mas tratando-se de armazenamento, acreditem, não é!
  • Exige o uso do protoclo SMB 3.0 para ser usado nas distros listadas acima.

Então avalie bem a sua necessidade.

Agora que já entendemos o Blobfuse, vamos à prática?

Primeiramente vamos logar no portal do Azure (www.portal.azure.com) e abrir o Cloud Shell para executarmos comandos na linguagem Powershell (imagem abaixo).

Alt Text

Obs: Se preferir, pode fazer isso direto pela console do Powershell ISE também, basta apenas logar na sua subscription.

Daqui pra frente nós vamos usar scripts powershell para a criação da Sorage Account, CLI para a criação da VM e o Packer para o deploy da imagem.

Logado no Powershell, execute os comandos abaixo:
Listar as suas Subscriptions (caso tenha mais de uma)

  • Get-AzSubscription

Selecionar o ID da sua Subscription e insira-o como parâmetro

  • Set-AzContext -Subscription "xxxxx-xxxxx-xxxxxxxxxxxxxxxx"

Crie seu Resource Group (RG)

  • $resourceGroup = "BlobFuseWiluey" (Aqui crie o nome que quiser)
  • $location = "eastus"
  • New-AzResourceGroup -Name $resourceGroup -Location $location

Crie a Storage Account

  • $storageAccount = New-AzStorageAccount -ResourceGroupName $resourceGroup -Name "blobfusestoragewill" -SkuName Standard_LRS -Location $location
  • $ctx = $storageAccount.Context

Crie o Container Storage

  • $containerName = "blobfuse-will-azure"
  • New-AzStorageContainer -Name $containerName -Context $ctx -Permission blob

Aqui finalizamos a primeira etapa, já temos nossa Storage Account criada.

Agora vamos brincar um pouco com DevOps e gerar a imagem da nossa máquina virtual com o Packer.

Não conhece o Packer?

O Packer é um dos produtos da HashiCorp (como o Terraform), criado para gerar e gerenciar imagens de forma automatizada.
O Packer é capaz de construir a imagem de sua aplicação, banco de dados ou sistema operacional utilizando os seus mesmos playbooks e scripts inseridos no Userdata.

Uma vantagem do Packer é possibilidade de criar imagens multiplataforma com o mesmo código, uma vez que ele é compatível com AWS, Microsoft Azure, Google Cloud, VMWare, Docker, Digital Ocean, dentre outras.
O Packer não substitui os seus configurations managers, mas faz uso deles para provisionar as imagens criadas.

Agora vamos lá!

Altere o seu Cloud Shell agora para usar o Bash, onde vamos executar scripts CLI (imagem abaixo).

Alt Text

Feito isso, vamos "setar" a subscription correta, não vamos provisionar o recurso no lugar errado, certo?

Execute o comando abaixo para listar suas Subscriptions:

  • az account show

"Sete" a Subscription:

  • az account set --subscription "xxxxxxx-xxxxxxxxx-xxxxxxxxxxxxxx"

Como não vamos criar uma VM para servir como nosso configuration Manager, vamos usar o módulo nativo do Azure.
Porém para usar o módulo nativo, e necessário gerar uma role de acesso (RBAC) para gerar os códigos que serão usados no script para autenticação.

Execute o comando abaixo e guarde os ID's gerados

  • az ad sp create-for-rbac --query "{ client_id: appId, client_secret: password, tenant_id: tenant }"

Com o comando abaixo você pega o ID da Subscription

  • az account show --query "{ subscription_id: id }"

Obs: Não transfira, ceda ou mostre publicamente esse ID para NINGUÉM!

Basicamente os comandos acima lhe trarão os IDs dos parametros abaixo:

  • "client_id": "xxxxx-xxxxxxxx-xxxxxxxxxxxxxxx"
  • "client_secret": "xxxxx-xxxxxxxx-xxxxxxxxxxxxxxx"
  • "tenant_id": "xxxxx-xxxxxxxx-xxxxxxxxxxxxxxx"
  • "subscription_id": "xxxxx-xxxxxxxx-xxxxxxxxxxxxxxx"

Agora com os IDs em mãos, vá para o Cloud Shell (em modo BASH) e gere o JSON com as configuraçõe da nossa imagem.

O script com o JSON está no meu GitHub, pegue-o no link abaixo:

Agora que possui o JSON, execute o comando o comando abaixo (no BASH):

  • vi RedHat7.json (um novo arquivo será criado)
  • Tecle "I"(insert) e cole o JSON dentro deste arquivo novo que foi aberto com o "vi"
  • Tecle ESC seguido de :wq (para salvar e sair)

Agora com o JSON criado, vamos chamado o módulo do PACKER para gerar a nossa imagem.

Execute o comando abaixo:

  • packer build RedHat7.json

Uma imagem parecida vai informar o status do Deploy:
Alt Text

O tempo de geração da imagem leva em torno de 10 a 12 minutos.

Quando o processo finalizar, teremos o output abaixo:
Alt Text

E indo até o Resource Group, você verá o recurso provisionado:
Alt Text

Alt Text

Repare que em "Data Disks" não há nenhuma LUN ou LVM montado. Isso foi proposital para que a minha imagem fosse a mais "limpa" possível.
E o Blobfuse vai fazer esse papel depois...

Agora é o momento de criarmos nossa máquina virtual Linux Red Hat 7 a partir da nossa imagem.

No Cloud Shell (em modo BASH), execute o comando abaixo:

  • az vm create --resource-group BlobFuseWiluey --name WilueyVmLinux --image PackerImageBlobfuse --admin-username wiluey --admin-password "xxxxxx" (senha forte aqui)

Após o deploy da nova VM criada a partir da nossa imagem, teremos um output confirmando o IP Publico atribuído a ela (conforme imagem):
Alt Text

Agora vamos testar/validar o acesso à nossa máquina virtual, execute o comando:

  • ssh seuuser@seuippublico

O output:
Alt Text

Sucesso!

Agora a etapa final, criar o Blobfuse e fazer o linux reconhecer nosso container como um filesystem.

A imagem abaixo comprova que nossa distro possui apenas os pontos de montagem padrão (o "barra").
Alt Text

Logados no Linux, o primeiro passo é criar as variáveis de ambiente globais, utilizando o comando export:

  • export AZURE_STORAGE_ACCOUNT=nome_da_sua_storage_account
  • export AZURE_STORAGE_ACCESS_KEY=a_sua_chave_de_acesso

Não sabe onde encontra isso?
Vem comigo!

Execute o comando abaixo:

  • az storage account keys list -g BlobFuseWiluey -n blobfusestoragewill

Obviamente alterando os parâmetros para os seus, onde "-g" é o nome do Resource Group e "-n" é o nome da Storage Account.

O output:
Alt Text

Na variável de ambiente, basta inserir o valor retornado em "value" da Key1.

Criadas as variáveis, agora vamos criar os diretórios que serão nossos binários.

Primeiramente eleve seus privilégios:

  • sudo su

Depois execute os comandos abaixo (inserindo o nome que quiser):

  • cd /home/wiluey
  • mkdir blobfuse-mount-will/
  • chown wiluey:wiluey blobfuse-mount-will/

Acima estamos autorizando o usuário a acessar nosso filesystem, afinal não podemos usar o root o tempo todo, até mesmo por questões de segurança.

Execute a instalação do Blobfuse:

Crie uma pasta temporária vazia:

  • mkdir /blobfuse-mount-will-tmp

Agora vamos fazer o "mount" do nosso diretório com o Blobfuse:

  • blobfuse /home/wiluey/blobfuse-mount-will --container-name=blobfuse-will-azure --tmp-path=/blobfuse-will-tmp

Vamos validar se o filesystem foi devidamente reconhecido pelo SO:
Alt Text

Sucesso!

Vamos fazer o teste e copiar algum arquivo para nosso container storage, o mesmo deve aparecer no Linux, certo?

Existem diversas maneiras, mas pra ganharmos tempo, vou fazer o upload via Portal.

Fazendo uma primeira verificação, constatamos que o volume está vazio.
Alt Text

Navegue até seu Container Storage, selecione um arquivo qualquer da sua máquina e faça o upload do mesmo para o Azure conforme imagem abaixo:
Alt Text

Arquivo encontra-se no container após o upload:
Alt Text

Vamos ver se ele está na VM, dentro do nosso filesystem?
Alt Text

Voilà!

Tudo certo, nosso filesystem foi reconhecido com sucesso e está acessível!

Existem outras opções para uso de área temporária, como o ramdisk, que consiste em usar parte da sua memória RAM como se fosse um disco local, mas isso fica pro próximo post, ainda tem muito assunto sobre Infra Azure para falarmos.

Agora um ponto de atenção super importante:
Este foi apenas um laboratório que servirá de estudos e aprendizado aos leitores.
E por ser um laboratório, diversas regras de segurança foram deixadas de lado, portanto se um dia houver a necessidade de criar uma arquitetura desta em ambiente produtivo, conte com um arquiteto experiente que conheça bem a segurança do Azure e as boas práticas para manter os dados da sua empresa seguros, não arrisque as práticas deste tutorial!

Acompanhem o blog para ficar por dentro do mundo Cloud Computing!

Grande abraço e até a próxima!

Top comments (1)

Collapse
 
suamirochadev profile image
Suami Rocha

Top 10²