全部产品
Search
文档中心

人工智能平台 PAI:健康检查

更新时间:Jul 02, 2026

EAS健康检查基于Kubernetes探针机制,自动检测并恢复异常容器,确保只有健康的实例接收流量。

使用限制

仅当您创建了包含健康检查逻辑的自定义镜像,并使用该镜像部署服务时,才能使用健康检查功能。

原理介绍

EAS的健康检查采用Kubernetes探针机制,通过探针和健康检查方法检测和管理服务的健康状况。其中:

  • 支持的探针类型:

    探针类型

    说明

    存活探针(Liveness Probes)

    用于判断容器是否存活。如果探测到容器不健康,kubelet将kill掉该容器,并根据重启策略处理。如果容器不包含存活探针,kubelet认为该容器的存活探针返回值永远是Success。

    就绪探针(Readiness Probes)

    用于判断容器服务是否可用。达到Ready状态的Pod才可以接收请求。Service与Endpoint的关联关系根据Pod的Ready状态设置:

    • 当Pod的Ready状态为False时,K8s将Pod IP从Service关联的后端Endpoint列表中隔离。

    • 等待Pod的Ready状态变更为True时,K8s将Pod IP重新加入到Service关联的Endpoint列表中。

    启动探针(Startup Probes)

    用于判断容器何时启动完成,可以控制容器在启动成功后再进行存活性和就绪性检查。适用于慢启动容器,避免在启动完成前被kill掉。

  • 支持的健康检测方法:

    健康检测方法

    说明

    http_get

    通过HTTP GET请求检查服务健康和存活状况,并依据响应状态码确定成功与否。

    tcp_socket

    通过尝试打开一个TCP连接来检查服务健康和存活状况。

    exec

    在容器内执行指定命令,并依据命令的退出码确定探测是否成功。

准备自定义镜像

您可以选用Web框架封装预测逻辑。以Flask框架为例,app.py示例内容如下:

import json
from flask import Flask, request, make_response

app = Flask(__name__)

@app.route('/', methods = ['GET','POST'])
def process_handle_func():
    """ 
       根据实际需求解析request body
    """
    data = request.get_data().decode('utf-8')
    body = json.loads(data)
    res = process(body)
    """ 
       根据实际需求设置response
    """
    response = make_response(res)
    response.status_code = 200
    return response

def process(data):
    """ 
       您的预测逻辑
    """
    return 'result'

if __name__ == '__main__':
    """
    注意这里的host必须指定为0.0.0.0, 否则服务部署时健康检查不能通过,
    port必须和部署服务的JSON配置文件中指定的port保持一致。
    """
    app.run(host='0.0.0.0', port=8000)

您可以编写Dockerfile拷贝预测代码并安装所需的包,Dockerfile示例如下:

# 以Python为例
FROM registry.cn-shanghai.aliyuncs.com/eas/bashbase-amd64:0.0.1
COPY ./process_code  /eas
RUN /xxx/pip install 需要的包
CMD ["/xxx/python", "/eas/xxx/app.py"] 

构建自定义镜像的步骤,请参见使用企业版实例构建镜像。您需要参考使用自定义镜像部署,了解构建自定义镜像时需要注意的细节。另一种方式是将代码保存在NAS或Git仓库中,部署时通过存储挂载接入服务实例,详情参见存储挂载。本文使用第一种方式介绍如何在部署服务时配置健康检查功能

部署服务时配置健康检查功能

