设置容器健康检查
操作场景
健康检查是指容器运行过程中,根据用户需要,定时检查容器健康状况。若未配置健康检查机制,当容器内的应用程序发生异常时,Pod无法感知该异常,也不会自动执行重启操作进行恢复。这样可能导致Pod状态显示为“运行中”,但实际上容器内的应用已处于不可用或异常状态。
Kubernetes提供了三种健康检查探针,监测容器中应用的运行状态,以确保系统的稳定性和高可用性,具体如下:
- 存活探针(livenessProbe):用于检测容器是否正常,类似于执行ps命令检查进程是否存在。如果容器的存活检查失败,集群会对该容器执行重启操作,否则不执行任何操作。
- 就绪探针(readinessProbe):用于判断容器中的业务是否已就绪,以决定是否将流量转发至当前实例。在某些场景中,应用程序虽然进程已启动,但由于需要加载大量磁盘数据或依赖外部服务的初始化,尚未具备对外提供服务的能力。此时,通过就绪检查可以避免将流量路由至尚未就绪的实例。如果容器的就绪检查失败,CCE集群会临时将其从服务端点中移除,屏蔽外部请求的访问。而一旦检查通过,容器即被视为就绪,可正常接收流量。
- 启动探针(startupProbe):用于检测容器内的应用是否已启动。 启动探针检测通过后,集群才会开始执行存活检查和就绪检查, 从而确保这些检查不会影响应用程序的启动。该探针适用于启动时间较长的容器,能够有效避免容器在初始化尚未完成时被误判为异常,从而被提前终止。
更多信息,请参见存活、就绪和启动探针和配置存活、就绪和启动探针。
设置存活探针
设置存活探针可以发现容器仍处在运行状态但无法正常响应的问题,例如死锁。
- 登录CCE控制台。
- 在创建工作负载时,配置容器信息,选择“健康检查”。
- 开启存活探针。图1 开启存活探针

