多容器Pod中单个容器因存活探针失败重启对Pod及其他容器的影响问询
多容器Pod中单个容器因存活探针失败重启对Pod及其他容器的影响问询
Hey,这个问题问到点子上了,刚好是Kubernetes里容器探针和Pod状态关联的常见疑惑点,我来给你拆解清楚:
一、对其他容器的直接影响
- 其他容器完全不会被牵连重启,会照常运行。Kubernetes的容器重启是精准针对单个容器的——只有触发存活探针失败的那个容器会被kubelet杀掉重启,其他容器只要自身状态稳定(探针正常、运行无异常),就会保持原有运行状态,不会被中断。
- 如果Pod用了共享存储(比如
emptyDir卷),重启的容器重启后依然能访问这些共享数据,其他容器对共享存储的访问也不会被打断。
二、Pod的状态变化
1. Pod的整体阶段
Pod的阶段依然会是Running,因为只要Pod里还有至少一个容器在正常运行(其他容器满足这个条件),Pod就不会切换到Failed或Error阶段。只有当所有容器都终止且至少一个容器是非正常退出时,Pod才会进入Error阶段,显然这里不满足这个条件。
2. Pod的Ready状态(直接影响流量)
这是最关键的部分,决定了Service会不会继续给这个Pod发流量:
- Pod的Ready状态是所有容器“就绪状态”的“与”结果——必须所有容器都就绪,Pod才会被标记为Ready:
- 配置了就绪探针的容器:只有探针检测通过时,才算就绪;
- 没配置就绪探针的容器(包括这个只有存活探针的容器):只要容器处于Running状态(不是Terminating、Waiting这类过渡状态),就算就绪。
- 当这个容器因为存活探针失败进入重启流程时,它会先被kubelet杀掉(进入Terminating状态),然后重新创建(进入Waiting→ContainerCreating状态),直到再次启动成功进入Running状态。在这个过渡期间,该容器的状态不是Running,所以它的“就绪状态”是False。
- 此时,整个Pod会被标记为Not Ready,Kubernetes会立刻把这个Pod从对应的Service端点列表中移除,不再给它发流量。直到重启的容器成功进入Running状态(此时它的就绪状态恢复为True,Pod的Ready状态也随之恢复),才会重新把Pod加回Service的流量池。
三、额外补充
如果你的Pod里还有其他配置了就绪探针的容器,只要这些容器的探针一直正常,它们自身的就绪状态不会受这个重启容器的影响,但因为Pod的Ready状态是“全票通过”机制,只要有一个容器未就绪,整个Pod就会被标记为Not Ready,流量依然会被切断。
备注:内容来源于stack exchange,提问作者P Gupta
相关产品推荐
相关产品推荐

