部署和扩展应用程序
通过本教程,使用 Code Engine CLI 部署应用程序。 应用程序在未使用时缩放为零。
应用程序或应用程序运行代码以处理 HTTP 请求。 除了传统 HTTP 请求外,IBM Cloud® Code Engine 还支持使用 WebSockets 作为其通信协议的应用程序。 将根据入局请求和配置设置自动向上或向下扩展应用程序的运行实例数 (为零)。 应用程序包含一个或多个修订版。 修订版表示应用程序的配置属性的不可改变版本。 每次更新应用程序配置属性都会创建应用程序的新修订版。
准备工作
所有 Code Engine 用户都需要具有现收现付帐户。 教程可能会产生成本。 使用“成本估算器”可根据您的预计使用量生成成本估算。 有关更多信息,请参阅 Code Engine 定价。
选择镜像文件
本教程使用样本图像 icr.io/codeengine/hello
,这是一个简单的 Hello World
程序。 该程序包含环境变量 TARGET
,并打印 Hello ${TARGET}
。 如果环境变量为空,那么将返回 Hello World
。 有关用于此示例的代码的更多信息,请参阅 hello
。
如果您有要使用的容器映像,那么可以将下一步中的映像引用替换为您自己的 Docker 存储库,映像名称和版本。
创建和部署应用程序
-
使用
ibmcloud ce application create
命令创建应用程序。 在以下示例中,使用myapp
作为应用程序的名称,并指定icr.io/codeengine/hello
作为要引用的映像。ibmcloud ce application create --name myapp --image icr.io/codeengine/hello
示例输出
Creating application 'myapp'... [...] Run 'C:\Program Files\IBM\Cloud\bin\ibmcloud.exe ce application get -n myapp' to check the application status. OK https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud
-
运行
ibmcloud ce application get
命令以显示有关应用程序的详细信息,包括myapp
应用程序的 URL。ibmcloud ce application get -n myapp
示例输出
Run 'ibmcloud ce application events -n myapp' to get the system events of the application instances. Run 'ibmcloud ce application logs -f -n myapp' to follow the logs of the application instances. OK Name: myapp ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111 Age: 3m6s Created: 2021-07-11T06:39:41-05:00 URL: https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud Cluster Local URL: http://myapp.4svg40kna19.svc.cluster.local Console URL: https://cloud.ibm.com/codeengine/project/us-south/01234567-abcd-abcd-abcd-abcdabcd1111/application/myapp/configuration Status Summary: Application deployed successfully Environment Variables: Type Name Value Literal CE_API_BASE_URL https://api.us-south.codeengine.cloud.ibm.com Literal CE_APP myapp Literal CE_DOMAIN us-south.codeengine.appdomain.cloud Literal CE_PROJECT_ID abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Literal CE_REGION us-south Literal CE_SUBDOMAIN abcdabcdab Image: icr.io/codeengine/hello Resource Allocation: CPU: 1 Ephemeral Storage: 400M Memory: 4G Revisions: myapp-huv70-1: Age: 3m6s Traffic: 100% Image: icr.io/codeengine/hello (pinned to f0dc03) Running Instances: 1 Runtime: Concurrency: 100 Maximum Scale: 10 Minimum Scale: 0 Timeout: 300 Conditions: Type OK Age Reason ConfigurationsReady true 52s Ready true 26s RoutesReady true 26s Events: Type Reason Age Source Messages Normal Created 3m9s service-controller Created Configuration "myapp" Normal Created 3m9s service-controller Created Route "myapp" Instances: Name Revision Running Status Restarts Age myapp-huv70-1-deployment-6656cfc796-7gl27 myapp-huv70-1 1/2 Terminating 0 3m9s
-
从运行
application get
命令获取应用程序的 URL,如上一步中所述。 要直接检索应用程序的 URL,可以使用--output
选项并在application get
命令上指定 URL 格式。 此外,您可以运行ibmcloud ce application list
命令以获取应用程序 URL。ibmcloud ce application get -n myapp -output url
示例输出
https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud
-
复制先前输出中的 URL,并使用
curl
调用应用程序。curl https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud
示例输出
Hello World
您已成功部署并启动 Code Engine 应用程序!
更新应用程序
-
通过使用
ibmcloud ce application update
命令添加环境变量以返回Hello Stranger
来更新新创建的应用程序。ibmcloud ce application update --name myapp --env TARGET=Stranger
示例输出
Updating application 'myapp' to latest revision. [...] Run 'ibmcloud ce application get -n myapp' to check the application status. OK https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud
-
使用
application get
命令可显示有关应用程序的详细信息,包括最新的修订信息。ibmcloud ce application get --name myapp
示例输出
Run 'ibmcloud ce application events -n myapp' to get the system events of the application instances. Run 'ibmcloud ce application logs -f -n myapp' to follow the logs of the application instances. OK Name: myapp ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111 Age: 3m6s Created: 2021-07-11T06:39:41-05:00 URL: https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud Cluster Local URL: http://myapp.4svg40kna19.svc.cluster.local Console URL: https://cloud.ibm.com/codeengine/project/us-south/01234567-abcd-abcd-abcd-abcdabcd1111/application/myapp/configuration Status Summary: Application deployed successfully Environment Variables: Type Name Value Literal CE_API_BASE_URL https://api.us-south.codeengine.cloud.ibm.com Literal CE_APP myapp Literal CE_DOMAIN us-south.codeengine.appdomain.cloud Literal CE_PROJECT_ID abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Literal CE_REGION us-south Literal CE_SUBDOMAIN abcdabcdab Literal TARGET Stranger Image: icr.io/codeengine/hello Status Summary: Application deployed successfully Environment Variables: Type Name Value Literal TARGET Stranger Image: icr.io/codeengine/hello Resource Allocation: CPU: 1 Ephemeral Storage: 400M Memory: 4G Revisions: myapp-00002: Age: 54m Traffic: 100% Image: icr.io/codeengine/hello (pinned to f0dc03) Running Instances: 1 Runtime: Concurrency: 100 Maximum Scale: 10 Minimum Scale: 0 Timeout: 300 Conditions: Type OK Age Reason ConfigurationsReady true 25s Ready true 11s RoutesReady true 11s Events: Type Reason Age Source Messages Normal Created 4m17s service-controller Created Configuration "myapp" Normal Created 4m17s service-controller Created Route "myapp" Instances: Name Revision Running Status Restarts Age myapp-00001-deployment-bf7559548-mxgvq myapp-00001 2/3 Terminating 0 4m55s myapp-00002-deployment-8495f8ccb9-kmc57 myapp-00002 3/3 Running 0 88s
从 修订 部分的输出中,您可以看到
myapp
服务的最新应用程序修订。 另外,请注意,100% 的应用程序流量正在运行应用程序的最新修订版。 -
调用应用程序。
curl https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud
示例输出
Hello Stranger
从该命令的输出中,您可以看到已更新的应用程序现在返回 Hello Stranger
。
扩展应用程序 (从 0 到 0 和从 0 到 0)
根据传入工作负载,应用程序的运行实例数会自动向上扩展或向下扩展 (为零)。
以下示例说明如何使用 CLI 扩展应用程序。 您可以通过使用 application create
或 application update
命令更改 --min-scale
和 --max-scale
选项的值来控制应用程序的最大和最小运行实例数。
-
调用应用程序。
curl https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud
-
运行
application get
命令以显示应用程序的状态。 请注意Running instances
的值。 在此示例中,应用程序具有正在运行的1
实例。ibmcloud ce application get --name myapp
示例输出
[...] Name: myapp [...] URL: https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud Cluster Local URL: http://myapp.4svg40kna19.svc.cluster.local Console URL: https://cloud.ibm.com/codeengine/project/us-south/01234567-abcd-abcd-abcd-abcdabcd1111/application/myapp/configuration Status Summary: Application deployed successfully Environment Variables: Type Name Value Literal CE_API_BASE_URL https://api.us-south.codeengine.cloud.ibm.com Literal CE_APP myapp Literal CE_DOMAIN us-south.codeengine.appdomain.cloud Literal CE_PROJECT_ID abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Literal CE_REGION us-south Literal CE_SUBDOMAIN abcdabcdab Literal TARGET Stranger Image: icr.io/codeengine/hello Resource Allocation: CPU: 1 Ephemeral Storage: 400M Memory: 4G Revisions: myapp-00002: Age: 58m Traffic: 100% Image: icr.io/codeengine/hello (pinned to f0dc03) Running Instances: 1 Runtime: Concurrency: 100 Maximum Scale: 10 Minimum Scale: 0 Timeout: 300 Conditions: Type OK Age Reason ConfigurationsReady true 57m Ready true 57m RoutesReady true 57m Events: Type Reason Age Source Messages Normal Created 4m17s service-controller Created Configuration "myapp" Normal Created 4m17s service-controller Created Route "myapp" Instances: Name Revision Running Status Restarts Age myapp-00002-deployment-8495f8ccb9-kmc57 myapp-00002 3/3 Running 0 16m
-
再次运行
application get
命令,并注意Running instances
的值已缩放为零。 当应用程序完成运行时,如果--min-scale
选项设置为缺省值0
,那么正在运行的实例数将自动缩放为零。ibmcloud ce application get -n myapp
示例输出
[...] URL: https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud Cluster Local URL: http://myapp.4svg40kna19.svc.cluster.local Console URL: https://cloud.ibm.com/codeengine/project/us-south/01234567-abcd-abcd-abcd-abcdabcd1111/application/myapp/configuration Status Summary: Application deployed successfully Environment Variables: Type Name Value Literal CE_API_BASE_URL https://api.us-south.codeengine.cloud.ibm.com Literal CE_APP myapp Literal CE_DOMAIN us-south.codeengine.appdomain.cloud Literal CE_PROJECT_ID abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Literal CE_REGION us-south Literal CE_SUBDOMAIN abcdabcdab Literal TARGET Stranger Image: icr.io/codeengine/hello Resource Allocation: CPU: 1 Ephemeral Storage: 400M Memory: 4G Revisions: myapp-huv70-2 Age: 13m Traffic: 100% Image: icr.io/codeengine/hello (pinned to 548d5c) Running Instances: 0 Runtime: Concurrency: 100 Maximum Scale: 10 Minimum Scale: 0 Timeout: 300 Conditions: Type OK Age Reason ConfigurationsReady true 13m Ready true 13m RoutesReady true 13m Events: Type Reason Age Source Messages Normal Created 4m17s service-controller Created Configuration "myapp" Normal Created 4m17s service-controller Created Route "myapp" Instances: Name Revision Running Status Restarts Age myapp-00002-deployment-8495f8ccb9-kmc57 myapp-00002 3/3 Running 0 16m
您的应用程序已缩减为零。
-
再次调用应用程序以从零开始扩展。
-
再次运行
application get
命令,并注意到Running instances
的值已从零缩放,并且显示了有关实例的信息。ibmcloud ce application get -n myapp
示例输出
Name: myapp [...] URL: https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud Cluster Local URL: http://myapp.4svg40kna19.svc.cluster.local Console URL: https://cloud.ibm.com/codeengine/project/us-south/01234567-abcd-abcd-abcd-abcdabcd1111/application/myapp/configuration Status Summary: Application deployed successfully Environment Variables: Type Name Value Literal CE_API_BASE_URL https://api.us-south.codeengine.cloud.ibm.com Literal CE_APP myapp Literal CE_DOMAIN us-south.codeengine.appdomain.cloud Literal CE_PROJECT_ID abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Literal CE_REGION us-south Literal CE_SUBDOMAIN abcdabcdab Literal TARGET Stranger Image: icr.io/codeengine/hello Resource Allocation: CPU: 1 Ephemeral Storage: 400M Memory: 4G Revisions: myapp-huv70-2: Age: 3h11m Traffic: 100% Image: icr.io/codeengine/hello (pinned to f0dc03) Running Instances: 1 Runtime: Concurrency: 100 Maximum Scale: 10 Minimum Scale: 0 Timeout: 300 Conditions: Type OK Age Reason ConfigurationsReady true 3h10m Ready true 3h10m RoutesReady true 3h10m Events: Type Reason Age Source Messages Normal Created 4m17s service-controller Created Configuration "myapp" Normal Created 4m17s service-controller Created Route "myapp" Instances: Name Revision Running Status Restarts Age myapp-00002-deployment-8495f8ccb9-kmc57 myapp-00002 3/3 Running 0 16m
您的应用程序会向上扩展。
有关缩放应用程序的更多信息,请参阅 配置应用程序缩放。
后续步骤
-
在应用程序部署后,通过 URL 访问应用程序。
-
您可以创建 定制域映射 并将其分配给应用程序。 有关使用定制域名跨多个区域部署应用程序的更多信息,请参阅 配置高可用性应用程序。
-
现在,您的应用程序已部署,请考虑使应用程序成为事件驱动的应用程序。 通过使用事件预订,您可以通过 定期调度 来触发应用程序,或者设置应用程序以对事件 (例如 文件上载 或 Kafka 消息) 作出反应。
部署应用程序后,您可以使用以下 任何 方法 更新已部署的应用程序 及其引用的代码,而与创建或先前更新应用程序的方式无关:
-
如果您具有容器映像,那么根据 Open Container Initiative(OCI)标准,您只需要提供对该映像的引用,这将指向部署应用程序时容器注册表的位置。 您可以使用 公共注册表 或 专用注册表 中的映像来部署应用程序。
如果使用
app create
命令创建了应用程序,并且指定了--build-source
选项以从本地或存储库源构建容器映像,并且要将应用程序更改为指向其他容器映像,那么必须首先从应用程序中除去构建的关联。 例如,运行ibmcloud ce application update -n APP_NAME --build-clear
。 从应用程序中除去构建的关联后,可以更新应用程序以引用其他映像。 -
如果您是从位于 Git 存储库中的源代码开始,那么可以选择让 Code Engine 负责从源构建映像并使用 单个 操作部署应用程序。 在此场景中,Code Engine 将映像上载到 IBM Cloud® Container Registry。 要了解更多信息,请参阅 从存储库源代码部署应用程序。 如果要对映像的构建进行更多控制,那么可以选择在部署应用程序之前使用 Code Engine 构建映像。
-
如果是从本地工作站上的源代码开始,那么可以选择让 Code Engine 负责从源构建映像并使用 单个 CLI 命令部署应用程序。 在此场景中,Code Engine 将映像上载到 IBM Cloud® Container Registry。 要了解更多信息,请参阅 使用 CLI 从本地源代码部署应用程序。 如果要对映像的构建进行更多控制,那么可以选择在部署应用程序之前使用 Code Engine 构建映像。
例如,您可以选择让 Code Engine 在您为应用程序开发源时处理本地源的构建。 然后,在映像成熟后,您可以更新已部署的应用程序以引用所需的特定映像。 您可以根据需要重复此过程。
部署更新后的应用程序时,将下载并部署所引用容器映像的最新版本,除非为该映像指定了标记。 如果为映像指定了标记,那么标记的映像将用于部署。
要查找更多代码示例吗? 请查看 样本 IBM Cloud Code Engine GitHub 存储库。