IBM Cloud Docs
将 Cloud Foundry 应用程序迁移到 Code Engine 常见问题解答

将 Cloud Foundry 应用程序迁移到 Code Engine 常见问题解答

有关将 Cloud Foundry 应用程序迁移到 Code Engine的常见问题的答案。

能否将定制 URL 与 Code Engine配合使用?

是的! 您可以通过从 Code Engine 控制台创建 定制域映射,将自己的定制 URL 映射到 Code Engine 应用程序。 您还可以通过因特网服务提供者 (例如 IBM Cloud Internet Services) 分配定制 URL。 有关通过 IBM Cloud Internet Services部署具有定制域的应用程序的更多信息,请参阅 配置高可用性应用程序。 有关通过 Cloudflare 使用自定义域部署应用程序的更多信息,请参阅 为您的IBM Cloud Code Engine应用程序配置自定义域博客。

我的应用程序包含特定路径,我可以使用相同的路径吗?

只要您控制同一定制路径或域,就可以使用该定制路径或域。 如果路由来自其他源 (例如,IBM提供的路由,例如 mybluemix.net),那么必须使用 Code Engine 提供的域,否则必须将新的定制域映射到应用程序。

我可以停止应用程序吗?

您无法直接停止应用程序,但可以通过将应用程序的可视性设置为 project 并允许其扩展为 0 来阻止应用程序接收流量。 有关更多信息,请参阅 如何阻止应用程序接收流量?

为什么我有这么多应用程序实例?

更新应用程序时,Code Engine 会自动创建新的修订版。 当修订版可用时,流量将路由到新实例。 当修订版向上扩展并向其传输流量时,原始应用程序实例将继续处理流量。 在扩展修订版并将所有流量路由到该修订版时,将缩减原始应用程序。 您的应用程序还会根据流量需求自动向上扩展和向下扩展。 稍后再检查以确保应用程序正在运行正确数量的实例。 有关更多信息,请参阅 配置应用程序缩放

为什么我的应用程序响应缓慢?

缺省情况下,应用程序可扩展为零,因此在扩展备份时响应速度可能较慢。 您可以通过在控制台或 CLI 中更新应用程序并将最小小数位设置为 1 来更改此行为。

例如,要从 CLI 将名为 myapp 的应用程序的最小规模设置为 1

ibmcloud ce app update --name myapp --min-scale 1

应用程序更新后,单个实例始终在运行。 请注意,费用可能适用。 更多信息,请参阅 Code Engine定价

我能否将请求路由到特定应用程序实例?

否,当前不支持此功能。 您可以使用 Knative 流量分割来近似此功能。 有关将 Knative 与 Code Engine配合使用的更多信息,请参阅 将 Knative 与 Code Engine 配合使用。

我将全局负载均衡器与 Cloud Foundry 应用程序配合使用。 能否将其迁移到 Code Engine?

可以,如果可以访问证书链和相应的专用密钥,那么可以更新全局负载均衡器以指向 Code Engine 应用程序。 以下步骤假定您正在使用 Cloud Internet Services (CIS); 但是,您可以针对自己的全局负载均衡器调整这些步骤。

这些步骤使用控制台。

  1. 为应用程序创建域映射。 创建域映射时,请提供专用密钥和域的完整证书链。 有关更多信息,请参阅 为应用程序配置定制域映射。 等待所有项目中的域映射显示 Ready 状态。

  2. 打开每个域映射的详细信息,并记录 CNAME 值,例如 custom.<your-random-id>.us-south.codeengine.appdomain.cloudcustom.<your-other-random-id>.us-east.codeengine.appdomain.cloud

  3. 浏览至每个应用程序的详细信息页面,然后选择 域映射 选项卡,然后在系统域映射部分中选择 No external system domain mapping。 此步骤可确保仅当从该项目外部调用时,您的应用程序才能通过定制域进行访问。

  4. 在 Cloud Internet Services (CIS) 实例中,浏览至 可靠性。> 全局负载均衡器> 源池,并通过将源地址更改为先前记录的 CNAME 来编辑现有源池。

全局负载均衡器现在指向 Code Engine 应用程序。

我的应用程序是否需要遵循任何规范?

应用程序必须遵循 12 因子应用程序方法

Code Engine提供了哪些类型的工作负载?

Code Engine 支持两种类型的工作负载: 应用程序和批处理作业。

应用程序或应用程序运行代码以处理 HTTP 请求。 除了传统 HTTP 请求外,IBM Cloud® Code Engine 还支持使用 WebSockets 作为其通信协议的应用程序。 将根据入局请求和配置设置自动向上或向下扩展应用程序的运行实例数 (为零)。 应用程序包含一个或多个修订版。 修订版表示应用程序的配置属性的不可改变版本。 每次更新应用程序配置属性都会创建应用程序的新修订版。

作业并行运行可执行代码的一个或多个实例。 与处理 HTTP 请求的应用程序不同,作业设计为运行一次并退出。 创建作业时,可以指定每次运行作业时使用的工作负载配置信息。

确定所需的工作负载类型

大多数 Cloud Foundry 应用程序可以迁移到 Code Engine。 但是,如果 Cloud Foundry 应用程序不等待入局 HTTP 请求,那么作业可能是更好的选择。 有关更多讨论和示例,请参阅 规划 Code Engine

我使用清单文件。 Code Engine是否提供了类似的选项?

如果将清单文件用于 Cloud Foundry 应用程序,请将清单属性映射到相应的 Code Engine 功能部件或 CLI 选项。

