目录

1. Kubernetes 对集群Pod和容器健康状态如何进行监控和检测的。

2. 解释LivenessProbes探针的作用及其适用场景。

3. 解释ReadinessProbe探针的作用及其适用场景。

4. 解释StartupProbe探针的作用及其适用场景。

5. 说明K8s中Pod级别的Graceful Shutdown。


1. Kubernetes 对集群Pod和容器健康状态如何进行监控和检测的。

Kubernetes 通过 kubelet 节点代理组件提供的 探针(Probe) 机制,对容器的健康状态进行持续监控和检测。kubelet 会定期在容器中执行三类诊断操作——存活探针(LivenessProbe)就绪探针(ReadinessProbe) 和启动探针(StartupProbe),并根据探测结果采取相应行动,例如重启不健康的容器或将 Pod 移出服务负载均衡。每种探测结果有三种可能:成功(Success)、失败(Failure) 或 未知(Unknown),kubelet 会根据结果和配置的阈值决定后续操作。

2. 解释LivenessProbes探针的作用及其适用场景。

LivenessProbe(存活探针) 用于判断容器是否处于存活状态,即决定是否需要重启容器。当容器应用出现死锁、内存泄漏导致无法响应、或内部逻辑陷入无限循环等“进程还在但业务已不可用”的情况时,LivenessProbe 能够检测到这一异常,并触发容器重启以恢复服务。

适用场景:

检测死锁或逻辑错误:例如 Java 程序发生内存泄漏导致 GC 持续停顿,JVM 进程仍在运行但无法处理请求,LivenessProbe 可感知并重启容器。

检测进程异常:对于不会自动崩溃的长期运行服务,通过存活探针主动检查其内部状态,防止“僵尸进程”持续提供服务。

配合 StartupProbe:对于启动较慢的应用,用 StartupProbe 保护 LivenessProbe,避免启动期间被误判为失败而重启。

3. 解释ReadinessProbe探针的作用及其适用场景。

ReadinessProbe(就绪探针) 用于判断容器是否准备好接收流量决定是否将 Pod 加入 Service 的后端端点列表只有当一个Pod内的所有容器都准备好了,才能把这个Pod看作就绪如果就绪探针失败,kubelet 会将该 Pod 的 IP 地址从所有匹配的 Service 的 EndpointSlice 中移除,确保不会有请求被路由到未就绪的 Pod。

适用场景:

应用启动初始化:容器进程已启动但尚未完成加载配置、预热缓存或建立数据库连接等初始化任务时,不应接收流量。

依赖服务不可用:当前 Pod 依赖的后端服务(如数据库、Redis、消息队列)出现故障时,可以将就绪探针设为失败,主动从负载均衡中摘除,避免返回错误响应。

临时过载或维护:当 Pod 自身负载过高,可暂时标记为未就绪,让流量转向其他副本,保护自身稳定性。

优雅下线配合 preStop:在 Pod 被删除前,先让就绪探针失败,将 Pod 从流量转发中摘除,再执行关闭逻辑,实现零停机。

4. 解释StartupProbe探针的作用及其适用场景。

StartupProbe(启动探针) 用于判断容器内的应用程序是否已经成功启动。它的特殊之处在于:只要 StartupProbe 未成功,LivenessProbe 和 ReadinessProbe 都不会执行,从而为启动缓慢的应用提供了一个“保护窗口”。

适用场景:

启动时间超长的应用:例如 Java Spring Boot 应用从进程启动到 Tomcat 完全就绪可能需要 45 秒以上,若仅靠 LivenessProbe 的 initialDelaySeconds 无法覆盖,可以配置 StartupProbe 给予充足启动时间。

避免启动阶段误杀:对于需要加载大量数据、执行迁移脚本或预热缓存的容器,如果不使用 StartupProbe,LivenessProbe 可能在应用尚未准备好时连续失败,导致容器被反复重启。

为不同阶段设置独立参数:StartupProbe 可以使用较高的 failureThreshold(如 30 次 × 10 秒 = 300 秒)来等待启动完成,而 LivenessProbe 保持较小的阈值(如 3 次 × 5 秒 = 15 秒),从而同时兼顾启动保护与运行时快速响应。

5. 说明K8s中Pod级别的Graceful Shutdown。

优雅关闭(Graceful Shutdown) 是 K8s 在删除 Pod 时,给予容器处理完现有请求并释放资源缓冲机制,而不是强制终止,目的是避免请求中断或数据不一致

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