在EDAS控制台可以配置PostStart和PreStop的生命周期钩子,使您在应用启动后和停止前都可以添加代码来自定义一些操作动作。同时在EDAS控制台可以配置Liveness和Readiness探针,来探测容器的存活性和可读性。本文将展示如何配置应用的生命周期钩子,以及如何配置容器的存活探针和可读性探针。
背景信息
通常应用运行前后和停止前后都会有一些操作,例如运行前部署资源、停止前优雅下线应用或通知其他服务或应用。EDAS依托于K8s完美集成了配置生命周期钩子的功能,支持为容器的生命周期配置PostStart和PreStop钩子。
当您在K8s集群中部署应用的时候,需要读取Pod的存活状态并确定Pod是否准备好对外提供服务。EDAS依托于K8s完美集成了配置Pod探针的功能,支持配置Liveness探针来确定何时重启容器,以及配置Readiness探针来确定容器是否已经就绪可以接受流量。
在创建应用时配置应用生命周期的钩子和探针
在更新应用时配置应用生命周期钩子和探针
您除了在创建应用时可以配置应用生命周期钩子和探针,也可以在部署应用时配置或更新钩子和探针。
配置应用生命周期管理
PostStart和PreStop配置
-
Exec模式:在容器中执行指定的命令,如果命令退出时返回码为0则判定为执行成功。
- HttpGet模式:对容器上的指定端点执行HTTP GET请求,如果响应的状态码大于等于200且小于400,则判定为执行成功。
下面以PostStart的配置为例,讲解如何在EDAS中配置应用的PostStart和PreStop容器生命周期钩子。
-
Exec模式
以容器在创建成功后执行以下命令为例:
echo "container started"
在EDAS中有以下两种配置方式:-
方式一:将命令拆分为不同的参数。
这种方式适合命令比较短,参数比较少的情况。
-
方式二:启动一个Shell,在Shell中执行命令。
这种方式适合命令比较长,参数比较多的情况。
-
-
HttpGet模式
HttpGet模式支持以下配置参数:- Host:HTTP请求主机地址,不设置时默认为Pod的IP地址。
- Path:HTTP请求路径,默认值是"/"。
- Port:HTTP请求端口号。
- Scheme:协议类型,支持HTTP和HTTPS协议,默认是HTTP。
- HttpHeaders:自定义HTTP请求头。
以PostStart的HttpGet钩子为例,在容器启动后会向
http://example.com:8080/healthz
这个地址发送GET请求。说明如果PostStart或PreStop钩子执行失败,容器会被自动重启,在应用的变更记录中可以查询到PostStart或PreStop执行失败的信息。
Liveness和Readiness配置
-
LivenessProbe:用于检测容器是否存活。如果检测失败,K8s会自动杀死容器,然后根据重启策略重启容器。
-
ReadinessProbe:用于检测容器是否就绪可以接收流量。如果检测成功,K8s会将Pod添加到Pod所属的Service列表中,从而使Pod开始接收流量。
-
Exec:在容器中执行指定的命令,如果命令退出时返回码为0则认为诊断成功。
-
HttpGet:对容器上的特定端点执行HTTP GET请求,如果响应的状态码大于等于200且小于400,则认为探测成功的。
-
TcpSocket:检查容器的IP地址上的指定的TCP端口是否打开,如果打开则认为探测成功。
-
InitialDelaySeconds:容器启动后到探针第一次执行的延迟时间,以秒为单位,最小值为1秒,最大值为1000秒。
-
PeriodSeconds:探测周期,以秒为单位,最小值为1秒,最大值为1000秒。
-
SuccessThreshold:探针探测失败后,只有连续成功次数达到该阈值才被认为再次成功。最小值为1,最大值为1000,在Liveness探针中,该值固定为1。
-
TimeoutSeconds:探针超时时间,以秒为单位,最小值为1秒,最大值为1000秒。
-
FailureThreshold:探针探测成功后,只有连续失败次数达到该阈值才被认为探测失败。最小值为1,最大值为1000。
下图以Liveness配置为例,使用TcpSocket模式,探测的地址为空,因此默认目标地址是Pod的IP地址,探测端口是18081。在容器启动后60秒才开始进行首次探测,探测周期为10秒,只要有1次探测成功即认为Pod存活。每次探测的超时时间是5秒,出现连续3次探测失败,K8s就会终结容器,然后根据重启策略重启容器。

结果验证
当配置了应用生命周期钩子后,可通过以下示例步骤验证配置结果。
例如在启动应用前,配置了Hello from the postStart handler
的写入脚本。
Hello from the postStart handler
,如果存在,那么表示配置成功。
EDAS容器服务K8s和Serverless K8s交流群
如果您在EDAS中使用容器服务K8s集群和Serverless K8s集群过程中有任何疑问或建议,请提交工单,或使用钉钉搜索钉钉群号23197114
加入钉钉群进行反馈。