gpt4 book ai didi

linux - 将 .Net Core 应用程序部署到 Linux Service Fabric 集群

转载 作者:可可西里 更新时间:2023-11-01 11:48:23 26 4
gpt4 key购买 nike

我有一个用 .Net Core 编写的 Service Fabric 应用程序。它在本地 Windows SF 集群上运行良好。它由一个没有网络组件的无状态服务组成。

我现在正尝试将其部署到 Linux SF 集群。我能够使用 service-fabric-onebox 实例让 SF 在 Docker 中运行。

我使用了通过使用 azuresfcsharp yeomen 模板获得的 entryPoint.sh 文件,并更改了 ServiceManifest.xml 文件中的 EntryPoint Program 节点。我还在使用 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

有什么想法吗?

最佳答案

我终于明白了。我会在此处发布答案,但我也会继续执行所有步骤,让在 Windows 中开发的 Service Fabric 项目在 Linux 上运行。

入口点

在一个SF项目的ServiceManifest.xml中,有一个EntryPoint/ExeHost/Program节点。在 windows 中,这指向 msbuild 生成的 exe。在 Linux 中不是那么多。

  • 如果您没有安装 npm,请安装它。
  • 运行 npm i -g yo
  • 运行 npm i -g generator-azuresfcsharp
  • 在测试文件夹中,运行 yo azuresfcsharp

当生成器运行时,它会为您提供一个 SF 项目文件夹和一个 c# 项目文件夹。转到 SF 项目/服务名称文件夹/代码。在该文件夹中将有两个名为 entryPoint.sh 和 dotnet-include.sh 的文件

您需要将它们添加到您的项目中,并将它们设置为 Content 和 Copy Always。

最后,在 ServiceManifest.xml 中,将 EntryPoint/ExeHost/Program 节点更改为 entryPoint.sh

编译

无法使用 Visual Studio 进行编译,因为您需要以 linux 运行时为目标。

旁注 - 在编译之前,您需要了解 Service Fabric 包的布局方式。最好的方法是在 Visual Studio 中右键单击 SF 项目,单击包,转到资源管理器中的 SF 项目文件夹,转到 pkg,然后查看那里。

在控制台窗口中,cd 到包含您正在构建的服务的 csproj 文件的文件夹。假设您在解决方案根目录中名为 pkg 的文件夹中构建部署包。所以运行:

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

注意 - 您的 pkg 中的文件夹必须以 Pkg 结尾。

其他注意事项 - 在此处查看您可以定位的运行时列表。我只是碰巧在使用 unbuntu。 Runtime Identifiers

完成包

最后,要完善您的部署包,您需要包文件夹根目录中的 ApplicationManifest.xml 文件、服务项目中的 ServiceManifest.xml 文件以及服务项目中的 Config 文件夹。服务项目文件可以在 PackageRoot 中找到

所以你将拥有:

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

Linux环境

现在您需要在某个地方在本地运行它。我用 docker 。 Here是完整设置说明的链接,但我将在此处介绍基础知识。

首先,您需要使用以下设置更新您的 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 Local Cluster Manager,则需要右键单击系统托盘中的图标,然后单击“删除集群”。完成后,您需要退出。您必须删除集群,否则会发生奇怪的事情。

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++ 中打开受影响的文件,然后单击“编辑”->“EOL 转换”->“Unix (LF)”。

我必须对 ApplicationManifest.xml、所有 ServiceManifest.xml 文件以及所有 entryPoint.sh 和 dotnet-include.sh 文件执行此操作。

关于linux - 将 .Net Core 应用程序部署到 Linux Service Fabric 集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48873394/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com