你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure 容器应用中的运行状况探测

Azure 容器应用运行状况探测可让容器应用运行时定期检查容器应用的状态。

你可以以独占方式使用 TCP 或 HTTP(S) 设置探测器。

容器应用支持以下探测:

探测 说明
启动 检查应用程序是否已成功启动。 此检查独立于运行情况探测,并在应用程序的初始启动阶段执行。
运行情况 检查应用程序是否仍在运行且有响应。
就绪 检查以确定副本是否已准备好处理传入请求。

有关 Azure 容器应用中支持的探测规范的完整列表,请参阅 Azure REST API 规范

HTTP 探测器

HTTP 探测器允许你实现自定义逻辑,以便在报告正常状态之前检查应用程序依赖项的状态。

将运行状况探测终结点配置为使用大于或等于 200 和小于 400 的 HTTP 状态代码进行响应,以指示成功。 超出此范围的任何其他响应代码都表示失败。

下面的示例演示如何在 JavaScript 中实现活跃度终结点。

const express = require('express');
const app = express();

app.get('/liveness', (req, res) => {
  let isSystemStable = false;
  
  // check for database availability
  // check filesystem structure
  //  etc.

  // set isSystemStable to true if all checks pass

  if (isSystemStable) {
    res.status(200); // Success
  } else {
    res.status(503); // Service unavailable
  }
})

TCP 探测器

TCP 探测等待与服务器建立连接以指示成功。 如果探测无法与应用程序建立连接,则探测将失败。

限制

  • 每个容器只能添加每种探测器类型中的一个。
  • 不支持 exec 探测器。
  • 端口值必须是整数;不支持命名端口。
  • 不支持 gRPC。

示例

以下代码列表显示了如何为容器定义运行状况探测。

...占位符表示省略的代码。 有关完整的 ARM 模板详细信息,请参阅容器应用 ARM 模板 API 规范

{
  ...
  "containers":[
    {
      "image":"nginx",
      "name":"web",
      "probes": [
        {
          "type": "liveness",
          "httpGet": {
            "path": "/health",
            "port": 8080,
            "httpHeaders": [
              {
                "name": "Custom-Header",
                "value": "liveness probe"
              }]
          },
          "initialDelaySeconds": 7,
          "periodSeconds": 3
        },
        {
          "type": "readiness",
          "tcpSocket": {
            "port": 8081
          },
          "initialDelaySeconds": 10,
          "periodSeconds": 3
        },
        {
          "type": "startup",
          "httpGet": {
            "path": "/startup",
            "port": 8080,
            "httpHeaders": [
              {
                "name": "Custom-Header",
                "value": "startup probe"
              }]
          },
          "initialDelaySeconds": 3,
          "periodSeconds": 3
        }]
    }]
  ...
}

可选的 failureThreshold 设置定义在执行失败的情况下,容器应用尝试执行探测的次数。 尝试次数超过 failureThreshold 会导致每个探测类型产生不同的结果。

默认配置

如果启用了入口,则以下默认探测会自动添加到主应用容器(如果未为每个类型定义任何探测)。

探测类型 默认值
启动 协议:TCP
端口:入口目标端口
超时:3 秒
时间段:1 秒
初始延迟:1 秒
成功阈值:1
故障阈值:240
就绪 协议:TCP
端口:入口目标端口
超时:5 秒
时间段:5 秒
初始延迟:3 秒
成功阈值:1
故障阈值:48
运行情况 协议:TCP
端口:入口目标端口

如果应用需要较长的时间才能启动(这在 Java 中很常见),则通常需要自定义探测,以便容器不会崩溃。

下面的示例演示如何配置运行情况和就绪情况探测以延长启动时间。

"probes": [
       {
        "type": "liveness",
        "failureThreshold": 3,
        "periodSeconds": 10,
        "successThreshold": 1,
        "tcpSocket": {
          "port": 80
        },
        "timeoutSeconds": 1
       },
       {
         "type": "readiness",
         "failureThreshold": 48,
         "initialDelaySeconds": 3,
         "periodSeconds": 5,
         "successThreshold": 1,
         "tcpSocket": {
           "port": 80
          },
          "timeoutSeconds": 5
       }]

后续步骤