Driver de volume do Azure Files para Service Fabric
O driver de volume do Azure Files é um plug-in de volume do Docker que fornece volumes baseados em Arquivos do Azure para contêineres do Docker. Ele é empacotado como um aplicativo do Service Fabric que pode ser implantado em um cluster do Service Fabric para fornecer volumes para outros aplicativos de contêiner do Service Fabric dentro do cluster.
Nota
A versão 6.5.661.9590 do plug-in de volume Arquivos do Azure foi lançada para disponibilidade geral.
Pré-requisitos
A versão para Windows do plug-in de volume Arquivos do Azure funciona apenas nos sistemas operacionais Windows Server versão 1709, Windows 10 versão 1709 ou posterior.
A versão Linux do plug-in de volume Arquivos do Azure funciona em todas as versões do sistema operacional suportadas pelo Service Fabric.
O plug-in de volume Arquivos do Azure só funciona no Service Fabric versão 6.2 e mais recente.
Siga as instruções na documentação dos Arquivos do Azure para criar um compartilhamento de arquivos para o aplicativo de contêiner do Service Fabric usar como volume.
Você precisará do PowerShell com o módulo Service Fabric ou SFCTL instalado.
Se você estiver usando contêineres Hyper-V, os seguintes trechos precisarão ser adicionados na seção ClusterManifest (cluster local) ou fabricSettings em seu modelo do Azure Resource Manager (cluster do Azure) ou ClusterConfig.json (cluster autônomo).
No ClusterManifest, o seguinte precisa ser adicionado na seção Hospedagem. Neste exemplo, o nome do volume é sfazurefile e a porta que ele escuta no cluster é 19100. Substitua-os pelos valores corretos para o cluster.
<Section Name="Hosting">
<Parameter Name="VolumePluginPorts" Value="sfazurefile:19100" />
</Section>
Na seção fabricSettings em seu modelo do Azure Resource Manager (para implantações do Azure) ou ClusterConfig.json (para implantações autônomas), o trecho a seguir precisa ser adicionado. Novamente, substitua o nome do volume e os valores da porta pelos seus.
"fabricSettings": [
{
"name": "Hosting",
"parameters": [
{
"name": "VolumePluginPorts",
"value": "sfazurefile:19100"
}
]
}
]
Implantar um aplicativo de exemplo usando o driver de volume do Service Fabric Azure Files
Usando o Azure Resource Manager por meio do script do PowerShell fornecido (recomendado)
Se o cluster for baseado no Azure, recomendamos implantar aplicativos nele usando o modelo de recursos de aplicativo do Azure Resource Manager para facilitar o uso e ajudar a avançar para o modelo de manutenção da infraestrutura como código. Essa abordagem elimina a necessidade de acompanhar a versão do aplicativo para o driver de volume do Azure Files. Ele também permite que você mantenha modelos separados do Azure Resource Manager para cada sistema operacional suportado. O script pressupõe que você esteja implantando a versão mais recente do aplicativo Arquivos do Azure e usa parâmetros para tipo de sistema operacional, ID de assinatura de cluster e grupo de recursos. Você pode baixar o script do site de download do Service Fabric. Observe que isso define automaticamente o ListenPort, que é a porta na qual o plug-in de volume Arquivos do Azure escuta solicitações do daemon do Docker, como 19100. Você pode alterá-lo adicionando o parâmetro chamado "listenPort". Certifique-se de que a porta não entra em conflito com nenhuma outra porta usada pelo cluster ou seus aplicativos.
Comando de implantação do Azure Resource Manager para Windows:
.\DeployAzureFilesVolumeDriver.ps1 -subscriptionId [subscriptionId] -resourceGroupName [resourceGroupName] -clusterName [clusterName] -windows
Comando de implantação do Azure Resource Manager para Linux:
.\DeployAzureFilesVolumeDriver.ps1 -subscriptionId [subscriptionId] -resourceGroupName [resourceGroupName] -clusterName [clusterName] -linux
Depois de executar o script com êxito, você pode pular para a seção configurando seu aplicativo.
Implantação manual para clusters autônomos
O aplicativo Service Fabric que fornece os volumes para seus contêineres pode ser baixado do site de download do Service Fabric. O aplicativo pode ser implantado no cluster por meio de APIs PowerShell, CLI ou FabricClient.
Usando a linha de comando, altere o diretório para o diretório raiz do pacote de aplicativo baixado.
cd .\AzureFilesVolume\
cd ~/AzureFilesVolume
Em seguida, copie o pacote do aplicativo para o armazenamento de imagens com os valores apropriados para [ApplicationPackagePath] e [ImageStoreConnectionString]:
Copy-ServiceFabricApplicationPackage -ApplicationPackagePath [ApplicationPackagePath] -ImageStoreConnectionString [ImageStoreConnectionString] -ApplicationPackagePathInImageStore AzureFilesVolumePlugin
sfctl cluster select --endpoint https://testcluster.westus.cloudapp.azure.com:19080 --pem test.pem --no-verify sfctl application upload --path [ApplicationPackagePath] --show-progress
Registar o tipo de aplicação
Register-ServiceFabricApplicationType -ApplicationPathInImageStore AzureFilesVolumePlugin
sfctl application provision --application-type-build-path [ApplicationPackagePath]
Crie o aplicativo, prestando muita atenção ao valor do parâmetro do aplicativo ListenPort . Esse valor é a porta na qual o plug-in de volume Arquivos do Azure escuta solicitações do daemon do Docker. Verifique se a porta fornecida ao aplicativo corresponde ao VolumePluginPorts no ClusterManifest e não entra em conflito com nenhuma outra porta usada pelo cluster ou seus aplicativos.
New-ServiceFabricApplication -ApplicationName fabric:/AzureFilesVolumePluginApp -ApplicationTypeName AzureFilesVolumePluginType -ApplicationTypeVersion 6.5.661.9590 -ApplicationParameter @{ListenPort='19100'}
sfctl application create --app-name fabric:/AzureFilesVolumePluginApp --app-type AzureFilesVolumePluginType --app-version 6.5.661.9590 --parameter '{"ListenPort":"19100"}'
Nota
O Windows Server 2016 Datacenter não oferece suporte ao mapeamento de montagens SMB para contêineres (isso só é suportado no Windows Server versão 1709). Essa restrição impede o mapeamento de volume de rede e os drivers de volume dos Arquivos do Azure em versões anteriores a 1709.
Implantar o aplicativo em um cluster de desenvolvimento local
Siga os passos 1 a 3 acima .
A contagem de instância de serviço padrão para o aplicativo de plug-in de volume do Azure Files é -1, o que significa que há uma instância do serviço implantada em cada nó no cluster. No entanto, ao implantar o aplicativo de plug-in de volume Arquivos do Azure em um cluster de desenvolvimento local, a contagem de instâncias de serviço deve ser especificada como 1. Isso pode ser feito por meio do parâmetro de aplicativo InstanceCount . Portanto, o comando para criar o aplicativo de plug-in de volume do Azure Files em um cluster de desenvolvimento local é:
New-ServiceFabricApplication -ApplicationName fabric:/AzureFilesVolumePluginApp -ApplicationTypeName AzureFilesVolumePluginType -ApplicationTypeVersion 6.5.661.9590 -ApplicationParameter @{ListenPort='19100';InstanceCount='1'}
sfctl application create --app-name fabric:/AzureFilesVolumePluginApp --app-type AzureFilesVolumePluginType --app-version 6.5.661.9590 --parameter '{"ListenPort": "19100","InstanceCount": "1"}'
Configure seus aplicativos para usar o volume
O trecho a seguir mostra como um volume baseado em Arquivos do Azure pode ser especificado no arquivo de manifesto do aplicativo do seu aplicativo. O elemento específico de interesse é a tag Volume :
?xml version="1.0" encoding="UTF-8"?>
<ApplicationManifest ApplicationTypeName="WinNodeJsApp" ApplicationTypeVersion="1.0" xmlns="http://schemas.microsoft.com/2011/01/fabric" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance">
<Description>Calculator Application</Description>
<Parameters>
<Parameter Name="ServiceInstanceCount" DefaultValue="3"></Parameter>
<Parameter Name="MyCpuShares" DefaultValue="3"></Parameter>
<Parameter Name="MyStorageVar" DefaultValue="c:\tmp"></Parameter>
</Parameters>
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="NodeServicePackage" ServiceManifestVersion="1.0"/>
<Policies>
<ContainerHostPolicies CodePackageRef="NodeService.Code" Isolation="hyperv">
<PortBinding ContainerPort="8905" EndpointRef="Endpoint1"/>
<RepositoryCredentials PasswordEncrypted="false" Password="****" AccountName="test"/>
<Volume Source="azfiles" Destination="c:\VolumeTest\Data" Driver="sfazurefile">
<DriverOption Name="shareName" Value="" />
<DriverOption Name="storageAccountName" Value="" />
<DriverOption Name="storageAccountKey" Value="" />
<DriverOption Name="storageAccountFQDN" Value="" />
</Volume>
</ContainerHostPolicies>
</Policies>
</ServiceManifestImport>
<ServiceTemplates>
<StatelessService ServiceTypeName="StatelessNodeService" InstanceCount="5">
<SingletonPartition></SingletonPartition>
</StatelessService>
</ServiceTemplates>
</ApplicationManifest>
O nome do driver para o plug-in de volume do Azure Files é sfazurefile. Esse valor é definido para o atributo Driver do elemento de marca Volume no manifesto do aplicativo.
Na marca Volume no trecho acima, o plug-in de volume Arquivos do Azure requer os seguintes atributos:
- Fonte - Este é o nome do volume. O usuário pode escolher qualquer nome para seu volume.
- Destino - Este atributo é o local para o qual o volume é mapeado dentro do contêiner em execução. Assim, o seu destino não pode ser um local que já existe dentro do seu contentor
Conforme mostrado nos elementos DriverOption no trecho acima, o plug-in de volume Arquivos do Azure dá suporte às seguintes opções de driver:
shareName - Nome do compartilhamento de arquivos do Azure Files que fornece o volume para o contêiner.
storageAccountName - Nome da conta de armazenamento do Azure que contém o compartilhamento de arquivos do Azure Files.
storageAccountKey - Chave de acesso para a conta de armazenamento do Azure que contém o compartilhamento de arquivos do Azure Files.
storageAccountFQDN - Nome de domínio associado à conta de armazenamento. Se storageAccountFQDN não for especificado, o nome de domínio será formado usando o sufixo padrão (.file.core.windows.net) com o storageAccountName.
- Example1: <DriverOption Name="shareName" Value="myshare1" /> <DriverOption Name="storageAccountName" Value="myaccount1" /> <DriverOption Name="storageAccountKey" Value="mykey1" /> <!-- storageAccountFQDN will be "myaccount1.file.core.windows.net" --> - Example2: <DriverOption Name="shareName" Value="myshare2" /> <DriverOption Name="storageAccountName" Value="myaccount2" /> <DriverOption Name="storageAccountKey" Value="mykey2" /> <DriverOption Name="storageAccountFQDN" Value="myaccount2.file.core.chinacloudapi.cn" />
Usando seu próprio volume ou driver de registro
O Service Fabric também permite o uso de seu próprio volume personalizado ou drivers de log. Se o driver de volume/log do Docker não estiver instalado no cluster, você poderá instalá-lo manualmente usando os protocolos RDP/SSH. Você pode executar a instalação com esses protocolos por meio de um script de inicialização de conjunto de escala de máquina virtual ou um script SetupEntryPoint.
Um exemplo do script para instalar o driver de volume do Docker para Azure é o seguinte:
docker plugin install --alias azure --grant-all-permissions docker4x/cloudstor:17.09.0-ce-azure1 \
CLOUD_PLATFORM=AZURE \
AZURE_STORAGE_ACCOUNT="[MY-STORAGE-ACCOUNT-NAME]" \
AZURE_STORAGE_ACCOUNT_KEY="[MY-STORAGE-ACCOUNT-KEY]" \
DEBUG=1
Em seus aplicativos, para usar o volume ou driver de log instalado, você teria que especificar os valores apropriados nos elementos Volume e LogConfig em ContainerHostPolicies no manifesto do aplicativo.
<ContainerHostPolicies CodePackageRef="NodeService.Code" Isolation="hyperv">
<PortBinding ContainerPort="8905" EndpointRef="Endpoint1"/>
<RepositoryCredentials PasswordEncrypted="false" Password="****" AccountName="test"/>
<LogConfig Driver="[YOUR_LOG_DRIVER]" >
<DriverOption Name="test" Value="vale"/>
</LogConfig>
<Volume Source="c:\workspace" Destination="c:\testmountlocation1" IsReadOnly="false"></Volume>
<Volume Source="[MyStorageVar]" Destination="c:\testmountlocation2" IsReadOnly="true"> </Volume>
<Volume Source="myvolume1" Destination="c:\testmountlocation2" Driver="[YOUR_VOLUME_DRIVER]" IsReadOnly="true">
<DriverOption Name="[name]" Value="[value]"/>
</Volume>
</ContainerHostPolicies>
Ao especificar um plug-in de volume, o Service Fabric cria automaticamente o volume usando os parâmetros especificados. A tag Source para o elemento Volume é o nome do volume e a tag Driver especifica o plug-in do driver de volume. A marca Destination é o local para o qual a Source é mapeada dentro do contêiner em execução. Assim, o seu destino não pode ser um local que já existe dentro do seu contentor. As opções podem ser especificadas usando a marca DriverOption da seguinte maneira:
<Volume Source="myvolume1" Destination="c:\testmountlocation4" Driver="azure" IsReadOnly="true">
<DriverOption Name="share" Value="models"/>
</Volume>
Os parâmetros do aplicativo são suportados para volumes, conforme mostrado no trecho de manifesto anterior (procure MyStorageVar
um exemplo de uso).
Se um driver de log do Docker for especificado, você precisará implantar agentes (ou contêineres) para manipular os logs no cluster. A tag DriverOption pode ser usada para especificar opções para o driver de log.
Próximos passos
- Para ver amostras de contêiner, incluindo o driver de volume, visite as amostras de contêiner do Service Fabric
- Para implantar contêineres em um cluster do Service Fabric, consulte o artigo Implantar um contêiner no Service Fabric