Share via


Ficheiros do Azure controlador de volume do Service Fabric

O controlador de volume Ficheiros do Azure é um plug-in de volume do Docker que fornece volumes baseados em Ficheiros do Azure para contentores do Docker. É empacotado como uma aplicação do Service Fabric que pode ser implementada num cluster do Service Fabric para fornecer volumes para outras aplicações de contentor do Service Fabric no cluster.

Nota

A versão 6.5.661.9590 do plug-in de volume Ficheiros do Azure foi lançada para disponibilidade geral.

Pré-requisitos

  • A versão do Windows do plug-in de volume Ficheiros do Azure funciona apenas na versão 1709 do Windows Server, Windows 10 versão 1709 ou posterior.

  • A versão do Linux do plug-in de volume Ficheiros do Azure funciona em todas as versões do sistema operativo suportadas pelo Service Fabric.

  • O plug-in de volume Ficheiros do Azure só funciona na versão 6.2 e mais recente do Service Fabric.

  • Siga as instruções na documentação do Ficheiros do Azure para criar uma partilha de ficheiros para a aplicação de contentor do Service Fabric utilizar como volume.

  • Precisará do PowerShell com o módulo do Service Fabric ou O SFCTL instalado.

  • Se estiver a utilizar contentores Hyper-V, os fragmentos seguintes têm de ser adicionados na secção ClusterManifest (cluster local) ou fabricSettings no modelo de Resource Manager do Azure (cluster do Azure) ou ClusterConfig.json (cluster autónomo).

No ClusterManifest, é necessário adicionar o seguinte na secção Alojamento. Neste exemplo, o nome do volume é sfazurefile e a porta que escuta no cluster é 19100. Substitua-os pelos valores corretos para o cluster.

<Section Name="Hosting">
  <Parameter Name="VolumePluginPorts" Value="sfazurefile:19100" />
</Section>

Na secção recursos de infraestruturaDefinições no modelo de Resource Manager do Azure (para implementações do Azure) ou ClusterConfig.json (para implementações autónomas), é necessário adicionar o fragmento seguinte. Novamente, substitua o nome do volume e os valores de porta pelos seus próprios valores.

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

Implementar uma aplicação de exemplo com o controlador de volume Ficheiros do Azure do Service Fabric

Se o cluster se basear no Azure, recomendamos que implemente aplicações no mesmo com o modelo de recursos da aplicação Resource Manager do Azure para facilitar a utilização e para ajudar a avançar para o modelo de manutenção da infraestrutura como código. Esta abordagem elimina a necessidade de controlar a versão da aplicação para o controlador de volume Ficheiros do Azure. Também lhe permite manter modelos de Resource Manager do Azure separados para cada SO suportado. O script pressupõe que está a implementar a versão mais recente da aplicação Ficheiros do Azure e utiliza parâmetros para o tipo de SO, o ID da subscrição do cluster e o grupo de recursos. Pode transferir o script a partir do site de transferência do Service Fabric. Tenha em atenção que isto define automaticamente o ListenPort, que é a porta na qual o plug-in de volume Ficheiros do Azure escuta pedidos do daemon do Docker para 19100. Pode alterá-lo ao adicionar o parâmetro "listenPort". Certifique-se de que a porta não entra em conflito com nenhuma outra porta que o cluster ou as suas aplicações utilizem.

Comando de implementação do Azure Resource Manager para Windows:

.\DeployAzureFilesVolumeDriver.ps1 -subscriptionId [subscriptionId] -resourceGroupName [resourceGroupName] -clusterName [clusterName] -windows

Comando de implementação do Azure Resource Manager para Linux:

.\DeployAzureFilesVolumeDriver.ps1 -subscriptionId [subscriptionId] -resourceGroupName [resourceGroupName] -clusterName [clusterName] -linux

Depois de executar o script com êxito, pode avançar para a secção de configuração da aplicação.

Implementação manual para clusters autónomos

A aplicação do Service Fabric que fornece os volumes para os seus contentores pode ser transferida a partir do site de transferência do Service Fabric. A aplicação pode ser implementada no cluster através do PowerShell, da CLI ou das APIs FabricClient.

  1. Com a linha de comandos, altere o diretório para o diretório de raiz do pacote de aplicações transferido.

    cd .\AzureFilesVolume\
    
    cd ~/AzureFilesVolume
    
  2. Em seguida, copie o pacote de aplicação para o arquivo de imagens com os valores adequados 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. Registar o tipo de aplicação

    Register-ServiceFabricApplicationType -ApplicationPathInImageStore AzureFilesVolumePlugin
    
    sfctl application provision --application-type-build-path [ApplicationPackagePath]
    
  4. Crie a aplicação, prestando muita atenção ao valor do parâmetro da aplicação ListenPort . Este valor é a porta na qual o plug-in de volume Ficheiros do Azure escuta pedidos do daemon do Docker. Certifique-se de que a porta fornecida à aplicação corresponde aos VolumePluginPorts no ClusterManifest e não entra em conflito com qualquer outra porta que o cluster ou as suas aplicações utilizem.

    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

