適用於 Service Fabric 的 Azure 檔案儲存體磁碟區驅動程式

Azure 檔案儲存體磁碟區驅動程式為 Docker 磁碟區外掛程式,其可為 Docker 容器提供 Azure 檔案儲存體型磁碟區。 其會封裝為 Service Fabric 應用程式,而系統可將其部署至 Service Fabric 叢集,為叢集內的其他 Service Fabric 容器應用程式提供磁碟區。

注意

版本 6.5.661.9590 的 Azure 檔案儲存體磁碟區外掛程式已正式發行。

必要條件

  • Azure 檔案服務磁碟區外掛程式的 Windows 版本只能在 Windows Server 1709 版Windows 10 1709 版或更新版本的作業系統上運作。

  • Azure 檔案服務磁碟區外掛程式的 Linux 版本可在 Service Fabric 所支援的所有作業系統版本上運作。

  • Azure 檔案磁碟區外掛程式只適用於 Service Fabric 6.2 版及更新版本。

  • 請依照 Azure 檔案服務文件 \(英文\) 中的指示,為 Service Fabric 容器應用程式建立一個檔案共用作為磁碟區使用。

  • 您將會需要安裝包含 Service Fabric 模組的 PowerShellSFCTL

  • 如果您使用的是 Hyper-V 容器,則必須在 ClusterManifest (本機叢集) 或在 Azure Resource Manager 範本 (Azure 叢集) 或 ClusterConfig.json (獨立叢集) 的 fabricSettings 區段中新增下列程式碼片段。

在 ClusterManifest 中,必須在 Hosting 區段中新增下列內容。 在此範例中,磁碟區名稱是 sfazurefile,而其在叢集上接聽的連接埠為 19100。 將其取代為您叢集的正確值。

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

在 Azure Resource Manager 範本 (適用於 Azure 部署) 或 ClusterConfig.json (適用於獨立部署) 的 fabricSettings 區段中,必須新增下列程式碼片段。 再次將磁碟區名稱和連接埠值取代為您自己的值。

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

使用 Service Fabric Azure 檔案儲存體磁碟區驅動程式來部署範例應用程式

如果您的叢集是以 Azure 為基礎,建議您使用 Azure Resource Manager 應用程式資源模型將應用程式部署至該叢集,以方便使用,並協助移往維護基礎結構即程式碼的模型。 這種方法不需要您追蹤 Azure 檔案儲存體磁碟區驅動程式的應用程式版本。 其也可讓您針對每個支援的 OS 維護個別的 Azure Resource Manager 範本。 此指令碼假設您要部署最新版的 Azure 檔案儲存體應用程式,並接受 OS 類型、叢集訂用帳戶識別碼和資源群組的參數。 您可以從 Service Fabric 下載網站下載指令碼。 請注意,這會自動將 ListenPort 設定為 19100,而 ListenPort 正是 Azure 檔案儲存體磁碟區外掛程式接聽 Docker 精靈要求所在的連接埠。 您可以新增名為 "listenPort" 的參數來變更此連接埠。 確定此連接埠不會與叢集或應用程式所使用的任何其他連接埠衝突。

適用於 Windows 的 Azure Resource Manager 部署命令:

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

適用於 Linux 的 Azure Resource Manager 部署命令:

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

一旦成功執行了指令碼,您就可以跳至設定您的應用程式一節。

獨立叢集的手動部署

