Kubernetes Pod钩子

1、Pod容器钩子最终目的
之前在生产环境中使用dubbo框架,由于服务更新的过程中,容器直接被停止了,部分请求仍会被分发到终止的容器,导致有用户会访问服务出现500错误,这部分错误请求数据占用的比较少,因为Pod是滚动一对一更新。由于这个问题出现了,考虑使用优雅的终止方式,将错误请求将至到最低,直至滚动更新完全不会影响到用户。

简单分析一下 优雅的停止Pod

微服务中,网关会把流量分配给每个Pod节点,如:我们线上更新Pod的时候

1、如果我们直接把Pod给杀死,那这部分流量就无法得到正确的处理,会影响到部分用户访问,一般来说网关或者注册中心会将我们的服务保持一个心跳,过了心跳超时后就会自动摘除我们的服务,但是有一个问题就是超时时间可能是10s、30s、甚至是60s,虽然不会大规模的影响我们业务系统,但是一定会对用户产生轻微的抖动。

2、如果我们在停止服务前执行一条命令,通知网关或注册中心这台Pod,即服务进行下线,那么注册中心就会标记这个Pod/服务已经下线,不进行流量转发,用户也就不会有任何的影响,这就是优雅停止,将滚动更新的影响最小化。

2、何为Pod容器钩子
Kubernetes最小调度单位为Pod,它为Pod中的容器提供了生命周期钩子,钩子能够使得容器感知其生命周期内的所有事件,并且当相应的生命周期的钩子被调用时运行执行的代码,而Pod 钩子是由Kubelet发起的。

容器钩子两类触发点:

PostStart:容器创建后
PreStop:容器终止前
PostStart

这个钩子在容器创建后立即执行。

但是,

你可能感兴趣的:(k8s,kubernetes)