Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Azure 文件存储卷驱动程序是一个 Docker 卷插件,为 Docker 容器提供基于 Azure 文件存储的卷。 它被打包为可部署到 Service Fabric 群集的 Service Fabric 应用程序,以便为群集内的其他 Service Fabric 容器应用程序提供卷。
注意
Azure 文件存储卷插件的版本 6.5.661.9590 已正式发布。
先决条件
Windows 版 Azure 文件卷插件仅适用于 Windows Server 1709 版、Windows 10 1709 版或更高版本的操作系统。
Linux 版 Azure 文件卷插件适用于 Service Fabric 支持的所有操作系统版本。
Azure 文件卷插件仅适用于 Service Fabric 6.2 和更高版本。
按照 Azure 文件文档中的说明,为要用作卷的 Service Fabric 容器应用程序创建文件共享。
如果使用的是 Hyper-V 容器,则需要在 Azure 资源管理器模板(Azure 群集)或 ClusterConfig.json(独立群集)的 ClusterManifest(本地群集)或 fabricSettings 部分中添加以下代码片段。
在 ClusterManifest 中,需要在“Hosting”节中添加以下内容。 在此示例中,卷名为 sfazurefile,它在群集上侦听的端口为 19100。 请将它们替换为你的群集的正确值。
<Section Name="Hosting">
<Parameter Name="VolumePluginPorts" Value="sfazurefile:19100" />
</Section>
在 Azure 资源管理器模板(适用于 Azure 部署)或 ClusterConfig.json(适用于独立部署)的 fabricSettings 节中,需要添加以下代码片段。 同样,将卷名和端口值替换为你自己的值。
"fabricSettings": [
{
"name": "Hosting",
"parameters": [
{
"name": "VolumePluginPorts",
"value": "sfazurefile:19100"
}
]
}
]
使用 Service Fabric Azure 文件存储卷驱动程序部署示例应用程序
通过提供的 PowerShell 脚本使用 Azure 资源管理器(建议)
如果群集基于 Azure,建议使用 Azure 资源管理器应用程序资源模型将应用程序部署到群集,既可方便使用,也有助于迁移到将基础结构作为代码进行维护的模型。 此方法不需跟踪 Azure 文件存储卷驱动程序的应用版本。 另外,这样还可以为每个支持的 OS 保留单独的 Azure 资源管理器模板。 脚本会假设你部署的是最新版本的 Azure 文件存储应用程序,并将提取 OS 类型、群集订阅 ID 和资源组的参数。 可从 Service Fabric 下载站点下载该脚本。 请注意,这会自动将 ListenPort(Azure 文件存储卷插件从 Docker 守护程序侦听请求的端口)设置为 19100。 可以通过添加名为“listenPort”的参数来更改它。 请确保此端口不会与群集或应用程序使用的任何其他端口发生冲突。
用于 Windows 的 Azure 资源管理器部署命令:
.\DeployAzureFilesVolumeDriver.ps1 -subscriptionId [subscriptionId] -resourceGroupName [resourceGroupName] -clusterName [clusterName] -windows
用于 Linux 的 Azure 资源管理器部署命令:
.\DeployAzureFilesVolumeDriver.ps1 -subscriptionId [subscriptionId] -resourceGroupName [resourceGroupName] -clusterName [clusterName] -linux
成功运行脚本以后,即可跳到配置应用程序部分。
针对独立群集的手动部署
可以从 Service Fabric 下载站点下载为容器提供卷的 Service Fabric 应用程序。 可以通过 PowerShell、CLI 或 FabricClient API 将应用程序部署到群集。
使用命令行,将目录更改为已下载的应用程序包的根目录。
cd .\AzureFilesVolume\
cd ~/AzureFilesVolume
接下来,使用 [ApplicationPackagePath] 和 [ImageStoreConnectionString] 的相应值将应用程序包复制到映像存储区:
Copy-ServiceFabricApplicationPackage -ApplicationPackagePath [ApplicationPackagePath] -ImageStoreConnectionString [ImageStoreConnectionString] -ApplicationPackagePathInImageStore AzureFilesVolumePlugin
sfctl cluster select --endpoint https://testcluster.chinanorth.cloudapp.chinacloudapi.cn:19080 --pem test.pem --no-verify sfctl application upload --path [ApplicationPackagePath] --show-progress
注册应用程序类型
Register-ServiceFabricApplicationType -ApplicationPathInImageStore AzureFilesVolumePlugin
sfctl application provision --application-type-build-path [ApplicationPackagePath]
创建应用程序,密切注意 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 支持此操作)。 这样可以阻止网络卷映射和 Azure 文件卷驱动程序出现在早于 1709 的版本上。
在本地开发群集上部署应用程序
执行上面的步骤 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.chinacloudapi.cn) 与 storageAccountName 一起形成域名。
- Example1: <DriverOption Name="shareName" Value="myshare1" /> <DriverOption Name="storageAccountName" Value="myaccount1" /> <DriverOption Name="storageAccountKey" Value="mykey1" /> <!-- storageAccountFQDN will be "myaccount1.file.core.chinacloudapi.cn" --> - 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 下方的 Volume 和 LogConfig 元素中指定相应的值。
<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 使用指定的参数自动创建卷。 “Volume”元素的“Source”标记是卷的名称,“Driver”标记指定卷驱动程序插件。 “Destination”标记是“Source”在运行的容器中映射到的位置。 因此,目标不能为容器中的现有位置。 使用 DriverOption 标记可指定选项,如下所示:
<Volume Source="myvolume1" Destination="c:\testmountlocation4" Driver="azure" IsReadOnly="true">
<DriverOption Name="share" Value="models"/>
</Volume>
应用程序支持参数卷中前面的清单代码段所示(查找 MyStorageVar
有关用法示例)。
如果指定了 Docker 日志记录驱动程序,则需要部署代理(或容器)以处理群集中的日志。 DriverOption 标记可用于指定日志记录驱动程序的选项。
后续步骤
- 要查看容器示例(包括卷驱动程序),请访问 Service Fabric 容器示例
- 要将容器部署到 Service Fabric 群集,请参阅在 Service Fabric 上部署容器一文