為您容器提供磁碟區的 Service Fabric 應用程式,可從 Service Fabric 下載網站下載。 您可以透過 PowerShellCLIFabricClient API 將應用程式部署到叢集。

  1. 使用命令列可將目錄變更至已下載應用程式套件的根目錄。

    cd .\AzureFilesVolume\
    
    cd ~/AzureFilesVolume
    
  2. 接下來,使用 [ApplicationPackagePath] 和 [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. 註冊應用程式類型

    Register-ServiceFabricApplicationType -ApplicationPathInImageStore AzureFilesVolumePlugin
    
    sfctl application provision --application-type-build-path [ApplicationPackagePath]
    
  4. 建立應用程式,密切注意 ListenPort 應用程式參數值。 此值正是 Azure 檔案儲存體磁碟區外掛程式接聽 Docker 精靈要求所在的連接埠。 確定提供給應用程式的連接埠埠符合 ClusterManifest 中的 VolumePluginPorts,而且不會與叢集或應用程式所使用的任何其他連接埠發生衝突。

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

注意

Windows Server 2016 Datacenter 不支援將 SMB 掛接對應至容器 (該功能僅在 Windows Server 1709 版上受到支援)。 這條件約束可避免在早於 1709 的版本上使用網路磁碟區對應和 Azure 檔案服務磁碟區驅動程式。

在本機開發叢集上部署應用程式

請遵循上述步驟 1-3。

Azure 檔案服務磁碟區外掛程式應用程式的預設服務執行個體計數為 -1,這表示針對叢集中的每個節點都有部署一個服務的執行個體。 但是,將 Azure 檔案服務磁碟區外掛程式應用程式部署到本機開發叢集上時,服務執行個體計數應指定為 1。 這可以透過 InstanceCount 應用程式參數來完成。 因此,在本機開發叢集上建立 Azure 檔案儲存體磁碟區外掛程式應用程式的命令為:

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

設定您的應用程式以使用磁碟區

下列程式碼片段會顯示如何在應用程式的應用程式資訊清單檔案中指定 Azure 檔案儲存體型磁碟區。 需要關注的特定元素為 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>

Azure 檔案服務磁碟區外掛程式的驅動程式名稱為 sfazurefile。 這個值是針對應用程式資訊清單中 Volume 標籤元素的 Driver 屬性所設定。

在上述程式碼片段的 Volume 標籤中,Azure 檔案儲存體磁碟區外掛程式需要下列屬性:

  • Source:這是磁碟區的名稱。 使用者可以為他們的磁碟區選擇任何名稱。
  • Destination:此屬性是磁碟區在執行中容器內所對應的位置。 因此,您的目的地不能是容器內的現有位置

如上述程式碼片段的 DriverOption 元素中所示,Azure 檔案服務磁碟區外掛程式支援下列驅動程式選項:

  • shareName:為容器提供磁碟區之 Azure 檔案服務檔案共用的名稱。

  • storageAccountName:包含 Azure 檔案服務檔案共用之 Azure 儲存體帳戶的名稱。

  • storageAccountKey:包含 Azure 檔案服務檔案共用之 Azure 儲存體帳戶的存取金鑰。

  • storageAccountFQDN - 與儲存體帳戶相關聯的網域名稱。 如果未指定 storageAccountFQDN,網域名稱會使用預設的尾碼 (.file.core.windows.net) 和 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" />
    

使用您自己的磁碟區或記錄驅動程式

Service Fabric 也允許使用您自己的自訂磁碟區記錄驅動程式。 如果叢集上未安裝 Docker 磁碟區/記錄驅動程式,可以使用 RDP/SSH 通訊協定來手動安裝它。 您可以透過虛擬機器擴展集啟動指令碼SetupEntryPoint 指令碼,使用這些通訊協定執行安裝。

安裝適用於 Azure 的 Docker 磁碟區驅動程式的指令碼範例如下所示:

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

在您的應用程式中,若要使用自己安裝的磁碟區或記錄驅動程式,您必須在應用程式資訊清單 ContainerHostPolicies 底下的 VolumeLogConfig 元素中指定適當的值。

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

指定磁碟區外掛程式時,Service Fabric 會使用指定的參數自動建立磁碟區。 [磁碟區] 元素的 [來源] 標記是磁碟區的名稱,而 [驅動程式] 標記會指定磁碟區驅動程式的外掛程式。 [目的地] 標記是 [來源] 在執行容器內所對應的位置。 因此,您的目的地不能是您容器內的現有位置。 您可以使用 [DriverOption] 標記來指定選項,如下所示:

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

先前資訊清單程式碼片段中所示的磁碟區支援應用程式參數 (尋找 MyStorageVar 以取得使用範例)。

如果指定了 Docker 記錄驅動程式,您就必須在叢集中部署代理程式 (或容器) 來處理記錄。 [DriverOption] 標記可以用來指定記錄驅動程式的選項。

下一步