自定义部署配置健康检查功能

  1. 登录PAI控制台,在页面上方选择目标地域,并在右侧选择目标工作空间,然后单击进入EAS

  2. 推理服务页签,单击部署服务。然后在自定义模型部署区域,单击自定义部署

  3. 环境信息区域,配置以下关键参数,其他参数配置说明,请参见自定义部署

    参数

    描述

    镜像配置

    选择镜像地址,并在文本框中输入已准备好的自定义镜像地址,例如registry-vpc.cn-shanghai.aliyuncs.com/xxx/yyy:zzz

    运行命令

    镜像的入口命令,只支持单一命令形式,不支持复杂脚本,需要与Dockerfile中的命令保持一致。例如/data/eas/ENV/bin/python /data/eas/app.py

    同时您需要输入端口号,即镜像启动后监听的本地HTTP端口,例如8000。

    重要
    • 由于EAS引擎监听固定的8080/9090端口,因此容器端口需要避开8080/9090端口。

    • 该端口必须和运行命令中的xxx.py文件配置的端口保持一致。

  4. 服务功能区域,展开稳定保障折叠面板,打开健康检查开关,参考如下说明配置参数后,单击确定

    健康检查参数表

    参数

    描述

    探针类型

    支持使用以下三种探针类型:

    • 存活探针:用于检测容器是否处于正常运行状态。

    • 就绪探针:确保容器已经完成初始化并准备好处理请求。

    • 启动探针:专为需要较长时间初始化的应用设计,避免因容器启动过程缓慢而被错误地标记为失败。

    关于每种探针的原理说明,请参见原理介绍

    健康检查方法

    支持以下三种健康检查方法:

    • http_get:通过容器的IP地址、端口号以及路径调用HTTP Get方法,如果响应的状态码大于等于200且小于400,则容器健康。

    • tcp_socket:通过容器的IP地址和端口号执行TCP检查,如果能够建立TCP连接,则容器健康。

    • exec(自定义健康检查):在容器中执行指定命令,如果执行成功后退出码为0,则健康检查成功。

    调用路径

    健康检查方法选择http_get时,支持配置该参数。

    检查的HTTP Server访问地址,前缀为http://localhost,后缀自定义,默认为/

    端口号

    健康检查方法选择http_gettcp_socket时,支持配置该参数。

    检查端口号,例如8000。

    运行命令

    健康检查方法选择exec时,支持配置该参数。

    输入运行命令。前端根据您输入的运行命令,自动将其转化为相应的格式,并输入到部署JSON中。

    初始化检查延时时长

    健康检查延迟时长,容器启动后多久开始进行第一次健康检查,默认为15秒。

    轮询检查时间间隔

    健康检查频率,默认为10秒。频率过高会对Pod带来较大的额外开销,频率过低则无法及时反映容器产生的错误。

    检查超时时长

    健康检查的超时时长,默认1秒。超时则健康检查将被认定为失败。

    检测成功认定次数

    处于成功状态时,健康检查连续失败几次,可被认定为失败,就绪探针默认为3次,存活探针和启动探针默认为1次。

    检测失败认定次数

    处于失败状态时,健康检查连续成功几次,可被认定为成功,默认1次。

  5. 参数配置完成后,单击部署

JSON部署配置健康检查功能

新建JSON格式的文件,命名为service.json,文件内容示例如下。

{
    "metadata": {
        "name": "test",
        "instance": 1,
        "enable_webservice": true
    },
    "cloud": {
        "computing": {
            "instance_type": "ml.gu7i.c16m60.1-gu30"
        }
    },
    "containers": [
        {
            "image":"registry-vpc.cn-shanghai.aliyuncs.com/xxx/yyy:zzz",
            "env":[
                {
                    "name":"VAR_NAME",
                    "value":"var_value"
                }
            ],
            "liveness_check":{
                "http_get":{
                    "path":"/",
                    "port":8000
                },
                "initial_delay_seconds":3,
                "period_seconds":3,
                "timeout_seconds":1,
                "success_threshold":2,
                "failure_threshold":4
            },
            "command":"/data/eas/ENV/bin/python /data/eas/app1.py",
            "port":8000
        }
    ]
}

其中关键配置说明如下。其他参数配置说明,请参见JSON部署

参数

描述

image

用于部署模型服务的自定义镜像地址。

由于EAS不开放公网访问权限,因此您需要使用VPC内网Registry地址进行部署。例如registry-vpc.cn-shanghai.aliyuncs.com/xxx/yyy:zzz

env

name

镜像执行时的环境变量名称。

value

镜像执行时的环境变量取值。

comand

镜像的入口命令,只支持单一命令形式,不支持复杂脚本,例如/data/eas/ENV/bin/python /data/eas/app.py

port

镜像中进程监听的网络端口号。例如8000。

重要

该端口必须和command中的xxx.py文件配置的端口保持一致。

liveness_check

说明

表示健康检查配置使用的探针类型为存活探针。您还可以将其配置为health_check(就绪探针)或startup_check(启动探针)。

http_get

表示使用HTTP Get检查方法请求访问8000端口。其中:

  • http_get.path:检查的HTTP Server访问地址,前缀为http://localhost,后缀自定义,默认为/

  • http_get.port:表示检查的HTTP Server端口号。

另外还支持使用以下两种健康检查方法:

  • tcp_socket:通过容器的IP地址和端口号执行TCP检查,如果能够建立TCP连接,则容器健康。配置方法如下:

    "tcp_socket":{
        "port":8000
    }
  • exec:在容器中执行指定命令,如果执行成功后退出码为0,则健康检查成功。配置方法如下:

    "exec":{
        "command":[
            "your_script",
            "with_args"
        ]
    }

initial_delay_seconds

健康检查延迟时长,容器启动后多久开始进行第一次健康检查,默认为0秒。

period_seconds

健康检查频率,默认为10秒。频率过高会对Pod带来较大的额外开销,频率过低则无法及时反映容器产生的错误。

timeout_seconds

健康检查的超时时长,默认1秒。超时则健康检查将被认定为失败。

success_threshold

处于成功状态时,健康检查连续失败几次,可被认定为失败,就绪探针默认为3次,存活探针和启动探针默认为1次。

failure_threshold

处于失败状态时,健康检查连续成功几次,可被认定为成功,默认1次。