Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описывается, как упаковать приложение Service Fabric и подготовить его к развертыванию.
Макет пакета
Манифест приложения, один или несколько манифестов службы и другие необходимые файлы пакетов должны быть организованы в определенном макете для развертывания в кластере Service Fabric. Примеры манифестов в этой статье должны быть организованы в следующей структуре каталогов:
tree /f .\MyApplicationType
D:\TEMP\MYAPPLICATIONTYPE
│ ApplicationManifest.xml
│
└───MyServiceManifest
│ ServiceManifest.xml
│
├───MyCode
│ MyServiceHost.exe
│
├───MyConfig
│ Settings.xml
│
└───MyData
init.dat
Папки именуются для сопоставления атрибутов Name каждого соответствующего элемента. Например, если манифест службы содержал два пакета кода с именами MyCodeA и MyCodeB, то две папки с одинаковыми именами будут содержать необходимые двоичные файлы для каждого пакета кода.
Использовать SetupEntryPoint
Типичные сценарии использования SetupEntryPoint — это когда необходимо запустить исполняемый файл перед запуском службы или выполнить операцию с повышенными привилегиями. Рассмотрим пример.
- Настройка и инициализация переменных среды, необходимых исполняемому файлу службы. Это не ограничивается только исполняемыми файлами, написанными с помощью моделей программирования Service Fabric. Например, npm.exe нужны определенные переменные среды, настроенные для развертывания приложения Node.js.
- Настройка контроля доступа посредством установки сертификатов безопасности.
Дополнительные сведения о настройке SetupEntryPoint см. в разделе "Настройка политики для точки входа установки службы"
Настройка
Создание пакета с помощью Visual Studio
Если вы использовали Visual Studio для создания приложения, можно использовать команду "Пакет " для автоматического создания пакета, соответствующего описанному выше макету.
Чтобы создать пакет, щелкните правой кнопкой мыши проект приложения в обозревателе решений и выберите команду "Пакет ".
После завершения упаковки можно найти расположение пакета в окне вывода . Шаг упаковки происходит автоматически при развертывании или отладке приложения в Visual Studio.
Создание пакета по командной строке
Кроме того, можно программно упаковать приложение с помощью msbuild.exe
. Под капотом Visual Studio запускает процесс так, чтобы вывод был одинаковым.
D:\Temp> msbuild HelloWorld.sfproj /t:Package
Тестирование пакета
Структуру пакета можно проверить локально с помощью PowerShell с помощью команды Test-ServiceFabricApplicationPackage . Эта команда проверяет наличие проблем с анализом манифеста и проверяет все ссылки. Эта команда проверяет только структурную правильность каталогов и файлов в пакете. Он не проверяет содержимое кода или пакета данных за пределами проверки наличия всех необходимых файлов.
Test-ServiceFabricApplicationPackage .\MyApplicationType
False
Test-ServiceFabricApplicationPackage : The EntryPoint MySetup.bat is not found.
FileName: C:\Users\servicefabric\AppData\Local\Temp\TestApplicationPackage_7195781181\nrri205a.e2h\MyApplicationType\MyServiceManifest\ServiceManifest.xml
Эта ошибка показывает, что файл MySetup.bat , указанный в манифесте службы SetupEntryPoint , отсутствует в пакете кода. После добавления отсутствующего файла проверка приложения проходит:
tree /f .\MyApplicationType
D:\TEMP\MYAPPLICATIONTYPE
│ ApplicationManifest.xml
│
└───MyServiceManifest
│ ServiceManifest.xml
│
├───MyCode
│ MyServiceHost.exe
│ MySetup.bat
│
├───MyConfig
│ Settings.xml
│
└───MyData
init.dat
Test-ServiceFabricApplicationPackage .\MyApplicationType
True
Если в приложении определены параметры приложения , их можно передать в Test-ServiceFabricApplicationPackage для правильной проверки.
Если вы знаете кластер, в котором будет развернуто приложение, рекомендуется передать параметр ImageStoreConnectionString
. В этом случае пакет также проверяется в предыдущих версиях приложения, которые уже работают в кластере. Например, проверка может определить, был ли уже развернут пакет с той же версией, но с другим содержимым.
После правильной упаковки приложения и прохождения проверки рассмотрите возможность сжатия пакета для ускорения операций развертывания.
Сжатие пакета
Если пакет большой или имеет много файлов, его можно сжать для ускорения развертывания. Сжатие уменьшает количество файлов и размер пакета. Для сжатого пакета приложения отправка пакета приложения может занять больше времени по сравнению с отправкой несжатого пакета, особенно если сжатие выполняется в процессе копирования. При сжатие регистрирование и отмена регистрации типа приложения выполняется быстрее.
Механизм развертывания одинаков для сжатых и несжатых пакетов. Если пакет сжимается, он хранится в хранилище образов кластера, и он распаковается на узле перед запуском приложения. Сжатие заменяет допустимый пакет Service Fabric сжатым версией. Папка должна разрешать разрешения на запись. Выполнение сжатия в уже сжатом пакете не приводит к изменениям.
Пакет можно сжать, выполнив команду Copy-ServiceFabricApplicationPackage с параметром CompressPackage
. Вы можете распаковыть пакет с той же командой, используя UncompressPackage
переключатель.
Следующая команда сжимает пакет, не копируя его в хранилище образов. При необходимости можно скопировать сжатый пакет в один или несколько кластеров Service Fabric, используя copy-ServiceFabricApplicationPackage без флага SkipCopy
.
Пакет теперь включает в себя архивированные файлы для пакетов code
, config
и data
. Манифест приложения и манифесты службы не архивируются, так как они необходимы для многих внутренних операций. Например, общий доступ к пакетам, имя типа приложения и извлечение версий для определенных проверок все необходимы для доступа к манифестам. Архивирование файлов манифестов сделает эти операции неэффективными.
tree /f .\MyApplicationType
D:\TEMP\MYAPPLICATIONTYPE
│ ApplicationManifest.xml
│
└───MyServiceManifest
│ ServiceManifest.xml
│
├───MyCode
│ MyServiceHost.exe
│ MySetup.bat
│
├───MyConfig
│ Settings.xml
│
└───MyData
init.dat
Copy-ServiceFabricApplicationPackage -ApplicationPackagePath .\MyApplicationType -CompressPackage -SkipCopy
tree /f .\MyApplicationType
D:\TEMP\MYAPPLICATIONTYPE
│ ApplicationManifest.xml
│
└───MyServiceManifest
ServiceManifest.xml
MyCode.zip
MyConfig.zip
MyData.zip
Кроме того, можно в один шаг сжать и скопировать пакет с помощью Copy-ServiceFabricApplicationPackage. Если пакет велик, укажите достаточное время ожидания, чтобы разрешить время сжатия пакета и отправки в кластер.
Copy-ServiceFabricApplicationPackage -ApplicationPackagePath .\MyApplicationType -ApplicationPackagePathInImageStore MyApplicationType -ImageStoreConnectionString fabric:ImageStore -CompressPackage -TimeoutSec 5400
В системе Service Fabric вычисляются контрольные суммы пакетов приложений с целью проверки. При использовании сжатия контрольные суммы вычисляются для файлов в формате ZIP каждого пакета. Создание нового ZIP-файла из одного пакета приложения создает различные контрольные суммы. Чтобы предотвратить ошибки проверки, используйте дифференциальное предоставление. При использовании этого параметра не включайте без изменений пакеты в новую версию. Вместо этого ссылайте их непосредственно из нового манифеста службы.
Если подготовка диффа не является параметром и необходимо включить пакеты, создать новые версии для пакета config
и data
пакеты, code
чтобы избежать несоответствия контрольной суммы. Создание новых версий для неизменяемых пакетов необходимо при использовании сжатого пакета независимо от того, используется ли предыдущая версия сжатием или нет.
Теперь пакет упаковается правильно, проверяется и сжимается (при необходимости), поэтому он готов к развертыванию в одном или нескольких кластерах Service Fabric.
Сжатие пакетов при развертывании с помощью Visual Studio
Вы можете указать Visual Studio сжать пакеты при развертывании, добавив элемент CopyPackageParameters
в профиль публикации и установив атрибут CompressPackage
на true
.
<PublishProfile xmlns="http://schemas.microsoft.com/2015/05/fabrictools">
<ClusterConnectionParameters ConnectionEndpoint="mycluster.westus.cloudapp.azure.com" />
<ApplicationParameterFile Path="..\ApplicationParameters\Cloud.xml" />
<CopyPackageParameters CompressPackage="true"/>
</PublishProfile>
Создание sfpkg
Начиная с версии 6.1, Service Fabric позволяет использовать внешнее хранилище.
С помощью этого параметра пакет приложения не должен быть скопирован в хранилище образов. Вместо этого можно создать sfpkg
файл и отправить его во внешнее хранилище, а затем указать URI для скачивания в Service Fabric при развертывании. Один и тот же пакет можно развернуть в нескольких кластерах. Подготовка из внешнего хранилища экономит время, необходимое для копирования пакета в каждый кластер.
Файл sfpkg
представляет собой ZIP-файл, содержащий исходный пакет приложения и имеющий расширение .sfpkg
. В zip-файле пакет приложения можно сжимать или распаковывать. Сжатие пакета приложения внутри ZIP выполняется на уровнях кода, конфигурации и пакетов данных, как упоминалось ранее.
Чтобы создать sfpkg
файл, начните с папки, содержащей исходный пакет приложения, сжатый или нет. Затем используйте любую программу для zip-папки с расширением .sfpkg. Например, используйте ZipFile.CreateFromDirectory.
ZipFile.CreateFromDirectory(appPackageDirectoryPath, sfpkgFilePath);
Он sfpkg
должен быть отправлен во внешнее хранилище вне полосы, за пределами Service Fabric. Внешнее хранилище может быть любым хранилищем, предоставляющим конечную точку REST http или https. Во время подготовки Service Fabric выполняет операцию GET для скачивания sfpkg
пакета приложения, поэтому магазин должен разрешить доступ READ для пакета.
Чтобы подготовить пакет, используйте внешнюю подготовку, которая требует URI загрузки и сведений о типе приложения.
Примечание.
Конфигурирование на основе относительного пути в хранилище образов в настоящее время не поддерживает sfpkg
файлы. Поэтому sfpkg
не следует копировать в хранилище образов.
Дальнейшие действия
Развертывание и удаление приложений описывает использование PowerShell для управления экземплярами приложений
Управление параметрами приложения для нескольких сред описывает настройку параметров и переменных среды для разных экземпляров приложений.
Настройка политик безопасности для приложения описывает, как запускать службы под политиками безопасности, чтобы ограничить доступ.