File di Azure driver di volume per Service Fabric

Il driver del volume File di Azure è un plug-in del volume Docker che fornisce volumi basati File di Azure per i contenitori Docker. Viene pacchetto come applicazione di Service Fabric che può essere distribuita in un cluster di Service Fabric per fornire volumi per altre applicazioni contenitore di Service Fabric all'interno del cluster.

Nota

La versione 6.5.661.9590 del plug-in del volume di File di Azure è stata rilasciata per la disponibilità generale.

Prerequisiti

  • La versione Windows del plug-in di volume di File di Azure può essere usata solo in Windows Server versione 1709, Windows 10 versione 1709 o sistemi operativi successivi.

  • La versione Linux del plug-in di volume di File di Azure può essere usata in tutte le versioni del sistema operativo supportate da Service Fabric.

  • Il plug-in di volume di File di Azure funziona solo con Service Fabric 6.2 e versioni successive.

  • Per creare una condivisione file per l'applicazione contenitore di Service Fabric da usare come volume, seguire le istruzioni riportate nella documentazione di File di Azure.

  • Sarà necessario PowerShell con il modulo di Service Fabric o SFCTL installato.

  • Se si usano contenitori Hyper-V, è necessario aggiungere i frammenti di codice seguenti nella sezione ClusterManifest (cluster locale) o fabricSettings nel modello di Azure Resource Manager (cluster di Azure) o ClusterConfig.json (cluster autonomo).

In ClusterManifest è necessario aggiungere il codice seguente nella sezione Hosting. In questo esempio il nome del volume è sfazurefile e la porta a cui è in ascolto nel cluster è 19100. Sostituirli con i valori corretti per il cluster.

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

Nella sezione fabricSettings nel modello di Azure Resource Manager (per le distribuzioni di Azure) o ClusterConfig.json (per le distribuzioni autonome), è necessario aggiungere il frammento di codice seguente. Sostituire di nuovo il nome del volume e i valori di porta con i propri.

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

Distribuire un'applicazione di esempio usando Service Fabric File di Azure driver del volume

Se il cluster è basato in Azure, è consigliabile distribuire le applicazioni usando il modello di risorse dell'applicazione di Azure Resource Manager per semplificare l'uso e per facilitare lo spostamento verso il modello di gestione dell'infrastruttura come codice. Questo approccio elimina la necessità di tenere traccia della versione dell'app per il driver del volume File di Azure. Consente inoltre di gestire modelli di Azure Resource Manager separati per ogni sistema operativo supportato. Lo script presuppone la distribuzione della versione più recente dell'applicazione File di Azure e accetta parametri per il tipo di sistema operativo, l'ID sottoscrizione del cluster e il gruppo di risorse. È possibile scaricare lo script dal sito di download di Service Fabric. Si noti che questo imposta automaticamente listenPort, ovvero la porta in cui il plug-in del volume File di Azure ascolta le richieste dal daemon Docker, su 19100. È possibile modificarlo aggiungendo il parametro denominato "listenPort". Assicurarsi che la porta non sia in conflitto con alcuna altra porta usata dal cluster o dalle applicazioni.

Comando di distribuzione di Azure Resource Manager per Windows:

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

Comando di distribuzione di Azure Resource Manager per Linux:

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

Dopo aver eseguito correttamente lo script, è possibile passare alla sezione configurazione dell'applicazione.

Distribuzione manuale per i cluster autonomi

