本文会总结在工作过程中踩过的坑,以及平常看技术分享帖中觉得比较有用的经验,在这里做下汇总,可能内容稍微有点杂,但在我看在都是用时间换来的经验值,希望对读者有所帮助。
1、preStop钩子使用
先简单介绍下preStop,该钩子在容器删除前触发,一般用来清理现场,作用蛮大的,下面介绍两个使用preStop钩子的实际场景。
1.1 容器保留现场
我们都知道,很多情况下容器都是无状态的,当容器发生内存异常,导致liveness probe检测失败重启,可以使用preStop钩子将应用的coredump日志进行导出,然后分析。
1.2 使用preStop Hook保证服务安全退出
在服务更新过程中,服务容器被直接终止,由于Eureka Server有缓冲,部分请求任然会发送到已经终止的容器,为了减少错误,可以在容器退出前主动从Eureka Server中注销这个节点,可以使用preStop这个钩子来实现。
2、Health Check应用场景
k8s集群中默认提供两种探针:liveness probe和readiness probe,先简单对比下两种的区别。
(1)liveness探测失败是重启容器,readiness探测失败是将容器设置为not ready,不接受service转发的请求。
(2)liveness探测和readiness探测是独立执行的,二者没有依赖,可以单独使用,也可以同时使用。
以下描述两种使用readiness探测的场景
(1)在服务scale up过程中,可以通过readiness探测容器是否就绪,避免将请求发送到还没有ready好的backend中。
(2)在服务rolling update过程中,新副本只有通过readiness探测,才会被添加到service的endpoint记录中,如果没有通过探测,现有副本不会被全部替换,业务仍然正常运行。
上面描述的这两种场景,都是保证服务在进行滚动更新时,最大程度保证业务零中断。