表1 探针参数说明 检查方式
检查方式介绍
特有参数
公共参数
HTTP请求检查(httpGet)
适用于提供HTTP/HTTPS服务的容器。进行该配置后,集群将周期性地对该容器的访问路径发起HTTP/HTTPS GET请求,如果HTTP/HTTPS response返回码属于200~399范围,则证明探测成功,否则探测失败, kubelet会终止这个容器并将其重启。
- 路径:表示HTTP/HTTPS的检查路径,该路径由容器镜像决定。需要使用绝对路径,即以“/”开头。
- 端口:容器暴露访问的健康检查端口,端口号取值范围为1~65535。
- 主机地址:表示请求的主机地址,不填时默认为Pod实例的IP地址。
- 协议:表示发送请求所使用的协议,需与容器提供的服务类型匹配。
- 请求头部:发起HTTP/HTTPS请求时携带的请求头,支持键值对。
- 检测周期(periodSeconds):表示探针的检测周期,单位为秒。
例如,设置为30,表示每30秒检测一次。
- 延迟时间(initialDelaySeconds):表示延迟检查时间,是预留给业务程序启动的时间,单位为秒。
例如,设置为30,表明容器启动后30秒开始健康检查。
- 超时时间(timeoutSeconds):表示超时时间,单位为秒。若设置为0或不设置,默认超时等待时间为1秒。
例如,设置为10,表明执行健康检查的超时等待时间为10秒。如果超过这个时间,本次健康检查就被视为失败。
- 成功阈值(successThreshold):表示探测失败后,容器状态转变为“健康”所需要的最小连续成功次数。该参数的默认值为1,且最小允许值为1。在存活探针和启动探针中,这个值必须为1。
例如,设置为1时,表明健康检查失败后,仅需连续成功1次,即可将工作负载恢复为正常状态。
- 最大失败次数(failureThreshold):表示在容器被判定为“不健康”之前,允许连续探测失败的次数。该参数默认值为 3,最小值为 1。
对于存活探针:当连续失败次数达到该阈值后,容器将被标记为不健康,且kubelet会重启容器。
对于就绪探针:当连续失败次数达到阈值后,Pod会被标记为未就绪,并从Service的Endpoints中移除,停止接收新流量,且容器不会被重启。
TCP端口检查(tcpSocket)
适用于提供TCP协议通信的容器(如数据库、缓存、自定义TCP服务等)。集群会周期性地与该容器建立TCP连接,如果连接成功,则证明探测成功,否则探测失败,kubelet会终止这个容器并将其重启。
端口:容器暴露访问的健康检查端口,端口号取值范围为1~65535。
执行命令检查(exec)
要求用户指定一个容器内的可执行命令,集群会周期性地在容器内执行该命令,如果退出码状态为0则检查成功,否则检查失败,kubelet会终止这个容器并将其重启。
注意:在高负载环境中,建议避免使用执行命令检查方式,执行命令会消耗系统资源,如果系统资源紧张(如CPU负载高、文件系统被锁住等)可能导致健康检查超时失败。如果需要使用执行命令检查,您可以参考以下建议:
- 增加失败次数和超时时间配置,避免因为突发性的资源竞争导致健康检查超时失败,但是该方式可能会降低业务敏感度,请合理配置。
- 通过合理规划业务容器或者系统插件的CPU Limit配置,避免出现因CPU时间片抢占导致内核锁长期不释放影响同节点其它容器执行exec探测的问题。
执行命令:表示在容器内执行的命令,用于判断容器的运行状态。若运行命令有多个,需分行书写。
说明:- 使用该方式时,必须将程序/工具提前打包到容器镜像中。由于集群直接在容器内执行命令,因此无法访问宿主机或其他容器的文件系统。若命令依赖的程序/工具(如curl、nc、自定义脚本)未包含在镜像中,会报错“Command not found”。
- 如果执行的命令是一个Shell脚本,需明确指定脚本解析器。由于集群执行探针时不处于交互式终端环境中,不能直接将脚本文件作为命令执行,必须通过脚本编辑器调用脚本。例如,如果脚本位于/data/scripts/health_check.sh,使用执行命令检查时,应指定的程序为sh /data/scripts/health_check.sh。
GRPC检查(grpc)
适用于GRPC应用程序,无需暴露HTTP端口或依赖外部可执行脚本,即可通过标准GRPC接口实现容器的健康检查。
端口:容器暴露访问的健康检查端口,端口号取值范围为1~65535。
- 其他参数配置完成后,单击右下角“创建工作负载”。待工作负载状态为“运行中”,则说明健康检查成功。
- 请参见通过kubectl连接集群,使用kubectl连接集群。
- 执行以下命令,创建YAML文件health_check.yaml,用于配置工作负载,文件名称可自定义。
vim health_check.yaml以HTTP请求检查为例(其余健康检查方式示例请参见配置存活、就绪和启动探针),文件内容如下:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx namespace: default spec: replicas: 1 selector: matchLabels: app: nginx version: v1 template: metadata: labels: app: nginx version: v1 spec: containers: - name: container-1 image: nginx:latest livenessProbe: # 存活探针 httpGet: # 以HTTP请求检查为例 path: / # HTTP检查路径 port: 80 # 检查端口为80 host: '' # 主机地址,默认为实例 scheme: HTTP # 健康检查协议 httpHeaders: # 可选,请求头名称为Custom-Header,对应的值为Awesome - name: Custom-Header value: Awesome initialDelaySeconds: 3 # 延迟检查时间,是预留给业务程序启动的时间,单位为秒 timeoutSeconds: 1 # 表示超时时间,单位为秒 periodSeconds: 3 # 探针的检测周期,单位为秒 successThreshold: 1 # 认定为健康检查成功所需要的最小连续成功次数 failureThreshold: 3 # 认定为健康检查失败所需要的最小连续失败次数 imagePullSecrets: - name: default-secret - 执行以下命令,创建工作负载。
kubectl create -f health_check.yaml回显如下,表示已经开始创建工作负载。
deployment.apps/nginx created
- 执行以下命令,查看工作负载的pod状态。
kubectl get pod
回显如下,如果该工作负载Pod的STATUS为Running,则表示创建成功。
NAME READY STATUS RESTARTS AGE nginx-58cdd4f48d-jcsqn 1/1 Running 0 4m19s
设置就绪探针
就绪探针用于判断容器中的业务是否已就绪,Pod就绪后才会被添加到Service的服务端点,开始接收流量。
- 登录CCE控制台。
- 在创建工作负载时,配置容器信息,选择“健康检查”。
- 开启就绪探针。图2 开启就绪探针

