vlambda博客
学习文章列表

k8s之就绪探针意义何在

# 就绪探针简介

    readiness probe(就绪探针)作为k8s的健康检查手段之一, 用于探测容器服务启动完成并处于正常服务状态,

    当pod中所有的容器都就绪成功, pod才会被认定为就绪状态, 否则就会被认定为非就绪状态, 会从service的endpoint列表中将该pod的ip移除, 也就是该pod不会通过service对外提供服务


# 为啥必须有就绪探针

    看了上述的描述,乍一看会觉得比较正常,但这经不住细想,比如,为啥非要在应用层面去保证service的endpoint列表的正确?

    为啥不能通过类似网关的设计 在流量穿透网关的时候去做统一处理 如果不通 网关就去处理对应的service将对应的pod ip移除

这样的设计是不是更加优雅 也不用麻烦在所有的应用层面加入一个就绪探针

    而我这种想法在kube-proxy的早期设计就是如此 也叫做userSpace模式, 这个时候的kube-proxy就是一个类似网关的穿透模式设计

    kube-proxy会在node暴露一个随机端口, 所有通过service的访问都会穿透到kube-proxy, kube-proxy去分发流量到具体的pod ip, 此时kube-proxy就会去保证类似就绪探针的工作

    具体原理如下图,




    而到了当下, 由于性能原因(主要是内核和用户空间的切换过于频繁), 目前kube-proxy的核心设计则改为基于iptables规则维护的非穿透模式, 

    具体原理如下图,




    可以看到kube-proxy的核心变成了通过iptables去维护netfilter转发规则, 而不再是流量穿透的网关模式, 

    而service流量是通过netfilter直接转发给pod的, 没有网关的监控处理, 所以只能通过应用的就绪探针来保证流量的可用, 包括后续的ipvs模式也是如此



# 可以不用readiness?

    当然是可以的, 如果我们不依赖于service来做服务发现就可以不用就绪探针, 例如, 微服务体系里面的注册中心, spring boot的Eureka, consul, etcd等等, 不过一样需要在应用中去做好服务的注册和反注册。


扫码关注我

天府云计算架构茶话会