Развертывание и удаление приложений с помощью PowerShell


После создания пакета приложения его можно развернуть в кластере Azure Service Fabric. Развертывание включает следующие три шага:

  1. Отправка пакета приложения в хранилище образов.
  2. Регистрация типа приложения с помощью относительного пути к хранилищу образов.
  3. Создайте экземпляр приложения.

Если развернутое приложение больше не нужно, можно удалить экземпляр приложения и соответствующий тип приложения. Полное удаление приложения из кластера включает следующие действия:

  1. Удаление запущенного экземпляра приложения.
  2. Отмена регистрации типа приложения, если он больше не нужен.
  3. Удаление пакета приложения из хранилища образов.

Если вы используете Visual Studio для развертывания и отладки приложений в локальном кластере разработки, все описанные выше действия выполняются автоматически с помощью сценария PowerShell. Этот сценарий находится в папке Scripts проекта приложения. Эта статья содержит основные сведения о действиях, выполняемых этим сценарием. Они помогут вам выполнять те же операции вне Visual Studio.

Также можно развернуть приложение с помощью внешней подготовки. Пакет приложения можно упаковатьsfpkg в файл и передать во внешнее хранилище. В этом случае его не нужно отправлять в хранилище образов. Для развертывания сделайте следующее:

  1. Отправьте файл sfpkg во внешнее хранилище. Внешним хранилищем может быть любое хранилище, предоставляющее конечную точку REST HTTP или HTTPS.
  2. Зарегистрируйте тип приложения, указав внешний URI скачивания и тип приложения.
  3. Создайте экземпляр приложения.

Для очистки удалите экземпляры приложения и отмените регистрацию типа приложения. Так как пакет не был скопирован в хранилище образов, очистка во временном расположении не требуется. Подготовка во внешнем хранилище доступна начиная с версии Service Fabric 6.1.

Примечание.

В Visual Studio внешняя подготовка сейчас не поддерживается.

Подключение к кластеру

Перед выполнением команд PowerShell, описанных в этой статье, нужно подключиться к кластеру Service Fabric с помощью команды Connect-ServiceFabricCluster. Чтобы подключиться к локальному кластеру разработки, выполните следующую команду:

Connect-ServiceFabricCluster

Примеры подключения к удаленному кластеру или кластеру, защищенному с помощью идентификатора Microsoft Entra, сертификатов X509 или Windows Active Directory, см. Подключение к безопасному кластеру.

Загрузка пакета приложения

Отправка пакета приложения означает, что он помещается в расположение, доступное внутренним компонентам Service Fabric. Если вы хотите проверить пакет приложения локально, используйте командлет Test-ServiceFabricApplicationPackage.

Команда Copy-ServiceFabricApplicationPackage передает пакет приложения в хранилище образов кластера.

Предположим, вы собрали и упаковали в Visual Studio 2015 приложение с именем MyApplication. По умолчанию имя типа приложения отображается в файле ApplicationManifest.xml как MyApplicationType. Пакет приложения, который содержит необходимый манифест приложения, манифесты служб и пакеты code/config/data, находится в папке C:\Users<имя_пользователя>\Documents\Visual Studio 2015\Projects\MyApplication\MyApplication\pkg\Debug.

Следующая команда выводит содержимое пакета приложения:

$path = 'C:\Users\<user\>\Documents\Visual Studio 2015\Projects\MyApplication\MyApplication\pkg\Debug'
tree /f $path
Folder PATH listing for volume OSDisk
Volume serial number is 0459-2393
C:\USERS\USER\DOCUMENTS\VISUAL STUDIO 2015\PROJECTS\MYAPPLICATION\MYAPPLICATION\PKG\DEBUG
│   ApplicationManifest.xml
│
└───Stateless1Pkg
    │   ServiceManifest.xml
    │
    ├───Code
    │       Microsoft.ServiceFabric.Data.dll
    │       Microsoft.ServiceFabric.Data.Interfaces.dll
    │       Microsoft.ServiceFabric.Internal.dll
    │       Microsoft.ServiceFabric.Internal.Strings.dll
    │       Microsoft.ServiceFabric.Services.dll
    │       ServiceFabricServiceModel.dll
    │       Stateless1.exe
    │       Stateless1.exe.config
    │       Stateless1.pdb
    │       System.Fabric.dll
    │       System.Fabric.Strings.dll
    │
    └───Config
            Settings.xml