表格的Markdown编码
清单属性 ibmcloud ce app createapp update 命令上的 Code Engine 等效项
command --command 选项
disk_quota 由 Code Engine隐式设置。
docker Code Engine中不需要。
health-check-http-endpoint Code Engine中不需要。 缺省情况下,TCP 探测器用于了解应用程序何时正常运行并准备就绪。
health-check-invocation-timeout Code Engine中不需要。
instances --min-scale--max-scale 选项
memory --memory 选项
metadata 当前不受支持。
no-route 通过 --cluster-local 选项,应用程序仍可从项目中的其他工作负载访问,但不包含与应用程序关联的面向因特网的可访问 URL。
path 当前不适用。
processes Code Engine中不需要。 应用程序可以在运行时创建其他进程。
random-route Code Engine中不需要。 每个项目都具有唯一的子域,并且由于应用程序名称是 URL 的一部分,因此保证 URL 唯一。
routes 当前不支持定制路由,但您可以使用 IBM Cloud Internet Service(CIS)或 Cloudflare 通过定制域来前端应用程序。
sidecars 当前不受支持。
stack 由 Code Engine隐式管理。
timeout Code Engine中不需要。
环境变量 -env 选项
服务 请参阅 ibmcloud ce app bind 命令。

Code Engine 支持许多在 Cloud Foundry中不可用的选项,例如如何管理自动缩放。 请参阅 在 Code Engine配置应用程序缩放 中使用应用程序。

我知道如何使用 Cloud Foundry部署应用程序。 在 Code Engine中部署应用程序需要了解哪些信息?

如果您知道如何使用 Cloud Foundry部署应用程序,请在 Code Engine中查找部署应用程序所需的信息。

推送代码

通过 Code Engine,您可以构建源自 Git 存储库或本地系统 (仅限 CLI) 的代码。 此外,与 Cloud Foundry (cf push) 一样,您可以使用 CLI 和 Code Engine 控制台在单个步骤中构建和部署应用程序。 有关更多信息,请参阅 How do I make my code run as a Code Engine application component?

部署上下文

Cloud Foundry 需要 OrgSpace 才能将代码推送到应用程序中。 缺省情况下,所有 Cloud Foundry 用户都会接收为其创建的 OrgSpace。 但是,要添加新目标,必须设置类似于以下示例的 OrgSpace 目标。

ibmcloud cf create-org MyOrg
ibmcloud target -o <ORGNAME>
ibmcloud target -s dev

然后使用 Cloud Foundry部署应用程序时,该 OrgSpace 将作为部署的目标。

Code Engine 使用 IBM Cloud 资源组和 Code Engine 项目的概念。

ibmcloud target -g <RESOURCE-GROUP>
ibmcloud ce project create --name <PROJECTNAME>

这些命令不仅会创建项目,还会将其作为“目标”。 所有后续 Code Engine 命令都在此项目的上下文中运行,直到使用 project select 命令将另一个项目作为目标。 有关更多信息,请参阅 管理项目

日志

Code Engine 提供应用程序,作业和构建的日志,以帮助您确定部署未正确运行时发生的情况。 您可以通过运行类似于以下示例的命令来查找日志。

ibmcloud ce app logs -n <APPNAME>
ibmcloud ce jobrun logs -n <JOBRUN-NAME>
ibmcloud ce buildrun logs -n <BUILDRUN_NAME>

您还可以使用IBM Cloud Logs服务,该服务可用于更长期地持久保存日志信息。 有关更多信息,请参阅查看日志

创建服务

创建受管服务的实例在 Cloud Foundry 和 Code Engine中类似。

要创建新服务以用于 Cloud Foundry 应用程序,请使用以下命令。

ibmcloud cf create-service cloudantNoSQLDB lite myNameCloudant

要创建新服务以用于 Code Engine 应用程序,

ibmcloud resource service-instance-create myNameCOS cloud-object-storage lite global

服务绑定

创建应用程序后,可以将应用程序“绑定”到服务。

使用 Cloud Foundry,运行以下命令。

ibmcloud cf bind-service appName instanceName

使用 Code Engine,

ibmcloud ce app bind --name appName --service-instance instanceName

使用环境变量将服务实例凭证 (坐标) 注入到应用程序 (或作业) 中。 Code Engine 中 VCAP_SERVICES 的 Cloud Foundry 等效项为 CE_SERVICES。 有关更多信息,请参阅 将 IBM Cloud 服务与服务绑定集成

更新应用程序或作业

创建应用程序或作业后,可以使用 update 命令来更新工作负载的属性。 例如,要在 Code Engine中更新应用程序,

ibmcloud ce app update --name <APPNAME> ...

您可以更新创建应用程序或作业时可用的任何属性。 有关更多信息,请参阅以下主题。

运行时支持

Code Engine 支持 Cloud Foundry 支持的许多运行时。 有关 Code Engine支持的运行时的列表,请参阅 Cloud Native buildpack。 如果要使用不受支持的运行时 (例如,Swift 或 Liberty),您可以自行将应用程序打包为容器映像,并 在 Code Engine 中部署该映像,而无需直接从 Code Engine构建映像。

后续步骤

  1. 刚开始迁移? 请查看 入门
  2. 将 Cloud Foundry 术语与 Code Engine 进行比较。
  3. 使用本地构建教程试用 Code Engine
  4. 应用程序是否使用服务绑定? 请查看 迁移服务绑定
  5. 了解 缩放和流量管理
  6. 查找 Code Engine 等效于 Cloud Foundry 命令
  7. 将 Cloud Foundry 应用程序迁移到 Code Engine 常见问题解答 (当前页面)

其他信息