L'applicazione Service Fabric che fornisce i volumi per i contenitori può essere scaricata dal sito di download di Service Fabric. L'applicazione può essere distribuita nel cluster tramite PowerShell, l'interfaccia della riga di comando o le API di FabricClient.

  1. Usando la riga di comando, modificare la directory nella directory radice del pacchetto dell'applicazione scaricato.

    cd .\AzureFilesVolume\
    
    cd ~/AzureFilesVolume
    
  2. Copiare quindi il pacchetto dell'applicazione nell'archivio immagini con i valori appropriati per [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. Registrare il tipo di applicazione

    Register-ServiceFabricApplicationType -ApplicationPathInImageStore AzureFilesVolumePlugin
    
    sfctl application provision --application-type-build-path [ApplicationPackagePath]
    
  4. Creare l'applicazione, prestando attenzione al valore del parametro dell'applicazione ListenPort . Questo valore è la porta in cui il plug-in del volume File di Azure ascolta le richieste dal daemon Docker. Assicurarsi che la porta fornita all'applicazione corrisponda a VolumePluginPorts in ClusterManifest e non sia in conflitto con alcuna altra porta usata dal cluster o dalle applicazioni.

    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 non supporta il mapping dei montaggi SMB nei contenitori (supportati solo in Windows Server versione 1709). Questa limitazione impedisce il mapping del volume della rete e l'uso dei driver di volume di File di Azure precedenti alla versione 1709.

Distribuire l'applicazione in un cluster di sviluppo locale

Seguire i passaggi da 1 a 3 dall'esempio precedente.

Il numero predefinito di istanze del servizio per l'applicazione del plug-in di volume di File di Azure è -1, corrispondente alla distribuzione di un'istanza del servizio in ogni nodo del cluster. Quando si distribuisce l'applicazione del plug-in di volume di File di Azure in un cluster di sviluppo locale, tuttavia, il numero di istanze del servizio specificato dovrà essere 1. A questo scopo è possibile usare il parametro InstanceCount dell'applicazione. Pertanto, il comando per la creazione dell'applicazione plug-in del volume File di Azure in un cluster di sviluppo locale è:

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"}'

Configurare le applicazioni per l'uso del volume

Il frammento di codice seguente mostra come è possibile specificare un volume basato su File di Azure nel file manifesto dell'applicazione dell'applicazione. L'elemento di specifico interesse è il 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>

Il nome del driver per il plug-in del volume File di Azure è sfazurefile. Questo valore è impostato per l'attributo Driver dell'elemento Tag Volume nel manifesto dell'applicazione.

Nel tag Volume nel frammento precedente, il plug-in del volume File di Azure richiede gli attributi seguenti:

  • Source: corrisponde al nome del volume. L'utente può scegliere qualsiasi nome per il volume.
  • Destinazione : questo attributo è il percorso a cui viene eseguito il mapping del volume all'interno del contenitore in esecuzione. La destinazione non può quindi essere una posizione già esistente nel contenitore.

Come illustrato negli elementi DriverOption nel frammento precedente, il plug-in di volume di File di Azure supporta le opzioni del driver seguenti.

  • shareName: nome della condivisione file di File di Azure che rende disponibile il volume per il contenitore.

  • storageAccountName: nome dell'account di archiviazione di Azure contenente la condivisione file di File di Azure.

  • storageAccountKey: chiave di accesso dell'account di archiviazione di Azure contenente la condivisione file di File di Azure.

  • storageAccountFQDN: nome di dominio associato all'account di archiviazione. Se storageAccountFQDN non è specificato, il nome di dominio è costituito dal suffisso predefinito (.file.core.windows.net) con il valore di 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" />
    

Uso di un driver di volume o di registrazione personalizzato

Service Fabric consente anche l'utilizzo dei propri driver di volume o registrazione personalizzati. Se il driver di volume/registrazione Docker non è installato nel cluster, è possibile installarlo manualmente usando i protocolli RDP/SSH. È possibile eseguire l'installazione con questi protocolli tramite un script di avvio del set di scalabilità di macchine virtuali o uno script SetupEntryPoint.

Un esempio di script per installare il driver di volume Docker per Azure è riportato di seguito:

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

Nelle applicazioni, per usare il driver di volume o di registrazione installato sarà necessario specificare i valori appropriati negli elementi Volume e LogConfig inclusi in ContainerHostPolicies nel manifesto dell'applicazione.

<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>

Quando si specifica un plug-in di volume, Service Fabric crea automaticamente il volume usando i parametri specificati. Il tag Source per l'elemento Volume è il nome del volume e il tag Driver specifica il plug-in del driver di volume. Il tag Destination è il percorso in cui viene eseguito il mapping di Source all'interno del contenitore in esecuzione. La destinazione non può quindi essere un percorso già esistente all'interno del contenitore. Le opzioni possono essere specificate tramite il tag DriverOption come indicato di seguito:

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

I parametri dell'applicazione sono supportati per i volumi, come illustrato nel frammento di manifesto precedente (cercare MyStorageVar per un esempio d'uso).

Se viene specificato un driver di log Docker, è necessario distribuire gli agenti o i contenitori per gestire i registri nel cluster. Il tag DriverOption può essere usato per specificare le opzioni per il driver di log.

Passaggi successivi