Если пакет приложения большой или имеет большое количество файлов, его можно сжать. Сжатие уменьшает размер и количество файлов. Это ускоряет регистрацию и отмену регистрации типа приложения. Время загрузки может увеличиться, особенно если требуется сжать пакет.

Чтобы сжать пакет, используйте команду Copy-ServiceFabricApplicationPackage. Сжатие можно выполнить отдельно от загрузки с помощью флага SkipCopy или во время операции загрузки. Применить сжатие к сжатому пакету невозможно. Чтобы распаковать пакет, используйте команду Copy-ServiceFabricApplicationPackage с параметром UncompressPackage.

Следующий командлет сжимает пакет, не копируя его в хранилище образов. Теперь пакет содержит ZIP-файлы для пакетов Code и Config. Приложение и манифесты служб не сжимаются, так как они используются для множества внутренних операций (совместный доступ к пакетам, извлечение имени типа или версии приложения для некоторых проверок и т. д.). Сжатие манифеста снизит эффективность таких операций.

Copy-ServiceFabricApplicationPackage -ApplicationPackagePath $path -CompressPackage -SkipCopy
tree /f $path
Folder PATH listing for volume OSDisk
Volume serial number is 0459-2393
C:\USERS\USER\DOCUMENTS\VISUAL STUDIO 2015\PROJECTS\MYAPPLICATION\MYAPPLICATION\PKG\DEBUG
|   ApplicationManifest.xml
|
└───Stateless1Pkg
       Code.zip
       Config.zip
       ServiceManifest.xml

Для больших пакетов приложений сжатие занимает некоторое время. Для получения наилучших результатов используйте быстрый SSD-диск. Время сжатия и размер сжатого пакета также зависят от содержимого пакета. Ниже приведена статистика сжатия для некоторых пакетов, отражающая первоначальный и сжатый размер, а также время сжатия.

Исходный размер (МБ) Число файлов Время сжатия Размер сжатого пакета (МБ)
100 100 00:00:03.3547592 60
512 100 00:00:16.3850303 307
1024 500 00:00:32.5907950 615
2048 1000 00:01:04.3775554 1231
5012 100 00:02:45.2951288 3074

При необходимости после сжатия пакет можно загрузить в один или несколько кластеров Service Fabric. Для сжатых и несжатых пакетов используется одинаковый механизм развертывания. Сжатые пакеты хранятся в неизменном виде в хранилище образов кластера. Пакеты распаковываются на узле перед запуском приложения.

Следующий пример передает пакет в папку MyApplicationV1 хранилища образов:

Copy-ServiceFabricApplicationPackage -ApplicationPackagePath $path -ApplicationPackagePathInImageStore MyApplicationV1 -TimeoutSec 1800

Если вы не укажете параметр -ApplicationPackagePathInImageStore, пакет приложения будет скопирован в папку Debug хранилища образов.

Примечание.

Командлет Copy-ServiceFabricApplicationPackage автоматически обнаружит строку подключения к соответствующему хранилищу образов, если сеанс PowerShell подключен к кластеру Service Fabric. Для версий Service Fabric старше 5.6 необходимо явно указать аргумент -ImageStoreConnectionString.

PS C:\> Copy-ServiceFabricApplicationPackage -ApplicationPackagePath $path -ApplicationPackagePathInImageStore MyApplicationV1 -ImageStoreConnectionString (Get-ImageStoreConnectionStringFromClusterManifest(Get-ServiceFabricClusterManifest)) -TimeoutSec 1800

Командлет Get-ImageStoreConnectionStringFromClusterManifest , являющийся частью модуля PowerShell пакета SDK для Service Fabric, позволяет получить строку подключения хранилища образов. Чтобы импортировать модуль пакета SDK, выполните следующую команду.

Import-Module "$ENV:ProgramFiles\Microsoft SDKs\Service Fabric\Tools\PSModule\ServiceFabricSDK\ServiceFabricSDK.psm1"

