Liveness Probe和Readiness Probe是用于检测容器状态的机制,其中Liveness Probe用于检测容器是否正常运行,Readiness Probe用于检测容器是否已经就绪。本文介绍如何配置Liveness Probe和Readiness Probe对容器进行健康检查,以便ECI更好地监控和管理容器的运行状态,确保服务的高可用性和稳定性。
功能说明
ECI支持通过存活探针和业务探针来检查容器的状态和运行情况。
|
探针 |
说明 |
应用场景 |
|
应用存活探针( Liveness Probe) |
用于检查容器是否正常运行。
|
|
|
应用业务探针(Readiness Probe) |
用于检查容器是否已经准备就绪,可以为请求提供服务。
|
如果应用程序暂时无法对外部流量提供服务,例如应用程序需要在启动期间加载大量数据或配置文件,此时,如果不想终止应用程序,也不想向其发送请求,可以通过Readiness Probe来检测和缓解这种情况。 |
配置说明(OpenAPI)
调用CreateContainerGroup接口创建ECI实例时,您可以通过容器中的LivenessProbe和ReadinessProbe参数来设置应用存活探针和应用业务探针。相关参数说明如下表所示。更多信息,请参见CreateContainerGroup。
LivenessProbe相关参数
设置LivenessProbe相关参数时,HttpGet、Exec和TcpSocket这三种检查方式,只能选择其中一种。
|
名称 |
类型 |
示例值 |
描述 |
|
Container.N.LivenessProbe.HttpGet.Path |
string |
/healthyz |
使用HTTP请求方式进行健康检查时,HTTP Get请求检测的路径。 |
|
Container.N.LivenessProbe.HttpGet.Port |
integer |
8888 |
使用HTTP请求方式进行健康检查时,HTTP Get请求检测的端口号。 |
|
Container.N.LivenessProbe.HttpGet.Scheme |
string |
HTTP |
使用HTTP请求方式进行健康检查时,HTTP Get请求对应的协议类型,取值范围:
|
|
Container.N.LivenessProbe.Exec.Command.N |
array |
cat /tmp/healthy |
使用命令行方式进行健康检查时,在容器内执行的命令。 |
|
Container.N.LivenessProbe.TcpSocket.Port |
integer |
8000 |
使用TCP Socket方式进行健康检查时,TCP Socket检测的端口。 |
|
Container.N.LivenessProbe.InitialDelaySeconds |
integer |
5 |
容器启动多久后开始检查。单位为秒。 |
|
Container.N.LivenessProbe.PeriodSeconds |
integer |
1 |
检查执行的周期,默认为10秒,最小为1秒。 |
|
Container.N.LivenessProbe.SuccessThreshold |
integer |
1 |
从上次检查失败后重新认定检查成功的检查次数阈值(必须是连续成功),默认为1。当前必须为1。 |
|
Container.N.LivenessProbe.FailureThreshold |
integer |
3 |
从上次检查成功后认定检查失败的检查次数阈值(必须是连续失败),默认为3。 |
|
Container.N.LivenessProbe.TimeoutSeconds |
integer |
1 |
检查超时的时间,默认为1秒,最小为1秒。 |
ReadinessProbe相关参数
设置ReadinessProbe相关参数时,HttpGet、Exec和TcpSocket这三种检查方式,只能选择其中一种。
|
名称 |
类型 |
示例值 |
描述 |
|
Container.N.ReadinessProbe.HttpGet.Path |
string |
/healthyz |
使用HTTP请求方式进行健康检查时,HTTP Get请求检测的路径。 |
|
Container.N.ReadinessProbe.HttpGet.Port |
integer |
8888 |
使用HTTP请求方式进行健康检查时,HTTP Get请求检测的端口号。 |
|
Container.N.ReadinessProbe.HttpGet.Scheme |
string |
HTTP |
使用HTTP请求方式进行健康检查时,HTTP Get请求对应的协议类型,取值范围:
|
|
Container.N.ReadinessProbe.Exec.Command.N |
array |
cat /tmp/healthy |
使用命令行方式进行健康检查时,在容器内执行的命令。 |
|
Container.N.ReadinessProbe.TcpSocket.Port |
integer |
8000 |
使用TCP Socket方式进行健康检查时,TCP Socket检测的端口。 |
|
Container.N.ReadinessProbe.InitialDelaySeconds |
integer |
5 |
容器启动多久后开始检查。单位为秒。 |
|
Container.N.ReadinessProbe.PeriodSeconds |
integer |
1 |
检查执行的周期,默认为10秒,最小为1秒。 |
|
Container.N.ReadinessProbe.SuccessThreshold |
integer |
1 |
从上次检查失败后重新认定检查成功的检查次数阈值(必须是连续成功),默认为1。当前必须为1。 |
|
Container.N.ReadinessProbe.FailureThreshold |
integer |
3 |
从上次检查成功后认定检查失败的检查次数阈值(必须是连续失败),默认为3。 |
|
Container.N.ReadinessProbe.TimeoutSeconds |
integer |
1 |
检查超时的时间,默认为1秒,最小为1秒。 |
配置说明(控制台)
通过弹性容器实例控制台创建ECI实例时,您可以在容器配置区域选择容器,展开该容器的高级配置,然后打开监控检查开关,并配置探针。
使用控制台配置时,仅支持命令行和HTTP请求两种检查方式,不支持TCP Socket方式。
|
参数 |
描述 |
|
时间设置 |
|
|
检查方式 |
根据需要选择检查方式。
|
|
命令行脚本 |
当检查方式为命令行脚本时,需要配置在容器内执行的命令行脚本。 |
|
HTTP请求方式 |
当检查方式为HTTP请求方式时,需要配置HTTP Get请求包含的路径、端口和协议。 |
配置示例
创建一台设置了Liveness Probe和Readiness Probe的ECI实例,然后模拟服务异常,以查看探针的配置效果。
-
调用CreateContainerGroup接口创建一台ECI实例。
以下示例采用TCP Socket方式进行健康检查:
ContainerGroupName=test-probe # 使用Nginx镜像,同时自动创建和绑定一个EIP Container.1.Name=container-1 Container.1.Image=nginx AutoCreateEip=true # 配置应用存活探针,在容器运行5秒后,每3秒检测一次80端口,成功阈值为1次,失败阈值为3次,超时时间为10秒 Container.1.LivenessProbe.TcpSocket.Port=80 Container.1.ReadinessProbe.InitialDelaySeconds=5 Container.1.LivenessProbe.PeriodSeconds=3 Container.1.LivenessProbe.SuccessThreshold=1 Container.1.LivenessProbe.FailureThreshold=3 Container.N.LivenessProbe.TimeoutSeconds=10 # 配置应用业务探针,在容器运行5秒后,每3秒检测一次80端口,成功阈值为1次,失败阈值为3次,超时时间为10秒 Container.1.ReadinessProbe.TcpSocket.Port=80 Container.1.ReadinessProbe.InitialDelaySeconds=5 Container.1.ReadinessProbe.PeriodSeconds=3 Container.1.ReadinessProbe.SuccessThreshold=1 Container.1.ReadinessProbe.FailureThreshold=3 Container.1.ReadinessProbe.TimeoutSeconds=10 -
在弹性容器实例控制台查看ECI实例事件。
ECI实例创建成功后,单击实例ID可打开实例详情页面。在事件页签下查看实例事件,可以看到容器正常启动。
事件列表显示4条 Normal 类型事件,按时间顺序依次为:Pulling image "nginx"、Successfully pulled image "nginx"、Created container container-1、Started container container-1。
-
连接容器。具体操作,请参见通过Workbench连接ECI实例。
-
修改Nginx监听端口,模拟服务异常。
-
修改Nginx监听端口。
说明本示例使用的Nginx镜像环境中没有安装vim,执行vi命令前需执行
apt-get update和apt-get install vim安装vim。vi /etc/nginx/conf.d/default.conf将监听端口从80改为8080,示例如下:
server { listen 8080; listen [::]:8080; server_name localhost; #access_log /var/log/nginx/host.access.log main; location / { root /usr/share/nginx/html; index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } -
重启Nginx。
nginx -s reload
-
-
查看探针的生效情况。
重启Nginx几秒后,容器会自动进行重启。此时查看实例事件,可以看到在Liveness Probe和Readiness Probe检查失败后,容器进行了重启。
事件列表中显示探针失败的具体原因为
dial tcp 172.x.x.x:80: connect: connection refused,表明容器端口连接被拒绝,随后容器 container-1 被自动重启。