Readiness 和 Liveness 检查的区别
本文介绍了两种 Health Check: Readiness & Liveness,前者用于让负载均衡知道什么可以指派流量给应用,后者用于让负载均衡直到什么时候应该将应用移除出 Pool。
- Readiness 的使用场景:应用即便已经正在运行了,它仍然需要一定时间才能 serve 服务,这段时间可能用来加载数据,可能用来构建缓存,可能用来选举 Leader,总之 Readiness 检查通过前是不会有流量发给应用的。
- Liveness 的使用场景:应用可能运行到一半崩溃了,死锁了,CPU100%了,总之没法响应请求了。这时候 Livenss 能够检察出应用无法再处理请求了,就会将其从 Pool 中挪走,或者更聪明的工具可以重启应用或者干脆起新的应用加到 Pool 中。
- 在 Kubernetes 中有三种 Probe 可以使用,HTTP / Command / TCP。
- HTTP 200~300 响应码的情况下,健康检查成功,否则算失败。即便应用不是 web 服务,也可以提供一个 http 接口出来方便检查。
- Kubernetes 可以在 container 中运行命令,如果 exit_code=0 那么健康检查成功。通常没法提供 http 的时候可以用这个。
- TCP 检查能建立连接就算通过,一般提供另类服务,例如 rpc, ftp 等应用时可以用这个。
- 配置上,一般就是检查超时的阈值。一般来说 liveness 需要配置 initialDelaySeconds,否则有可能应用永远起不来。推荐使用 P99 启动时间(第99百分位时间)作为 initialDelaySeconds。