В статье Общие сведения о параметре ImageStoreConnectionString вы найдете дополнительные сведения о хранилище образов и строке подключения к этому хранилищу.

Время, необходимое для загрузки пакета, зависит от нескольких факторов. Некоторые из них: число файлов в пакете, размер пакета и размеры файлов. Скорость сетевого подключения между исходным компьютером и кластером Service Fabric также влияет на время загрузки. Время ожидания по умолчанию для Copy-ServiceFabricApplicationPackage — 30 минут. В зависимости от указанных факторов время ожидания может увеличиться. При сжатии пакета в вызове копирования необходимо также учитывать время сжатия.

Регистрация пакета приложения

При регистрации пакета приложения его тип и версия, объявленные в манифесте приложения, становятся доступными для использования. Система считывает содержимое пакета, переданного на предыдущем этапе, проверяет пакет, обрабатывает его содержимое и копирует обработанный пакет во внутреннее системное расположение.

Выполните команду Register-ServiceFabricApplicationType, чтобы зарегистрировать тип приложения в кластере и сделать его доступным для развертывания:

Регистрация пакета приложения, скопированного в хранилище образов

Если пакет ранее был скопирован в хранилище образов, операция регистрации указывает относительный путь к хранилищу образов.

Register-ServiceFabricApplicationType -ApplicationPathInImageStore MyApplicationV1
Register application type succeeded

MyApplicationV1 — это папка в хранилище образов, в которой находится пакет приложения. Тип приложения с именем MyApplicationType и версией 1.0.0 (оба параметра находятся в манифесте приложения) зарегистрирован в кластере.

Регистрация пакета приложения, скопированного во внешнее хранилище

Начиная с версии Service Fabric 6.1 при подготовке поддерживается скачивание пакета из внешнего хранилища. URI скачивания представляет собой путь к пакету приложения sfpkg, по которому можно скачать пакет приложения с помощью протоколов HTTP или HTTPS. Пакет необходимо заранее отправить в это внешнее расположение. Для скачивания файла с помощью Service Fabric необходимо, чтобы URI предоставлял доступ на чтение. Файл sfpkg должен иметь расширение SFPKG. Операция подготовки должна включать сведения о типе приложения, который указан в манифесте приложения.

Register-ServiceFabricApplicationType -ApplicationPackageDownloadUri "https://sftestresources.blob.core.windows.net:443/sfpkgholder/MyAppPackage.sfpkg" -ApplicationTypeName MyApp -ApplicationTypeVersion V1 -Async

Команда Register-ServiceFabricApplicationType возвращает данные только после того, как система успешно зарегистрирует пакет приложения. Продолжительность регистрации зависит от размера и содержимого пакета приложения. При необходимости можно увеличить время ожидания, указав параметр -TimeoutSec (по умолчанию время ожидания составляет 60 секунд).

Если размер пакета настолько большой, что приводит к превышению времени ожидания, используйте параметр -Async. Эта команда возвращается, когда кластер принимает команду регистрации. Операция регистрации продолжается при необходимости. Чтобы вывести список версий типов приложения и их состояние регистрации, используйте команду Get-ServiceFabricApplicationType. Эта команда используется, чтобы определить, что регистрация выполнена.

Get-ServiceFabricApplicationType
ApplicationTypeName    : MyApplicationType
ApplicationTypeVersion : 1.0.0
Status                 : Available
DefaultParameters      : { "Stateless1_InstanceCount" = "-1" }

Удаление пакета приложения из хранилища образов

Если пакет был скопирован в хранилище образов, его следует удалить из временного расположения после успешной регистрации приложения. Удаление пакетов приложений из хранилища образов освобождает системные ресурсы. Если хранить неиспользуемые пакеты, они занимают место на диске и создают проблемы производительности приложения.

Remove-ServiceFabricApplicationPackage -ApplicationPackagePathInImageStore MyApplicationV1

Создание приложения

