Развертывание приложения.Net Core в Linux Service Fabric Cluster

У меня есть приложение Service Fabric, которое было написано в.Net Core. Он работает нормально на локальном кластере SF Windows. Он состоит из одной службы без сохранения состояния без веб-компонента.

Я сейчас пытаюсь развернуть его в Linux SF Cluster. Мне удалось запустить SF в Docker, используя экземпляр service-fabric-onebox.

Я использовал файл entryPoint.sh, полученный из шаблона yeomen azuresfcsharp, и изменил узел программы EntryPoint в файле ServiceManifest.xml. Я также компилирую свой проект, используя dotnet cli и ключ -r ubuntu.16.04-x64.

Теперь, когда я пытаюсь выполнить развертывание в своем кластере SF, я получаю

    Error event: SourceId='System.Hosting', Property='CodePackageActivation:Code:EntryPoint'.

There was an error during CodePackage activation.The service host terminated with exit code:32512

Есть идеи?

1 ответ

Решение

Я наконец-то понял. Я опубликую ответ здесь, но я также продолжу и пройдусь по всем этапам получения проекта Service Fabric, разработанного в Windows, для запуска на Linux.

Точка входа

В ServiceManifest.xml проекта SF есть узел EntryPoint/ExeHost/Program. В окнах это указывает на исполняемый файл, сгенерированный msbuild. Не так много в Linux.

  • Если у вас не установлен npm, установите его.
  • Бежать npm i -g yo
  • Бежать npm i -g generator-azuresfcsharp
  • В тестовой папке запустите yo azuresfcsharp

Когда генератор запустится, он выдаст вам папку проекта SF и папку проекта aC#. Перейдите в проект SF / папку с именем сервиса / код. В этой папке будет два файла с именем entryPoint.sh и dotnet-include.sh

Вам необходимо добавить их в свой проект и установить для них "Содержимое и всегда копировать".

Наконец, в ServiceManifest.xml измените узел EntryPoint/ExeHost/Program на entryPoint.sh

составление

Компиляция с Visual Studio не будет работать, потому что вам нужно ориентироваться на среду выполнения Linux.

Примечание. Прежде чем приступить к компиляции, необходимо понять, как устроен пакет Service Fabric. Лучший способ щелкнуть правой кнопкой мыши по проекту SF в Visual Studio, выбрать пакет, перейти в папку проекта SF в проводнике, перейти к pkg и посмотреть там.

В окне консоли перейдите в папку с файлом csproj создаваемой вами службы. Давайте предположим, что вы создаете свой пакет развертывания в папке с именем pkg в корне вашего решения. Итак, бегите:

dotnet publish -o ..\pkg\YourServicePkg\Code -r ubuntu.16.04-x64

Обратите внимание - папка в вашем pkg ДОЛЖНА заканчиваться на Pkg.

Другое примечание - посмотрите здесь список времени выполнения, на которое вы можете ориентироваться. Я просто использую unbuntu. Идентификаторы времени выполнения

Завершение пакета

Наконец, для завершения вашего пакета развертывания вам понадобится файл ApplicationManifest.xml в корне папки вашего пакета, файл ServiceManifest.xml из вашего сервисного проекта и папка Config из вашего сервисного проекта. Файлы проекта сервиса можно найти в PackageRoot

Итак, вы будете иметь:

pkg
|
-> ApplicationManifest.xml
-> YourServicePkg
    |
    -> ServiceManifest.xml
    -> Code (This is where you targeted dotnet publish)
    -> Config

Среда Linux

Теперь вам нужно где-то запустить его локально. Я использовал докер. Вот ссылка для полной инструкции по установке, но я пойду по основам здесь.

Во-первых, вам нужно обновить конфигурацию вашего docker deamon следующими настройками:

{
  "ipv6": true,
  "fixed-cidr-v6": "2001:db8:1::/64"
}

Затем потяните изображение.

docker pull servicefabricoss/service-fabric-onebox

Вам нужно будет открыть порты 19080 и 19000 с

-p 19080:19080 -p 19000:19000

Если вы использовали диспетчер локальных кластеров Service Fabric в окнах, вам нужно будет щелкнуть правой кнопкой мыши значок на панели задач и выбрать "Удалить кластер". Затем, когда это закончится, вам нужно выйти. Вы должны удалить кластер, иначе происходят странные вещи.

После запуска образа докера откройте его bash и запустите ./setup.sh, с последующим ./run.sh

Развертывание

Когда SF запускается в Docker, и вы можете перейти на localhost:19080, пришло время для развертывания с PowerShell.

Во-первых, давайте проверим наш пакет, чтобы убедиться, что он действителен.

Test-ServiceFabricApplicationPackage .\pkg\  

Если это работает, давайте развернем

Connect-ServiceFabricCluster localhost:19000
Register-ServiceFabricApplicationType -ApplicationPathInImageStore YourService
Remove-ServiceFabricApplicationPackage -ImageStoreConnectionString fabric:ImageStore -ApplicationPackagePathInImageStore YourService
New-ServiceFabricApplication -ApplicationName fabric:/YourService -ApplicationTypeVersion 1.0.0 -ApplicationTypeName YourServiceType

Ваше приложение должно запускаться в Linux.

Важный

Так вот что меня достало, и в результате код выхода: ошибка 32512.

Я использую GitHub, и, видимо, стиль окончания строки установлен в Windows. Поэтому, когда я снял его на другом компьютере, окончания строк были изменены с LF на CR LF.

Чтобы это исправить, мне пришлось открыть нужные файлы в Notepad++ и нажать "Правка" -> "Преобразование EOL" -> "Unix (LF)".

Я должен был сделать это для ApplicationManifest.xml, всех файлов ServiceManifest.xml и всех файлов entryPoint.sh и dotnet-include.sh.

Другие вопросы по тегам