将 .Net Core 应用程序部署到 Linux Service Fabric 集群
Deploying a .Net Core application to Linux Service Fabric Cluster
我有一个用 .Net Core 编写的 Service Fabric 应用程序。它在本地 windows SF 集群上运行良好。它由一个没有 Web 组件的无状态服务组成。
我现在正在尝试将其部署到 Linux SF 集群。我能够使用 service-fabric-onebox 实例在 Docker 中获得 SF 运行。
我使用了您通过使用 azuresfcsharp yeomen 模板获得的 entryPoint.sh 文件,并更改了 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
有什么想法吗?
我终于明白了。我会 post 在这里回答,但我也会继续 运行 完成在 windows 到 运行 中开发 Service Fabric 项目的所有步骤 Linux.
入口点
在SF项目的ServiceManifest.xml中,有一个EntryPoint/ExeHost/Program节点。在windows中,this指向msbuild生成的exe。 Linux.
没那么多
- 如果您没有安装 npm,请安装它。
- 运行
npm i -g yo
- 运行
npm i -g generator-azuresfcsharp
- 在测试文件夹中,运行
yo azuresfcsharp
当生成器运行s时,它会给你一个SF项目文件夹和一个c#项目文件夹。前往顺丰project/service名folder/Code。在该文件夹中将有两个名为 entryPoint.sh 和 dotnet-include.sh
的文件
您需要将它们添加到您的项目中,并将它们设置为“内容”和“始终复制”。
最后,在 ServiceManifest.xml 中,将 EntryPoint/ExeHost/Program 节点更改为 entryPoint.sh
正在编译
使用 Visual Studio 进行编译将无法正常工作,因为您需要针对 linux 运行 时间。
旁注 - 在编译之前,您需要了解 Service Fabric 包的布局方式。最好的方法是右击 Visual Studio 中的 SF 项目,点击 package,进入资源管理器中的 SF 项目文件夹,进入 pkg,然后查看。
在控制台 window 中,cd 到包含您正在构建的服务的 csproj 文件的文件夹。假设您在解决方案根目录中名为 pkg
的文件夹中构建部署包。所以 运行:
dotnet publish -o ..\pkg\YourServicePkg\Code -r ubuntu.16.04-x64
注意 - 您的 pkg 中的文件夹必须以 Pkg 结尾。
其他注意事项 - 在此处查看您可以定位的 运行 次列表。我只是碰巧在使用 unbuntu。 Runtime Identifiers
完成包裹
最后,要完善您的部署包,您需要包文件夹根目录中的 ApplicationManifest.xml 文件、服务项目中的 ServiceManifest.xml 文件以及来自您的服务项目。服务项目文件可以在 PackageRoot
中找到
所以你将拥有:
pkg
|
-> ApplicationManifest.xml
-> YourServicePkg
|
-> ServiceManifest.xml
-> Code (This is where you targeted dotnet publish)
-> Config
Linux环境
现在您需要在某个地方 运行 它在本地。我用了docker。 Here 是完整设置说明的 link,但我将在此处复习基础知识。
首先,您需要使用以下设置更新 docker 守护程序配置:
{
"ipv6": true,
"fixed-cidr-v6": "2001:db8:1::/64"
}
然后,拉取镜像。
docker pull servicefabricoss/service-fabric-onebox
您需要使用
打开端口 19080 和 19000
-p 19080:19080 -p 19000:19000
如果您一直在 windows 中使用 Service Fabric 本地集群管理器,则需要右键单击系统托盘中的图标,然后单击“删除集群”。完成后,您需要退出。您必须删除集群,否则会发生奇怪的事情。
启动docker图像后,打开它的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 后开始。
重要
这就是我遇到的问题,并导致退出 code:32512 错误。
我正在使用 github,显然,行尾样式设置为 windows。所以当我在另一台电脑上把它拉下来时,行尾从 LF 变成了 CR LF。
为了解决这个问题,我不得不在 Notepad++ 中打开受影响的文件,然后单击编辑-> EOL 转换 -> Unix (LF)。
我必须在 ApplicationManifest.xml、所有 ServiceManifest.xml 文件以及所有 entryPoint.sh 和 dotnet-include.sh 文件上执行此操作。
我有一个用 .Net Core 编写的 Service Fabric 应用程序。它在本地 windows SF 集群上运行良好。它由一个没有 Web 组件的无状态服务组成。
我现在正在尝试将其部署到 Linux SF 集群。我能够使用 service-fabric-onebox 实例在 Docker 中获得 SF 运行。
我使用了您通过使用 azuresfcsharp yeomen 模板获得的 entryPoint.sh 文件,并更改了 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
有什么想法吗?
我终于明白了。我会 post 在这里回答,但我也会继续 运行 完成在 windows 到 运行 中开发 Service Fabric 项目的所有步骤 Linux.
入口点
在SF项目的ServiceManifest.xml中,有一个EntryPoint/ExeHost/Program节点。在windows中,this指向msbuild生成的exe。 Linux.
没那么多- 如果您没有安装 npm,请安装它。
- 运行
npm i -g yo
- 运行
npm i -g generator-azuresfcsharp
- 在测试文件夹中,运行
yo azuresfcsharp
当生成器运行s时,它会给你一个SF项目文件夹和一个c#项目文件夹。前往顺丰project/service名folder/Code。在该文件夹中将有两个名为 entryPoint.sh 和 dotnet-include.sh
的文件您需要将它们添加到您的项目中,并将它们设置为“内容”和“始终复制”。
最后,在 ServiceManifest.xml 中,将 EntryPoint/ExeHost/Program 节点更改为 entryPoint.sh
正在编译
使用 Visual Studio 进行编译将无法正常工作,因为您需要针对 linux 运行 时间。
旁注 - 在编译之前,您需要了解 Service Fabric 包的布局方式。最好的方法是右击 Visual Studio 中的 SF 项目,点击 package,进入资源管理器中的 SF 项目文件夹,进入 pkg,然后查看。
在控制台 window 中,cd 到包含您正在构建的服务的 csproj 文件的文件夹。假设您在解决方案根目录中名为 pkg
的文件夹中构建部署包。所以 运行:
dotnet publish -o ..\pkg\YourServicePkg\Code -r ubuntu.16.04-x64
注意 - 您的 pkg 中的文件夹必须以 Pkg 结尾。
其他注意事项 - 在此处查看您可以定位的 运行 次列表。我只是碰巧在使用 unbuntu。 Runtime Identifiers
完成包裹
最后,要完善您的部署包,您需要包文件夹根目录中的 ApplicationManifest.xml 文件、服务项目中的 ServiceManifest.xml 文件以及来自您的服务项目。服务项目文件可以在 PackageRoot
中找到所以你将拥有:
pkg
|
-> ApplicationManifest.xml
-> YourServicePkg
|
-> ServiceManifest.xml
-> Code (This is where you targeted dotnet publish)
-> Config
Linux环境
现在您需要在某个地方 运行 它在本地。我用了docker。 Here 是完整设置说明的 link,但我将在此处复习基础知识。
首先,您需要使用以下设置更新 docker 守护程序配置:
{
"ipv6": true,
"fixed-cidr-v6": "2001:db8:1::/64"
}
然后,拉取镜像。
docker pull servicefabricoss/service-fabric-onebox
您需要使用
打开端口 19080 和 19000-p 19080:19080 -p 19000:19000
如果您一直在 windows 中使用 Service Fabric 本地集群管理器,则需要右键单击系统托盘中的图标,然后单击“删除集群”。完成后,您需要退出。您必须删除集群,否则会发生奇怪的事情。
启动docker图像后,打开它的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 后开始。
重要
这就是我遇到的问题,并导致退出 code:32512 错误。
我正在使用 github,显然,行尾样式设置为 windows。所以当我在另一台电脑上把它拉下来时,行尾从 LF 变成了 CR LF。
为了解决这个问题,我不得不在 Notepad++ 中打开受影响的文件,然后单击编辑-> EOL 转换 -> Unix (LF)。
我必须在 ApplicationManifest.xml、所有 ServiceManifest.xml 文件以及所有 entryPoint.sh 和 dotnet-include.sh 文件上执行此操作。