Чтобы создать экземпляр приложения, можно использовать любую зарегистрированную версию типа приложения. Для этого выполните командлет New-ServiceFabricApplication. Имя приложения должно начинаться со схемы fabric: и быть уникальным для каждого экземпляра приложения. Если в манифесте приложения для конкретного его типа были определены службы по умолчанию, то они также будут созданы.

New-ServiceFabricApplication fabric:/MyApp MyApplicationType 1.0.0
ApplicationName        : fabric:/MyApp
ApplicationTypeName    : MyApplicationType
ApplicationTypeVersion : 1.0.0
ApplicationParameters  : {}

Для каждой версии зарегистрированного типа приложения можно создать несколько экземпляров приложения. Каждый экземпляр выполняется изолированно, используя собственный рабочий каталог и процесс.

Чтобы увидеть, какие приложения и службы работают в кластере, выполните командлеты Get-ServiceFabricApplication и Get-ServiceFabricService:

Get-ServiceFabricApplication  
ApplicationName        : fabric:/MyApp
ApplicationTypeName    : MyApplicationType
ApplicationTypeVersion : 1.0.0
ApplicationStatus      : Ready
HealthState            : Ok
ApplicationParameters  : {}
Get-ServiceFabricApplication | Get-ServiceFabricService
ServiceName            : fabric:/MyApp/Stateless1
ServiceKind            : Stateless
ServiceTypeName        : Stateless1Type
IsServiceGroup         : False
ServiceManifestVersion : 1.0.0
ServiceStatus          : Active
HealthState            : Ok

Удаление приложения

Экземпляр приложения, который больше не нужен, можно удалить без возможности восстановления с помощью командлета Remove-ServiceFabricApplication. Командлет Remove-ServiceFabricApplication также удаляет все службы, которые относятся к этому приложению, и все их состояния.

Предупреждение

Эта операция необратима, и вы не сможете восстановить состояние приложения.

