将.Net核心应用程序部署到Linux Service Fabric群集
我有一个用.NETCore编写的服务结构应用程序。它在本地WindowsSF集群上运行良好。它由一个没有web组件的无状态服务组成 我现在正试图将其部署到一个LinuxSF集群。我能够使用ServiceFabricOneBox实例在Docker中运行SF 我使用了从azuresfcsharp yeomen模板获得的entryPoint.sh文件,并更改了ServiceManifest.xml文件中的entryPoint程序节点。我还使用dotnetcli和-r ubuntu.16.04-x64开关编译我的项目 现在,当我尝试部署到我的SF集群时,我得到了将.Net核心应用程序部署到Linux Service Fabric群集,linux,.net-core,azure-service-fabric,Linux,.net Core,Azure Service Fabric,我有一个用.NETCore编写的服务结构应用程序。它在本地WindowsSF集群上运行良好。它由一个没有web组件的无状态服务组成 我现在正试图将其部署到一个LinuxSF集群。我能够使用ServiceFabricOneBox实例在Docker中运行SF 我使用了从azuresfcsharp yeomen模板获得的entryPoint.sh文件,并更改了ServiceManifest.xml文件中的entryPoint程序节点。我还使用dotnetcli和-r ubuntu.16.04-x64开
Error event: SourceId='System.Hosting', Property='CodePackageActivation:Code:EntryPoint'.
There was an error during CodePackage activation.The service host terminated with exit code:32512
有什么想法吗?我终于想出来了。我将在这里发布答案,但我也将继续并完成让在windows中开发的Service Fabric项目在Linux上运行的所有步骤 入口点 在SF项目的ServiceManifest.xml中,有一个EntryPoint/ExeHost/Program节点。在windows中,这指向由msbuild生成的exe。在Linux中没有这么多
- 如果没有安装npm,请安装它
- 运行
npm i-g yo
- 运行
npm i-g发电机azuresfcsharp
- 在测试文件夹中,运行
yo-azuresfcsharp
EntryPoint.sh
编撰
使用VisualStudio编译将无法工作,因为您需要以linux运行时为目标
旁注—在编译之前,您需要了解服务结构包是如何布局的。在VisualStudio中右键单击SF项目,单击“包”,转到资源管理器中的SF项目文件夹,转到pkg,然后查看
在控制台窗口中,将cd刻录到包含您正在构建的服务的csproj文件的文件夹中。假设您正在解决方案根目录中名为pkg
的文件夹中构建部署包。因此,请运行:
dotnet publish -o ..\pkg\YourServicePkg\Code -r ubuntu.16.04-x64
注意-pkg中的文件夹必须以pkg结尾
其他注意事项-请在此处查找可以作为目标的运行时列表。我只是碰巧用了unbuntu
完成程序包
最后,要完善部署包,您需要包文件夹根目录中的ApplicationManifest.xml文件、服务项目中的servicemifest.xml文件和服务项目中的Config文件夹。服务项目文件可以在PackageRoot中找到
因此,您将有:
pkg
|
-> ApplicationManifest.xml
-> YourServicePkg
|
-> ServiceManifest.xml
-> Code (This is where you targeted dotnet publish)
-> Config
Linux环境
现在您需要在本地运行它。我用了docker。是完整安装说明的链接,但我将在这里介绍基本内容
首先,您需要使用以下设置更新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
如果您一直在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中启动
重要的
这就是我的原因,并导致退出代码:32512错误
我使用的是github,显然,行尾样式设置为windows。所以当我在另一台计算机上把它拉下来时,线的末端从LF变为CR LF
为了解决这个问题,我必须在Notepad++中打开受影响的文件,然后单击编辑->下线转换->Unix(LF)
我必须在ApplicationManifest.xml、所有ServiceManifest.xml文件以及所有entryPoint.sh和dotnet-include.sh文件上执行此操作。可能重复的