Драйвер тома службы "Файлы Azure" для Service Fabric
Подключаемый драйвер тома службы "Файлы Azure" — это подключаемый модуль тома Docker, предоставляющий тома на основе Файлов Azure для контейнеров Docker. Он упаковано как приложение Service Fabric, которое можно развернуть в кластере Service Fabric, чтобы предоставить тома для других приложений контейнеров Service Fabric в кластере.
Примечание.
Была выпущена общедоступная версия подключаемого модуля тома службы файлов Azure 6.5.661.9590
Необходимые компоненты
Версия подключаемого модуля тома службы файлов Azure для Windows работает только в операционных системах Windows Server версии 1709, Windows 10 версии 1709 или более поздних версий.
Версия подключаемого модуля тома службы файлов Azure для Linux работает во всех версиях операционной системы, поддерживаемых Service Fabric.
Подключаемый модуль тома службы файлов Azure работает с Service Fabric версии 6.2 и новее.
Следуйте инструкциям в документации по службе файлов Azure, чтобы создать файловый ресурс для контейнерного приложения Service Fabric, который будет использован в качестве тома.
Вам потребуется PowerShell с установленным модулем Service Fabric или SFCTL .
Если вы используете контейнеры Hyper-V, в раздел ClusterManifest (локальный кластер) или fabricSettings в шаблоне Azure Resource Manager (кластере Azure) или ClusterConfig.json (автономный кластер) необходимо добавить следующие фрагменты кода.
В файле ClusterManifest в раздел Hosting нужно добавить приведенный ниже код. В этом примере имя тома — sfazurefile, а порт, через который должны передаваться ожидаемые в кластере данные, — 19100. Замените их соответствующими значениями для своего кластера.
<Section Name="Hosting">
<Parameter Name="VolumePluginPorts" Value="sfazurefile:19100" />
</Section>
В разделе fabricSettings шаблона Azure Resource Manager (для развертываний Azure) или ClusterConfig.json (для автономных развертываний) необходимо добавить указанный ниже фрагмент кода. Снова замените имя тома и значения порта своими собственными.
"fabricSettings": [
{
"name": "Hosting",
"parameters": [
{
"name": "VolumePluginPorts",
"value": "sfazurefile:19100"
}
]
}
]
Развертывание примера приложения с помощью драйвера тома службы "Файлы Azure"
Использование Azure Resource Manager с помощью предоставленного скрипта PowerShell (рекомендуется)
Если кластер работает на базе Azure, мы рекомендуем развернуть в него приложение Azure Resource Manager с помощью модели ресурсов приложения Azure Resource Manager для удобства использования и перехода к модели обслуживания инфраструктуры в качестве кода. Такой подход избавляет от необходимости отслеживать версии приложения для драйвера тома службы "Файлы Azure". Он также позволяет обслуживать отдельные шаблоны Azure Resource Manager для каждой поддерживаемой ОС. Сценарий предполагает, что вы развертываете последнюю версию приложения Файлы Azure и принимает параметры для типа ОС, идентификатора подписки кластера и группы ресурсов. Вы можете скачать скрипт на сайте загрузок Service Fabric. Обратите внимание, что этот параметр автоматически задает ListenPort, являющийся портом, на котором подключаемый модуль тома службы "Файлы Azure" прослушивает запросы от управляющей программы Docker к порту 19100. Вы можете изменить его, добавив параметр с именем listenPort. Убедитесь, что порт не конфликтует с любым другим портом, используемым кластером или приложениями.
Команда развертывания Azure Resource Manager для Windows:
.\DeployAzureFilesVolumeDriver.ps1 -subscriptionId [subscriptionId] -resourceGroupName [resourceGroupName] -clusterName [clusterName] -windows
Команда развертывания Azure Resource Manager для Linux:
.\DeployAzureFilesVolumeDriver.ps1 -subscriptionId [subscriptionId] -resourceGroupName [resourceGroupName] -clusterName [clusterName] -linux
После успешного выполнения скрипта можно перейти к разделу настройки приложения.
Развертывание автономных кластеров вручную
Приложение Service Fabric, которое предоставляет тома для контейнеров, можно скачать на сайте загрузок Service Fabric. Это приложение можно развернуть в кластере с помощью PowerShell, интерфейса командной строки или интерфейсов API FabricClient.
Используя командную строку, перейдите в корневой каталог скачанного пакета приложения.
cd .\AzureFilesVolume\
cd ~/AzureFilesVolume
Далее скопируйте пакет приложения в хранилище образов с соответствующими значениями для [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
регистрация типа приложения;
Register-ServiceFabricApplicationType -ApplicationPathInImageStore AzureFilesVolumePlugin
sfctl application provision --application-type-build-path [ApplicationPackagePath]
Создайте приложение, обратив особое внимание на значение параметра приложения ListenPort. Значение — это порт, через который подключаемый модуль тома службы "Файлы Azure" ожидает передачи запросов из управляющей программы Docker. Убедитесь, что предоставленный приложению порт соответствует VolumePluginPorts в ClusterManifest и не конфликтует с любым другим портом, используемым кластером или приложениями.
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. Это значение устанавливается для атрибута Driver элемента тега Volume в манифесте приложения.
В теге 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.
Пример скрипта установки драйвера тома Docker для Azure:
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
Чтобы использовать установленный драйвер тома или ведения журнала в своих приложениях, потребуется указать соответствующие значения в элементах Volume и LogConfig в разделе ContainerHostPolicies в манифесте приложения.
<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 автоматически создает том, используя заданные параметры. Тег Source в элементе Volume — это имя тома, а тег 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.