处理应用程序的活动性和就绪性探测器
通过 Code Engine,您可以设置运行状况检查,以通过使用活动性和就绪性探测器来提高应用程序的健壮性。 您可以配置 Code Engine 以在创建或更新应用程序时使用这些探测器。
什么是活性和就绪性探测器?
使用活动性和就绪性探测器来检查应用程序是否处于 活动状态 和 就绪 状态,以响应请求并为流量提供服务。
- 活动性探测器
-
活动性探测器定期检查应用程序是否可操作 (或处于活动状态),并可对入局请求作出响应。 您可以使用活动性探测器来检查应用程序是否响应入局请求,或者应用程序是否处于需要系统停止实例并启动新实例的情况。 如果活动性探测器失败,那么将重新启动应用程序实例。 如果活性探测器成功,那么应用程序实例可操作。 例如,您可能有一个单线程 Node.js 应用程序,其中代码陷入无限循环,这会阻止应用程序响应请求。 活动性探测器可以检测此案例并重新启动实例。 缺省情况下不会自动设置活动性探测器。 您可以使用 活动性探测器属性 配置活动性探测器。
- 就绪性探测器
-
就绪性探测器定期检查应用程序是否已准备好接收流量。 您可以使用就绪性探测器从负载均衡中临时除去应用程序实例。 如果就绪性探测器失败,那么在就绪性探测器再次成功之前,应用程序实例无法接收更多请求。 例如,请考虑应用程序能够处理请求的情况,例如当活动性探测器返回成功时。 但是,应用程序可能具有其他必需条件,然后才能处理预期的用户工作负载。 可能您的应用程序需要先建立到后端的有效连接,然后应用程序才能响应用户请求。 此场景需要其他类型的检查,因为应用程序的状态被视为可恢复。 假设应用程序修订版实例处于活动状态一段时间; 但是,数据库连接意外结束。 应用程序实例需要重新连接到数据库。 应用程序实例处于
not ready
状态,因为它失败了就绪性探测器请求。 因此,就绪性探测器指示负载均衡器暂时停止向该应用程序实例发送请求。 当恢复到数据库的连接时,就绪性探测器将成功,并且流量将开始再次路由到应用程序实例。缺省情况下,每个应用程序都具有定义为
tcp
类型的就绪性探测器,并且此探测器会检查应用程序的已配置侦听端口是否已打开。 当此就绪性检查成功完成时,应用程序处于就绪状态。 您可以使用 就绪性探测器属性 进一步定制就绪性探测器。
活动性和就绪性探测器相互独立作用。
如果同时配置了活动性探测器和就绪性探测器,那么在应用程序实例启动期间,活动性探测器不会等待来自就绪性探测器的首次成功响应。 如果同时配置了活动性探测器和就绪性探测器,并且要在发送就绪性探测器请求之前等待来自活动性探测器的成功响应,那么可以使用初始延迟属性将第一个活动性探测器请求延迟指定的秒数。
为何要将活动性和就绪性探测器用于我的应用程序?
在 Code Engine 应用程序中实现探测器时,活动性和就绪性探测器使您能够更细颗粒度地控制正在运行的应用程序,以检查应用程序的 活动 和 就绪 条件。
例如,应用程序可能会有启动延迟。 应用程序流程可能会在应用程序完全准备好之前就开始,这可能会影响响应,尤其是当应用程序在许多实例中扩展时。 通过将活动性和就绪性探测器设置为运行状况检查,可以让 Code Engine 知道应用程序是否正在运行并准备好接收请求和处理流量。 通过设置这些探针,还可以帮助您在对应用程序进行滚动更新时防止宕机。
活动性和就绪性探测器适用于应用程序实例。 系统将探测应用程序的每个实例。
活性和就绪性探测器具有不同的用途。
-
您可以使用 活动性探测器 来触发应用程序实例重新启动,这将基本停止当前应用程序实例并启动新实例。 对于应用程序无法从内部故障中恢复并且需要重新启动应用程序的情况,请使用此探测器。
-
相反,如果 就绪性探测器 失败,那么此探测器会导致 Code Engine 暂时停止将请求路由到应用程序实例,直到实例恢复为止。 在应用程序迂到在不重新启动实例的情况下可恢复的问题时,就绪性探测器很有用。 在恢复期间,应用程序无法处理用户请求。 当就绪性探测器成功时,实例可以再次处理用户请求。
在代码中实施就绪性或活动性探测器
在 Code Engine中配置就绪性或活动性探测器之前,必须首先在 Code Engine 应用程序引用的源代码映像中实现探测器。
如果未首先在代码中实现探测器,那么在 Code Engine 中配置的探测器始终会失败,这会导致应用程序失败。
在代码中实施就绪性或活动性探测器时,请考虑以下几点。
-
确定要用于就绪性或活动性探测器的连接类型。 您可以指定类型为
HTTP
或TCP
的探测器。- 类型为
HTTP
的探测器提供了一个端点,用于使用 HTTP GET 方法返回探测器状态。 如果探测器在超时限制内响应,并且 HTTP 返回码大于或等于 200 但小于 400,那么此类型的探测器被视为成功。 超出此范围的任何值都将被视为探测失败。 - 类型为
TCP
的探测器仅检查端口是否已打开。 如果该端口处于打开状态,那么会将此类型的探测器视为成功。 如果端口未打开,那么会将此探测器类型视为失败。
- 类型为
-
确定源代码响应探测器的端口。
- 通常,如果应用程序源代码仅打开一个端口,那么就绪性或活动性探测器的端口配置通常与 Code Engine 应用程序的已配置侦听端口值相同。 如果将 Code Engine 中的就绪性或活动性探测器端口设置为
0
,那么探测器的端口缺省为应用程序的已配置侦听端口。 - 如果应用程序源代码同时侦听多个端口,那么可以在源代码中使用其他端口来响应就绪性或活动性探测器请求。 在这种情况下,在 Code Engine中配置就绪性或活动性探测器配置时,必须为探测器指定正确的端口。
- 通常,如果应用程序源代码仅打开一个端口,那么就绪性或活动性探测器的端口配置通常与 Code Engine 应用程序的已配置侦听端口值相同。 如果将 Code Engine 中的就绪性或活动性探测器端口设置为
-
由于探测器确定应用程序实例是否可用于处理请求,因此请确保代码快速响应探测器请求。
-
确保代码安全地处理 SIGTERM 信号。 当活动性探测器失败时,将发送 SIGTERM 信号,并且代码必须处理此信号以避免无响应的应用程序实例。 请参阅 为什么我的应用程序实例没有按预期缩减?
在 Code Engine 中配置活动性和就绪性探测器
您可以使用活动性和就绪性探测器作为应用程序的运行状况检查。 您可以定制缺省情况下设置的就绪性探测器,并 (可选) 配置活动性探测器。 在运行实例时,会按配置的时间间隔将活动性和就绪性探测器发送到应用程序实例。
在为 Code Engine 应用程序配置活动性探测器或定制就绪探测器之前,必须首先在代码中实现探测器; 否则应用程序可能会失败。
活动性和就绪性探测器的属性
下表汇总了用于应用程序的活动性和就绪性探测器的属性。
属性 | 描述 |
---|---|
Type | 探头执行的检查类型。 有效值为 tcp 和 http 。 此属性是必需的。 |
路径 | 指向应用程序的 HTTP 请求的路径。 仅当类型为 http 时,此属性才是必需的。 |
端口 | 探测器连接到的端口。 如果设置为 0 ,那么探测器的端口缺省为应用程序的已配置侦听端口。 |
时间间隔 | 探测请求之间的间隔时间(秒)。 |
初始延迟 | 执行首次有效性探针检查前的等待时间(秒)。 |
超时 | 探针超时并被视为失败前等待应用程序响应的时间(秒)。 |
故障阈值 | 要视为失败的探测器的连续失败检查数。 |
从控制台配置探测器
在 Code Engine 应用程序引用的代码映像中实现探测器后,可以从控制台配置活动性和就绪性探测器以在应用程序上执行运行状况检查。
准备工作
- 从 Code Engine "项目" 页面,转至您的项目。
- 创建应用程序。 例如,创建名为
myapp
的应用程序,该应用程序使用icr.io/codeengine/helloworld
映像。 此图像可从 样本 IBM Cloud Code Engine GitHub 存储库获取。 您可以在创建应用程序时配置活动性和就绪性探测器。 或者,当您从应用程序页面上的 配置 > 图像启动选项 选项卡更新应用程序时,可以查看和更新活动性和就绪性探测器的设置。 - 要查看应用程序的已配置探测器及其属性,请转至应用程序页面上的 配置 > 图像启动选项 选项卡。
- 从 映像启动选项 选项卡编辑活动性和就绪性探测器设置。 修改探测器将创建新的应用程序修订版。 例如,编辑缺省就绪探测器以将连接类型从 TCP 更改为 HTTP,并将就绪探测器的路径设置为
/readinessprobe
。 有关探测器属性的更多信息,请参阅 属性。 完成后点击“完成”。 - 单击 部署 以保存更改并使用配置的探测器设置部署应用程序修订版。
使用 实例 选项卡上的视图来检查应用程序实例。
使用 CLI 配置探测器
您可以使用 Code Engine CLI 来处理活动性和就绪性探测器。 使用 ibmcloud ce app create
或 ibmcloud ce app update
命令指定 --probe-live
或 --probe-ready
选项以配置所需的探测器。
有关可以使用就绪性或活动性探测器配置的属性的更多信息,请参阅 活动性和就绪性探测器属性。
准备工作
-
在代码中实现探测器。 在代码中实现探测器 (在 Code Engine外部) 后,可以配置 Code Engine 应用程序以使用探测器。
-
从 Code Engine:
- 设置 Code Engine CLI 环境。
- 创建项目。
-
使用
ibmcloud ce application create
命令创建应用程序。 在以下示例中,使用myapp
作为应用程序的名称,并指定icr.io/codeengine/helloworld
作为要引用的映像。ibmcloud ce application create --name myapp --image icr.io/codeengine/helloworld
-
运行
application get
命令以显示有关应用程序的详细信息。 请注意,缺省情况下已配置就绪性探测器。ibmcloud ce application get --name myapp
示例输出
[...] OK Name: myapp ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject [...] Readiness Probe: Type: tcpsocket Port: 0 [...]
-
使用
ibmcloud ce application update
命令更新myapp
应用程序以配置活动性探测器。 例如,指定--probe-live
选项以配置类型为 HTTP 的活动性探测器,以便连接使用端口 8080,并且引用的代码映像 * * 的主目录的路径为/
。在
application create
或application update
命令上配置就绪性或活动性探测器的属性时,必须在设置的每个属性之前提供选项--probe-live
或--probe-ready
。ibmcloud ce application update --name myapp --probe-live type=http --probe-live path=/ --probe-live port=8080
-
运行
application get
命令以显示有关已更新的myapp
应用程序的详细信息。 详细信息包括有关已配置的活动性探测器的信息。ibmcloud ce application get --name myapp
示例输出
[...] OK Name: myapp ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject [...] Liveness Probe: Type: httpget Path: / Port: 8080 Interval: 10 Timeout: 1 FailureThreshold: 1 Readiness Probe: Type: tcpsocket Port: 0 [...]
现在,您为 myapp
应用程序配置了活动性探测器和就绪性探测器,系统会根据这两个探测器的配置不断执行这两个探测器。
在 Code Engine 中查看探测器设置
您可以从控制台和 CLI 查看有关 Code Engine 中设置的活动性和就绪性探测器的信息。
从控制台查看探测器设置
要在控制台中查看有关已配置的活动性和就绪性探测器的详细信息,请转至应用程序页面上的 配置 > 映像启动选项 选项卡。
使用 CLI 查看探测器设置
要使用 CLI 查看有关应用程序的详细信息,包括有关已配置的活动性和就绪性探测器的信息,请运行 application get
命令。
ibmcloud ce application get --name myapp
示例输出
[...]
OK
Name: myapp
ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Project Name: myproject
[...]
Liveness Probe:
Type: httpget
Path: /
Port: 8080
Interval: 10
Timeout: 1
FailureThreshold: 1
Readiness Probe:
Type: tcpsocket
Port: 0
[...]
正在更新探测器
您可以修改应用程序的活动性和就绪性探测器的属性。 更新探测器的属性时,将创建新的应用程序修订版。在运行实例时,将在配置的时间间隔内将活动性和就绪性探测器发送到应用程序实例。
从控制台更新探针
您可以在控制台中从应用程序页面上的 配置 > 图像启动选项 选项卡修改或编辑就绪性或活动性探测器。
- 进入您的申请页面。 浏览到应用程序页面的一种方法是
- 找到 Code Engine "项目" 页面。
- 单击项目的名称以打开“概述”页面。
- 单击应用程序,打开应用程序列表。 单击应用程序的名称以打开其应用程序页面。
- 从应用程序页面中,单击应用程序页面上的 配置 > 图像启动选项 选项卡。
- 从 映像启动选项 选项卡编辑活动性和就绪性探测器设置。 修改探测器将创建新的应用程序修订版。 单击 编辑 以修改要更改的就绪性或活动性探测器。
- 从“就绪探测器”页面或“活动性探测器”页面,更新探测器的 属性。 完成后点击“完成”。
- 单击 部署 以保存更改并使用配置的探测器设置部署应用程序修订版。
使用 实例 选项卡上的视图来检查应用程序实例。
使用 CLI 更新探针
假定您要更新 myapp
的活动性探测器,以便连接类型为 HTTP,失败阈值为 3,探测器请求之间的时间间隔为 5 秒。
-
使用
ibmcloud ce application update
命令更新myapp
应用程序以更新活动性探测器,以便连接类型为 HTTP,故障阈值为 3,探测器请求之间的时间间隔为 5 秒。在
application create
或application update
命令上配置就绪性或活动性探测器的属性时,必须在设置的每个属性之前提供选项--probe-live
或--probe-ready
。ibmcloud ce application update --name myapp --probe-live type=http --probe-live interval=5 --probe-live failure-threshold=3
-
运行
application get
命令以显示有关已更新的myapp
应用程序的详细信息。 详细信息包括有关活动性探测器的当前配置的信息。ibmcloud ce application get --name myapp
示例输出
[...] OK Name: myapp ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject [...] Liveness Probe: Type: httpget Path: / Port: 8080 Interval: 5 Timeout: 1 FailureThreshold: 3 Readiness Probe: Type: tcpsocket Port: 0 [...]
-
使用
ibmcloud ce application update
命令更新myapp
应用程序以更新就绪性探测器,以便连接类型为 HTTP,端口为 8080,故障阈值为 3,探测器请求之间的时间间隔为 5 秒。在
application create
或application update
命令上配置就绪性或活动性探测器的属性时,必须在设置的每个属性之前提供选项--probe-live
或--probe-ready
。ibmcloud ce application update --name myapp --probe-ready type=http --probe-ready port=8080 --probe-ready interval=5 --probe-ready failure-threshold=3
-
运行
application get
命令以显示有关已更新的myapp
应用程序的详细信息。 详细信息包括有关就绪性探测器的更新设置的信息。ibmcloud ce application get --name myapp
示例输出
[...] OK Name: myapp ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject [...] Liveness Probe: Type: httpget Path: / Port: 8080 Interval: 5 Timeout: 1 FailureThreshold: 3 Readiness Probe: Type: httpget Path: / Port: 8080 Interval: 5 Timeout: 1 FailureThreshold: 3 [...]
删除探测器
您可以除去 (删除) 活动性探测器。 但是,由于缺省情况下始终设置就绪性探测器,因此只能进行编辑以更新就绪性探测器的属性。
从控制台中删除探测器
从控制台中,可以从应用程序页面上的 配置 > 图像启动选项 选项卡中除去活动性探测器。
- 进入您的申请页面。 浏览到应用程序页面的一种方法是
- 找到 Code Engine "项目" 页面。
- 单击项目的名称以打开“概述”页面。
- 单击应用程序,打开应用程序列表。 单击应用程序的名称以打开其应用程序页面。
- 在应用程序页面中,单击 配置 选项卡,然后单击应用程序页面上的 图像启动选项 选项卡。
- 要除去活动性探测器,必须创建新的应用程序修订版。
- 单击 删除 以除去活动性探测器。
- 单击 部署 以保存更改并部署应用程序修订版。
无法删除就绪性探测器时,可以 更新 该探测器。
使用 CLI 删除探测器
-
要除去活动性探测器,请使用带有
--probe-live-clear
选项的ibmcloud ce application update
命令更新myapp
应用程序。ibmcloud ce application update --name myapp --probe-live-clear
-
运行
application get
命令以显示有关已更新的myapp
应用程序的详细信息。 已删除活动性探测器。ibmcloud ce application get --name myapp
示例输出
[...] OK Name: myapp ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject [...] Readiness Probe: Type: httpget Path: / Port: 8080 Interval: 5 Timeout: 1 FailureThreshold: 3 [...]
-
要将就绪性探测器重置为缺省配置,请使用带有
--probe-ready-reset
选项的ibmcloud ce application update
命令更新myapp
应用程序。ibmcloud ce application update --name myapp --probe-ready-reset
-
运行
application get
命令以显示有关已更新的myapp
应用程序的详细信息。 就绪性探测器将重置为缺省配置。ibmcloud ce application get --name myapp
示例输出
[...] OK Name: myapp ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject [...] Readiness Probe: Type: tcpsocket Port: 0 [...]