Windows Server 2016 Datacenter não suporta o mapeamento de montagens SMB para contentores (só é suportado na versão 1709 do Windows Server). Esta restrição impede o mapeamento de volumes de rede e Ficheiros do Azure controladores de volume em versões anteriores a 1709.

Implementar a aplicação num cluster de desenvolvimento local

Siga os passos 1 a 3 acima .

A contagem de instâncias de serviço predefinidas para a aplicação de plug-in de volume Ficheiros do Azure é -1, o que significa que existe uma instância do serviço implementada em cada nó no cluster. No entanto, ao implementar o Ficheiros do Azure aplicação de plug-in de volume num cluster de desenvolvimento local, a contagem de instâncias de serviço deve ser especificada como 1. Isto pode ser feito através do parâmetro da aplicação InstanceCount . Por conseguinte, o comando para criar a aplicação de plug-in de volume Ficheiros do Azure num 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"}'

Configurar as aplicações para utilizar o volume

O fragmento seguinte mostra como um volume baseado em Ficheiros do Azure pode ser especificado no ficheiro de manifesto da aplicação da sua aplicação. O elemento específico de interesse é a etiqueta 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 controlador do plug-in de volume Ficheiros do Azure é sfazurefile. Este valor é definido para o atributo Controlador do elemento Etiqueta de volume no manifesto da aplicação.

Na etiqueta Volume no fragmento acima, o plug-in de volume Ficheiros do Azure requer os seguintes atributos:

  • Origem – este é o nome do volume. O utilizador pode escolher qualquer nome para o volume.
  • Destino – este atributo é a localização para a qual o volume está mapeado no contentor em execução. Assim, o seu destino não pode ser uma localização que já exista no contentor

Conforme mostrado nos elementos DriverOption no fragmento acima, o plug-in de volume Ficheiros do Azure suporta as seguintes opções de controlador:

  • shareName - Nome da partilha de ficheiros Ficheiros do Azure que fornece o volume para o contentor.

  • storageAccountName - Nome da conta de armazenamento do Azure que contém a partilha de ficheiros Ficheiros do Azure.

  • storageAccountKey - Chave de acesso para a conta de armazenamento do Azure que contém a partilha de ficheiros Ficheiros do Azure.

  • storageAccountFQDN - Nome de domínio associado à conta de armazenamento. Se storageAccountFQDN não for especificado, o nome de domínio será formado através do sufixo predefinido(.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" />
    

Utilizar o seu próprio controlador de registo ou volume

O Service Fabric também permite a utilização do seu próprio volume personalizado ou controladores de registo . Se o controlador de registo/volume do Docker não estiver instalado no cluster, pode instalá-lo manualmente com os protocolos RDP/SSH. Pode efetuar a instalação com estes protocolos através de um script de arranque do conjunto de dimensionamento de máquinas virtuais ou de um script SetupEntryPoint.

Um exemplo do script para instalar o controlador de volume do Docker para o 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

Nas suas aplicações, para utilizar o controlador de volume ou registo que instalou, teria de especificar os valores adequados nos elementos Volume e LogConfig em ContainerHostPolicies no manifesto da sua aplicação.

<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 com os parâmetros especificados. A etiqueta Origem do elemento Volume é o nome do volume e a etiqueta Controlador especifica o plug-in do controlador de volume. A etiqueta Destino é a localização para a qual a Origem está mapeada no contentor em execução. Assim, o seu destino não pode ser uma localização que já exista no contentor. As opções podem ser especificadas com a etiqueta DriverOption da seguinte forma:

<Volume Source="myvolume1" Destination="c:\testmountlocation4" Driver="azure" IsReadOnly="true">
           <DriverOption Name="share" Value="models"/>
</Volume>

Os parâmetros da aplicação são suportados para volumes, conforme mostrado no fragmento de manifesto anterior (procure MyStorageVar uma utilização de exemplo).

Se for especificado um controlador de registo do Docker, terá de implementar agentes (ou contentores) para processar os registos no cluster. A etiqueta DriverOption pode ser utilizada para especificar opções para o controlador de registo.

Passos seguintes