表2 探针参数说明 检查方式
检查方式介绍
特有参数
公共参数
HTTP请求检查(httpGet)
适用于提供HTTP/HTTPS服务的容器。进行该配置后,集群将周期性地对该容器的访问路径发起HTTP/HTTPS GET请求,如果HTTP/HTTPS response返回码属于200~399范围,则证明探测成功,否则探测失败, kubelet会终止这个容器并将其重启。
- 路径:表示HTTP/HTTPS的检查路径,该路径由容器镜像决定。需要使用绝对路径,即以“/”开头。
- 端口:容器暴露访问的健康检查端口,端口号取值范围为1~65535。
- 主机地址:表示请求的主机地址,不填时默认为Pod实例的IP地址。
- 协议:表示发送请求所使用的协议,需与容器提供的服务类型匹配。
- 请求头部:发起HTTP/HTTPS请求时携带的请求头,支持键值对。
- 检测周期(periodSeconds):表示探针的检测周期,单位为秒。
例如,设置为30,表示每30秒检测一次。
- 延迟时间(initialDelaySeconds):表示延迟检查时间,是预留给业务程序启动的时间,单位为秒。
例如,设置为30,表明容器启动后30秒开始健康检查。
- 超时时间(timeoutSeconds):表示超时时间,单位为秒。若设置为0或不设置,默认超时等待时间为1秒。
例如,设置为10,表明执行健康检查的超时等待时间为10秒。如果超过这个时间,本次健康检查就被视为失败。
- 成功阈值(successThreshold):表示探测失败后,容器状态转变为“健康”所需要的最小连续成功次数。该参数的默认值为1,且最小允许值为1。在存活探针和启动探针中,这个值必须为1。
例如,设置为1时,表明健康检查失败后,仅需连续成功1次,即可将工作负载恢复为正常状态。
- 最大失败次数(failureThreshold):表示在容器被判定为“不健康”之前,允许连续探测失败的次数。该参数默认值为 3,最小值为 1。
对于存活探针:当连续失败次数达到该阈值后,容器将被标记为不健康,且kubelet会重启容器。
对于就绪探针:当连续失败次数达到阈值后,Pod会被标记为未就绪,并从Service的Endpoints中移除,停止接收新流量,且容器不会被重启。
TCP端口检查(tcpSocket)
适用于提供TCP协议通信的容器(如数据库、缓存、自定义TCP服务等)。集群会周期性地与该容器建立TCP连接,如果连接成功,则证明探测成功,否则探测失败,kubelet会终止这个容器并将其重启。
端口:容器暴露访问的健康检查端口,端口号取值范围为1~65535。
执行命令检查(exec)
要求用户指定一个容器内的可执行命令,集群会周期性地在容器内执行该命令,如果退出码状态为0则检查成功,否则检查失败,kubelet会终止这个容器并将其重启。
注意:在高负载环境中,建议避免使用执行命令检查方式,执行命令会消耗系统资源,如果系统资源紧张(如CPU负载高、文件系统被锁住等)可能导致健康检查超时失败。如果需要使用执行命令检查,您可以参考以下建议:
- 增加失败次数和超时时间配置,避免因为突发性的资源竞争导致健康检查超时失败,但是该方式可能会降低业务敏感度,请合理配置。
- 通过合理规划业务容器或者系统插件的CPU Limit配置,避免出现因CPU时间片抢占导致内核锁长期不释放影响同节点其它容器执行exec探测的问题。
执行命令:表示在容器内执行的命令,用于判断容器的运行状态。若运行命令有多个,需分行书写。
说明:- 使用该方式时,必须将程序/工具提前打包到容器镜像中。由于集群直接在容器内执行命令,因此无法访问宿主机或其他容器的文件系统。若命令依赖的程序/工具(如curl、nc、自定义脚本)未包含在镜像中,会报错“Command not found”。
- 如果执行的命令是一个Shell脚本,需明确指定脚本解析器。由于集群执行探针时不处于交互式终端环境中,不能直接将脚本文件作为命令执行,必须通过脚本编辑器调用脚本。例如,如果脚本位于/data/scripts/health_check.sh,使用执行命令检查时,应指定的程序为sh /data/scripts/health_check.sh。
GRPC检查(grpc)
适用于GRPC应用程序,无需暴露HTTP端口或依赖外部可执行脚本,即可通过标准GRPC接口实现容器的健康检查。
端口:容器暴露访问的健康检查端口,端口号取值范围为1~65535。
- 其他参数配置完成后,单击右下角“创建工作负载”。待工作负载状态为“运行中”,则说明健康检查成功。
- 请参见通过kubectl连接集群,使用kubectl连接集群。
- 执行以下命令,创建YAML文件health_check.yaml,用于配置工作负载,文件名称可自定义。
vim health_check.yaml以HTTP请求检查为例(其余健康检查方式示例请参见配置存活、就绪和启动探针),文件内容如下:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx namespace: default spec: replicas: 1 selector: matchLabels: app: nginx version: v1 template: metadata: labels: app: nginx version: v1 spec: containers: - name: container-1 image: nginx:latest readinessProbe: # 就绪探针 httpGet: # 以HTTP请求检查为例 path: / # HTTP检查路径 port: 80 # 检查端口为80 host: '' # 主机地址,默认为实例 scheme: HTTP # 健康检查协议 httpHeaders: # 可选,请求头名称为Custom-Header,对应的值为Awesome - name: Custom-Header value: Awesome initialDelaySeconds: 3 # 延迟检查时间,是预留给业务程序启动的时间,单位为秒 timeoutSeconds: 1 # 表示超时时间,单位为秒 periodSeconds: 3 # 探针的检测周期,单位为秒 successThreshold: 1 # 认定为健康检查成功所需要的最小连续成功次数 failureThreshold: 3 # 认定为健康检查失败所需要的最小连续失败次数 imagePullSecrets: - name: default-secret - 执行以下命令,创建工作负载。
kubectl create -f health_check.yaml回显如下,表示已经开始创建工作负载。
deployment.apps/nginx created
- 执行以下命令,查看工作负载的pod状态。
kubectl get pod
回显如下,如果该工作负载Pod的STATUS为Running,则表示创建成功。
NAME READY STATUS RESTARTS AGE nginx-58cdd4f48d-jcsqn 1/1 Running 0 4m19s
设置启动探针
在容器启动时执行,检测容器是否启动成功,适用于启动时需要较长的初始化时间的应用。
- 登录CCE控制台。
- 在创建工作负载时,配置容器信息,选择“健康检查”。
- 开启启动探针。图3 开启启动探针

