Контейнеризация служб Service Fabric Reliable Services и Reliable Actors в Windows
Service Fabric поддерживает контейнеризацию микрослужб Service Fabric (службы на основе Reliable Services и Reliable Actors). Дополнительные сведения см. в статье Service Fabric и контейнеры.
Из этого документа вы узнаете, как обеспечить работу службы в контейнере Windows.
Примечание.
Сейчас эта функция работает только в Windows. Чтобы запустить контейнеры, кластер должен работать на компьютере под управлением Windows Server 2016 с контейнерами.
Инструкции по контейнеризации приложения Service Fabric
Откройте приложение Service Fabric в Visual Studio.
Добавьте класс SFBinaryLoader.cs в проект. Код в этом классе является вспомогательным приложением для правильной загрузки двоичных файлов среды выполнения Service Fabric в приложение, которое работает в контейнере.
Каждый пакет кода, который вы бы хотели контейнеризовать, инициализирует загрузчик на точке входа программы. Добавьте статический конструктор, показанный в следующем фрагменте кода, в файл точки входа программы.
namespace MyApplication { internal static class Program { static Program() { SFBinaryLoader.Initialize(); } /// <summary> /// This is the entry point of the service host process. /// </summary> private static void Main() {
Выполните сборку проекта и упакуйте его. Чтобы выполнить сборку проекта и создать пакет, щелкните правой кнопкой проект приложения в обозревателе решений и выберите команду Пакет.
Для каждого пакета кода, который нужно контейнеризовать, запустите скрипт PowerShell CreateDockerPackage.ps1. Оно используется следующим образом.
Полная версия .NET
$codePackagePath = 'Path to the code package to containerize.' $dockerPackageOutputDirectoryPath = 'Output path for the generated docker folder.' $applicationExeName = 'Name of the Code package executable.' CreateDockerPackage.ps1 -CodePackageDirectoryPath $codePackagePath -DockerPackageOutputDirectoryPath $dockerPackageOutputDirectoryPath -ApplicationExeName $applicationExeName
.NET Core
$codePackagePath = 'Path to the code package to containerize.' $dockerPackageOutputDirectoryPath = 'Output path for the generated docker folder.' $dotnetCoreDllName = 'Name of the Code package dotnet Core Dll.' CreateDockerPackage.ps1 -CodePackageDirectoryPath $codePackagePath -DockerPackageOutputDirectoryPath $dockerPackageOutputDirectoryPath -DotnetCoreDllName $dotnetCoreDllName
Скрипт создает папку с артефактами Docker в папке $dockerPackageOutputDirectoryPath. Измените созданный файл Dockerfile, чтобы
expose
порты, запустить скрипты установки и при необходимости выполнить другие действия.Теперь выполните сборку пакета контейнера Docker и отправьте его в репозиторий.
Измените файлы ApplicationManifest.xml и ServiceManifest.xml, чтобы добавить образ контейнера, сведения о репозитории, проверку подлинности реестра и сопоставление портов с узлами. Сведения об изменении манифестов см. в статье Создание первого контейнера-приложения Service Fabric в Windows. Определение пакета кода в манифесте службы необходимо заменить соответствующим образом контейнера. Обязательно замените тип EntryPoint типом ContainerHost.
<!-- Code package is your service executable. --> <CodePackage Name="Code" Version="1.0.0"> <EntryPoint> <!-- Follow this link for more information about deploying Windows containers to Service Fabric: https://aka.ms/sfguestcontainers --> <ContainerHost> <ImageName>myregistry.azurecr.io/samples/helloworldapp</ImageName> </ContainerHost> </EntryPoint> <!-- Pass environment variables to your container: --> </CodePackage>
Добавьте сопоставление портов с узлами для репликатора и конечной точки службы. Так как оба эти порта назначены в среде выполнения платформой Service Fabric, для ContainerPort устанавливается значение нуль, чтобы использовать порт, назначенный для сопоставления.
<Policies> <ContainerHostPolicies CodePackageRef="Code"> <PortBinding ContainerPort="0" EndpointRef="ServiceEndpoint"/> <PortBinding ContainerPort="0" EndpointRef="ReplicatorEndpoint"/> </ContainerHostPolicies> </Policies>
Ознакомьтесь с инструкциями по настройке режима изоляции для контейнера. Windows поддерживает два режима изоляции для контейнеров: режим изоляции процессов и Hyper-V. В указанных ниже фрагментах кода показано, как режим изоляции указывается в файле манифеста приложения.
<Policies> <ContainerHostPolicies CodePackageRef="Code" Isolation="process"> ... </ContainerHostPolicies> </Policies>
<Policies> <ContainerHostPolicies CodePackageRef="Code" Isolation="hyperv"> ... </ContainerHostPolicies> </Policies>
Примечание.
Кластер Service Fabric конструктивно представляет собой один клиент, в котором размещенные приложения считаются доверенными. Если вы собираетесь размещать недоверенные контейнерные приложения, лучше размещать их как гостевые контейнеры и соблюдать рекомендации из статьи Размещение ненадежных приложений в кластере Service Fabric.
Чтобы протестировать это приложение, необходимо развернуть его в кластере под управлением версии 5.7 или более поздней. Для версий среды выполнения 6.1 и ниже необходимо изменить и обновить параметры кластера, чтобы включить эту предварительную версию функции. Выполните инструкции из этой статьи, чтобы добавить параметр, показанный далее.
{ "name": "Hosting", "parameters": [ { "name": "FabricContainerAppsEnabled", "value": "true" } ] }
Затем разверните измененный пакет приложения в этом кластере.
Теперь в вашем кластере работает контейнерное приложение Service Fabric.
Следующие шаги
- Дополнительные сведения о запуске контейнеров в Service Fabric.
- Дополнительные сведения о жизненном цикле приложения Service Fabric.