Remove-ServiceFabricApplication fabric:/MyApp
Confirm
Continue with this operation?
[Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"):
Remove application instance succeeded
Get-ServiceFabricApplication

Отмена регистрации типа приложения

Если определенная версия типа приложения больше не требуется, отмените регистрацию типа приложения, используя командлет Unregister-ServiceFabricApplicationType. Отмена регистрации неиспользуемых типов приложений позволяет освободить пространство в хранилище, которое занимает хранилище образов, за счет удаления файлов типов приложений. При отмене регистрации типа приложения пакет приложения, скопированный во временное расположение хранилища образов, не удаляется, если использовалась команда копирования в хранилище образов. Регистрацию типа приложения можно отменить в том случае, если на его основе не были созданы экземпляры приложений и нет ссылающихся на него незавершенных обновлений приложений.

Чтобы просмотреть все типы приложений, зарегистрированных в кластере, запустите командлет Get-ServiceFabricApplicationType:

Get-ServiceFabricApplicationType
ApplicationTypeName    : MyApplicationType
ApplicationTypeVersion : 1.0.0
Status                 : Available
DefaultParameters      : { "Stateless1_InstanceCount" = "-1" }

Запустите командлет Unregister-ServiceFabricApplicationType, чтобы отменить регистрацию приложения определенного типа:

Unregister-ServiceFabricApplicationType MyApplicationType 1.0.0

Устранение неполадок

Команда Copy-ServiceFabricApplicationPackage запрашивает строку ImageStoreConnectionString

В пакете разработки Service Fabric SDK уже предусмотрены все необходимые значения по умолчанию. Тем не менее, при необходимости значение ImageStoreConnectionString для всех команд должно совпадать со значением, используемым кластером Service Fabric. Значение ImageStoreConnectionString можно найти в манифесте кластера, используя команды Get-ServiceFabricClusterManifest и Get-ImageStoreConnectionStringFromClusterManifest.

Get-ImageStoreConnectionStringFromClusterManifest(Get-ServiceFabricClusterManifest)

Командлет Get-ImageStoreConnectionStringFromClusterManifest , являющийся частью модуля PowerShell пакета SDK для Service Fabric, позволяет получить строку подключения хранилища образов. Чтобы импортировать модуль пакета SDK, выполните следующую команду.

Import-Module "$ENV:ProgramFiles\Microsoft SDKs\Service Fabric\Tools\PSModule\ServiceFabricSDK\ServiceFabricSDK.psm1"

Ниже представлено значение ImageStoreConnectionString из манифеста кластера.

<ClusterManifest xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" Name="Server-Default-SingleNode" Version="1.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">

    [...]

    <Section Name="Management">
      <Parameter Name="ImageStoreConnectionString" Value="file:D:\ServiceFabric\Data\ImageStore" />
    </Section>

    [...]

В статье Общие сведения о параметре ImageStoreConnectionString вы найдете дополнительные сведения о хранилище образов и строке подключения к этому хранилищу.

Развертывание пакета приложения большего размера

Проблема. Время ожидания выполнения команды Copy-ServiceFabricApplicationPackage истекает для пакета большого приложения (несколько ГБ). Попробуйте следующее:

  • Задайте большее время ожидания для команды Copy-ServiceFabricApplicationPackage с помощью параметра TimeoutSec. По умолчанию время ожидания составляет 30 минут.
  • Проверьте сетевое подключение между исходным компьютером и кластером. Если подключение медленное, рассмотрите возможность использовать машину с лучшим сетевым соединением. Возможно, клиентский компьютер находится не в одном регионе с кластером, тогда перейдите на компьютер, который находится с ним в одном регионе или в регионе поблизости.
  • Проверьте, достигнуто ли внешнее регулирование. Например, если хранилище образов настроено для использования хранилища Аzure, загрузку можно регулировать.

Проблема. Загрузка пакета завершена успешно, но время ожидания для выполнения команды Register-ServiceFabricApplicationType истекает. Решение.

  • Выполните сжатие пакета перед копированием в хранилище образов. Сжатие уменьшает размер и число файлов, что, в свою очередь, снижает объем трафика и работу, которую необходимо выполнить Service Fabric. Операция загрузки может выполняться медленнее (особенно при выполнении сжатия), но регистрация и отмена регистрации типа приложения выполняются быстрее.
  • Задайте большее время ожидания для выполнения команды Register-ServiceFabricApplicationType с помощью параметра TimeoutSec.
  • Задайте параметр Async для команды Register-ServiceFabricApplicationType. Эта команда возвращается, когда кластер принимает команду, и подготовка продолжается асинхронно. По этой причине здесь нет необходимости указывать большее значение времени ожидания. Чтобы вывести список зарегистрированных версий типов приложения и их состояние регистрации, используйте команду Get-ServiceFabricApplicationType. Эта команда используется, чтобы определить, что регистрация выполнена.
Get-ServiceFabricApplicationType
ApplicationTypeName    : MyApplicationType
ApplicationTypeVersion : 1.0.0
Status                 : Available
DefaultParameters      : { "Stateless1_InstanceCount" = "-1" }

Развертывание пакета приложения с несколькими файлами

Проблема. Время ожидания для выполнения команды Register-ServiceFabricApplicationType истекает для пакета приложения с несколькими файлами (несколько тысяч). Попробуйте следующее:

  • Выполните сжатие пакета перед копированием в хранилище образов. Сжатие уменьшает количество файлов.
  • Задайте большее время ожидания для выполнения команды Register-ServiceFabricApplicationType с помощью параметра TimeoutSec.
  • Задайте параметр Async для команды Register-ServiceFabricApplicationType. Эта команда возвращается, когда кластер принимает команду, и подготовка продолжается асинхронно. По этой причине здесь нет необходимости указывать большее значение времени ожидания. Чтобы вывести список зарегистрированных версий типов приложения и их состояние регистрации, используйте команду Get-ServiceFabricApplicationType. Эта команда используется, чтобы определить, что регистрация выполнена.
Get-ServiceFabricApplicationType
ApplicationTypeName    : MyApplicationType
ApplicationTypeVersion : 1.0.0
Status                 : Available
DefaultParameters      : { "Stateless1_InstanceCount" = "-1" }

Следующие шаги

Создание пакета приложения

Обновление приложения Service Fabric

Общие сведения о работоспособности Service Fabric

Диагностика и устранение неполадок службы Service Fabric

Моделирование приложения в Service Fabric