表3 探针参数说明 检查方式
检查方式介绍
特有参数
公共参数
HTTP请求检查(httpGet)
适用于提供HTTP/HTTPS服务的容器。进行该配置后,集群将周期性地对该容器的访问路径发起HTTP/HTTPS GET请求,如果HTTP/HTTPS response返回码属于200~399范围,则证明探测成功,否则探测失败, kubelet会终止这个容器并将其重启。
- 路径:表示HTTP/HTTPS的检查路径,该路径由容器镜像决定。需要使用绝对路径,即以“/”开头。
- 端口:容器暴露访问的健康检查端口,端口号取值范围为1~65535。
- 主机地址:表示请求的主机地址,不填时默认为Pod实例的IP地址。
- 协议:表示发送请求所使用的协议,需与容器提供的服务类型匹配。
- 请求头部:发起HTTP/HTTPS请求时携带的请求头,支持键值对。
- 检测周期(periodSeconds):表示探针的检测周期,单位为秒。
例如,设置为30,表示每30秒检测一次。
- 延迟时间(initialDelaySeconds):表示延迟检查时间,是预留给业务程序启动的时间,单位为秒。
例如,设置为30,表明容器启动后30秒开始健康检查。
- 超时时间(timeoutSeconds):表示超时时间,单位为秒。若设置为0或不设置,默认超时等待时间为1秒。
例如,设置为10,表明执行健康检查的超时等待时间为10秒。如果超过这个时间,本次健康检查就被视为失败。
- 成功阈值(successThreshold):表示探测失败后,容器状态转变为“健康”所需要的最小连续成功次数。该参数的默认值为1,且最小允许值为1。在存活探针和启动探针中,这个值必须为1。
例如,设置为1时,表明健康检查失败后,仅需连续成功1次,即可将工作负载恢复为正常状态。
- 最大失败次数(failureThreshold):表示在容器被判定为“不健康”之前,允许连续探测失败的次数。该参数默认值为 3,最小值为 1。
对于存活探针:当连续失败次数达到该阈值后,容器将被标记为不健康,且kubelet会重启容器。
对于就绪探针:当连续失败次数达到阈值后,Pod会被标记为未就绪,并从Service的Endpoints中移除,停止接收新流量,且容器不会被重启。
TCP端口检查(tcpSocket)
适用于提供TCP协议通信的容器(如数据库、缓存、自定义TCP服务等)。集群会周期性地与该容器建立TCP连接,如果连接成功,则证明探测成功,否则探测失败,kubelet会终止这个容器并将其重启。
端口:容器暴露访问的健康检查端口,端口号取值范围为1~65535。
执行命令检查(exec)
要求用户指定一个容器内的可执行命令,集群会周期性地在容器内执行该命令,如果退出码状态为0则检查成功,否则检查失败,kubelet会终止这个容器并将其重启。
注意:在高负载环境中,建议避免使用执行命令检查方式,执行命令会消耗系统资源,如果系统资源紧张(如CPU负载高、文件系统被锁住等)可能导致健康检查超时失败。如果需要使用执行命令检查,您可以参考以下建议:
- 增加失败次数和超时时间配置,避免因为突发性的资源竞争导致健康检查超时失败,但是该方式可能会降低业务敏感度,请合理配置。
- 通过合理规划业务容器或者系统插件的CPU Limit配置,避免出现因CPU时间片抢占导致内核锁长期不释放影响同节点其它容器执行exec探测的问题。
执行命令:表示在容器内执行的命令,用于判断容器的运行状态。若运行命令有多个,需分行书写。
说明:- 使用该方式时,必须将程序/工具提前打包到容器镜像中。由于集群直接在容器内执行命令,因此无法访问宿主机或其他容器的文件系统。若命令依赖的程序/工具(如curl、nc、自定义脚本)未包含在镜像中,会报错“Command not found”。
- 如果执行的命令是一个Shell脚本,需明确指定脚本解析器。由于集群执行探针时不处于交互式终端环境中,不能直接将脚本文件作为命令执行,必须通过脚本编辑器调用脚本。例如,如果脚本位于/data/scripts/health_check.sh,使用执行命令检查时,应指定的程序为sh /data/scripts/health_check.sh。
GRPC检查(grpc)
适用于GRPC应用程序,无需暴露HTTP端口或依赖外部可执行脚本,即可通过标准GRPC接口实现容器的健康检查。
端口:容器暴露访问的健康检查端口,端口号取值范围为1~65535。
- 其他参数配置完成后,单击右下角“创建工作负载”。待工作负载状态为“运行中”,则说明健康检查成功。
- 请参见通过kubectl连接集群,使用kubectl连接集群。
- 执行以下命令,创建YAML文件health_check.yaml,用于配置工作负载,文件名称可自定义。
vim health_check.yaml以HTTP请求检查为例(其余健康检查方式示例请参见配置存活、就绪和启动探针),文件内容如下:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx namespace: default spec: replicas: 1 selector: matchLabels: app: nginx version: v1 template: metadata: labels: app: nginx version: v1 spec: containers: - name: container-1 image: nginx:latest startupProbe: # 启动探针 httpGet: # 以HTTP请求检查为例 path: / # HTTP检查路径 port: 80 # 检查端口为80 host: '' # 主机地址,默认为实例 scheme: HTTP # 健康检查协议 httpHeaders: # 可选,请求头名称为Custom-Header,对应的值为Awesome - name: Custom-Header value: Awesome initialDelaySeconds: 3 # 延迟检查时间,是预留给业务程序启动的时间,单位为秒 timeoutSeconds: 1 # 表示超时时间,单位为秒 periodSeconds: 3 # 探针的检测周期,单位为秒 successThreshold: 1 # 认定为健康检查成功所需要的最小连续成功次数 failureThreshold: 3 # 认定为健康检查失败所需要的最小连续失败次数 imagePullSecrets: - name: default-secret - 执行以下命令,创建工作负载。
kubectl create -f health_check.yaml回显如下,表示已经开始创建工作负载。
deployment.apps/nginx created
- 执行以下命令,查看工作负载的pod状态。
kubectl get pod
回显如下,如果该工作负载Pod的STATUS为Running,则表示创建成功。
NAME READY STATUS RESTARTS AGE nginx-58cdd4f48d-jcsqn 1/1 Running 0 4m19s
相关文档
- 创建工作负载:了解工作负载的更多参数。
- 管理工作负载:工作负载创建后,您可以对其执行升级、编辑YAML、查看日志等操作。
- 如果工作负载创建失败,请参考工作负载异常问题排查进行处理。

