Fala comunidade!
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).
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.
Ele também é 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).
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:
O tempo de geração da imagem leva em torno de 10 a 12 minutos.
Quando o processo finalizar, teremos o output abaixo:
E indo até o Resource Group, você verá o recurso provisionado:
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):
Agora vamos testar/validar o acesso à nossa máquina virtual, execute o comando:
- ssh seuuser@seuippublico
O output:
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").
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:
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:
rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
yum install blobfuse -y
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:
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.
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:
Arquivo encontra-se no container após o upload:
Vamos ver se ele está na VM, dentro do nosso filesystem?
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 é assunto para um outro 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!
Ah, é importante saber que temos a versão 2 do BlobFuse. O BlobFuse2 é um projeto de código aberto que usa a biblioteca de software livre do libfuse (fuse3) para se comunicar com o módulo de kernel do Linux FUSE. O BlobFuse2 implementa as operações do sistema de arquivos usando as APIs REST do Armazenamento do Microsoft Azure.
Mas isso é papo para outro post!
Acompanhem o blog para ficar por dentro do mundo Cloud Computing!
Grande abraço e até a próxima!