k8s健康检查机制的实践和理解

一、背景
最近在公司实践DevOps(开发、运维一体化)的流程落地,并且将原先的Docker Swarm集群迁移到K8s集群。碰到原先集群的健康检查与现有集群的健康检查存在不一致的地方,在这里做个总结。
二、原理及必要性
应用健康检查,顾名思义,是对应用现有情况(包括数据库、缓存、及Socket连接)进行检查,以让集群调度管理器发现应用的存活情况,从而对应用进行管控(重新调度分配,可重启,调度到其他节点等),特别针对稳定性要求高(业务不能中断),部署机制灵活(支持滚动发布,在部署过程中不中断应用,从而不影响业务使用)
三、实践
1、原先DockerSwarm集群健康检查机制是通过在Dockerfile中指定Docker的health check地址,如下:
健康检查
HEALTHCHECK --interval=120s --timeout=5s CMD curl --fail http://localhost:8080/api/pub... || exit 1
2、应用/api/public/health/check的逻辑(示例):
(1)控制器
k8s健康检查机制的实践和理解_第1张图片
如果检测不通过,需要在httpServletResponse返回非200的错误码,以让集群判断http调用异常
(2)服务处理
k8s健康检查机制的实践和理解_第2张图片
2、现在新的K8s集群健康检查配置
k8s健康检查机制的实践和理解_第3张图片
(1)删除原先的Dockerfile中健康检查的调用代码,此方式在新的k8s集群不生效
(2) 如上图配置就绪状态检查策略
该策略可用于判断应用是否已启动,并且能正常受理业务,根据应用启动情况进行配置,以秒为单位

(3) 如上图配置存活状态检查策略
该策略配置可用于集群判断应用是否存活,并且能正常受理业务,根据应用实际情况进行配置,以秒为单位

你可能感兴趣的:(k8s健康检查机制的实践和理解)