Compartilhar via


Driver de volume dos Arquivos do Azure para Service Fabric

O driver de volume dos Arquivos do Azure é um plug-in de volume de 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 a outros aplicativos de contêiner do Service Fabric dentro do cluster.

Observação

A versão 6.5.661.9590 do plug-in de volume dos Arquivos do Azure foi liberada para disponibilidade geral.

Pré-requisitos

  • A versão do Windows do plug-in de volume dos Arquivos do Azure funciona no Windows Server versão 1709, Windows 10 versão 1709 ou apenas em sistemas operacionais posteriores.

  • A versão do Linux do plug-in de volume dos Arquivos do Azure funciona em todas as versões de sistema operacional com suporte pelo Service Fabric.

  • O plug-in do volume de arquivos do Azure funciona somente 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 arquivo para o aplicativo de contêiner do Service Fabric para usar como o volume.

  • Você precisará do PowerShell com o módulo Service Fabric ou SFCTL instalado.

  • Se estiver usando contêineres de Hyper-V, os snippets a seguir precisam ser incluídos na seção ClusterManifest (cluster local) ou fabricSettings no 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 do modelo do Azure Resource Manager (para implantações do Azure) ou ClusterConfig.json (para implantações autônomas), o snippet a seguir precisa ser adicionado. Substitua novamente o nome do volume e os valores da porta pelos seus próprios.

"fabricSettings": [
  {
    "name": "Hosting",
    "parameters": [
      {
          "name": "VolumePluginPorts",
          "value": "sfazurefile:19100"
      }
    ]
  }
]

Implantar um aplicativo de exemplo usando o driver de volume de Arquivos do Azure do Service Fabric

Se o cluster for baseado no Azure, recomendamos a implantação de aplicativos nele usando o modelo de recurso de aplicativo do Azure Resource Manager para facilitar o uso e ajudar a migração para o modelo de manutenção da infraestrutura como código. Essa abordagem elimina a necessidade de controlar a versão do aplicativo para o driver de volume dos Arquivos do Azure. Ele também permite que você mantenha modelos do Azure Resource Manager separados para cada sistema operacional compatível. O script pressupõe que você está implantando a versão mais recente do aplicativo de 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 no site de download do Service Fabric. Observe que isso define automaticamente o ListenPort, que é a porta na qual o plug-in de volume dos Arquivos do Azure escuta solicitações do daemon do Docker até 19100. Você pode alterá-lo adicionando o parâmetro chamado "listenPort". Verifique se a porta não entra em conflito com nenhuma outra porta usada pelo cluster ou pelos 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 de configuração do aplicativo.

Implantação manual para clusters autônomos

O aplicativo do Service Fabric que fornece os volumes para os contêineres pode ser baixado por meio do site de download do Service Fabric. O aplicativo pode ser implantado para o cluster por meio do PowerShell, CLI ou APIs FabricClient.

  1. Usando a linha de comando, altere o diretório para o diretório raiz do pacote de aplicativos baixado.

    cd .\AzureFilesVolume\
    
    cd ~/AzureFilesVolume
    
  2. Em seguida, copie o pacote de aplicativo para o repositório 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
    
  3. Registrar o tipo de aplicativo

    Register-ServiceFabricApplicationType -ApplicationPathInImageStore AzureFilesVolumePlugin
    
    sfctl application provision --application-type-build-path [ApplicationPackagePath]
    
  4. Crie o aplicativo, prestando muita atenção ao valor de parâmetro do aplicativo ListenPort. Esse valor é a porta na qual o plug-in do volume dos Arquivos do Azure escuta solicitações do daemon do Docker. Verifique se a porta fornecida ao aplicativo corresponde a VolumePluginPorts no ClusterManifest e não está em conflito com nenhuma outra porta que o cluster ou seus aplicativos usam.usada pelo cluster ou pelos 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"}'
    

Observação

O Windows Server 2016 Datacenter não é compatível com mapeamento de montagens de SMB em contêineres (só há compatibilidade no Windows Server versão 1709). Essa restrição impede mapeamento do volume de rede e drivers de volume de Arquivos do Azure em versões anteriores à 1709.

Implantar o aplicativo em um cluster de desenvolvimento local

Siga as etapas 1 a 3 acima.

A contagem de instâncias de serviço padrão para o aplicativo de plug-in de volume dos Arquivos do Azure é -1, o que significa que há uma instância do serviço implantado em cada nó no cluster. No entanto, ao implantar o aplicativo de plug-in de volume dos 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. Assim, o comando para criar o aplicativo de plug-in do volume de Arquivos do Azure 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 snippet a seguir mostra como um volume baseado nos Arquivos do Azure pode ser especificado no arquivo de manifesto do aplicativo do seu aplicativo. O elemento específico de interesse é a marca 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 dos Arquivos do Azure é sfazurefile. Esse valor é definido para o atributo Driver do elemento da marca Volume no manifesto do aplicativo.

Na marca Volume no snippet de código acima, o plug-in do volume dos Arquivos do Azure requer os seguintes atributos:

  • Source – Esse é o nome do volume. O usuário pode escolher qualquer nome para seu volume.
  • Destination – Este atributo é o local em que o volume é mapeado no contêiner em execução. Assim, seu destino não pode ser um local já existente em seu contêiner

Conforme exibido nos elementos DriverOption no snippet acima, o plug-in do volume de Arquivos do Azure oferece suporte às seguintes opções de driver:

  • shareName - Nome do compartilhamento de arquivos dos Arquivos do Azure que fornece o volume para o contêiner.

  • storageAccountName - Nome da conta de armazenamento do Azure que contém o compartilhamento de arquivos dos Arquivos do Azure.

  • storageAccountKey - Chave de acesso para a conta de armazenamento do Azure que contém o compartilhamento de arquivos dos Arquivos do Azure.

  • storageAccountFQDN – nome de domínio associado à conta de armazenamento. Se storageAccountFQDN não for especificado, o nome de domínio será formado usando o padrão suffix(.file.core.windows.net) com 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 o log do driver

O Service Fabric também permite o uso do volume personalizado ou drivers de registro em log. Se o driver de volume/log do Docker não estiver instalado em seu cluster, é possível instalá-lo manualmente usando os protocolos RDP/SSH. Você pode executar a instalação usando esses protocolos por meio de um script de inicialização de conjunto de escala de máquina virtual ou um script SetupEntryPoint.

Um exemplo de 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 a unidade de log que você instalou, é necessário especificar os valores apropriados nos elementos Volume e LogConfig sob ContainerHostPolicies em seu manifesto de 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 do volume, o Service Fabric cria automaticamente o volume usando os parâmetros especificados. A marcação Fonte para o elemento Volume é o nome do volume e a marcação Driver especifica o plug-in do driver do volume. A marcação Destino é o local em que a Fonte é mapeada no contêiner em execução. Assim, seu destino não pode ser um local já existente em seu contêiner. As opções podem ser especificadas usando a marcação de DriverOption como 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 compatíveis com volumes, conforme mostrado no snippet de manifesto anterior (procure MyStorageVar para obter um uso de exemplo).

Se um driver de log do Docker for especificado, será necessário implantar agentes (ou contêineres) para tratar os logs no cluster. A marcação DriverOption pode ser usada para especificar opções para o driver de log.

Próximas etapas