视频内容概览
本视频为Kubernetes v1.29 教程第18节,属于第四章「K8s资源清单」内容,重点讲解Pod生命周期中的探针(Probe)机制,涵盖探针基础概念、类型、分类、就绪探测的详细原理与实验演示。
1. 探针(Probe)基础概念
- 定义:探针是由Kubelet(当前Pod所在节点的Kubelet,非其他节点)对容器执行的定期诊断机制,用于判断容器的运行状态
- 执行前提:Kubelet需调用容器实现的Handler(处理逻辑)完成诊断
- 三种Handler类型:
- ExecAction:在容器内部执行指定命令,返回码为0则诊断成功,非0则失败
- TCPSocketAction:对容器指定端口发起TCP访问,连接成功则成功,连接拒绝/失败则诊断失败
- HTTPGetAction:发起HTTP GET请求,返回码在200~400之间则成功,其余情况失败
- 三种探测结果状态:
- Success:诊断成功
- Failure:诊断失败
- Unknown:特殊状态,例如Kubelet执行诊断时自身崩溃、未拿到返回码,此时视为诊断失败但不会采取任何补救动作,用于保障程序鲁棒性
2. 探针的三大分类
按执行时机分为三类,执行优先级:启动探测 > 存活探测 > 就绪探测
- 启动探测(Startup Probe)
- 最先执行,仅当启动探测成功后,存活探测和就绪探测才会开始执行,用于解决容器启动时间过长导致的误判问题
- 存活探测(Liveness Probe)
- 用于判断容器是否“存活”:即使容器状态为Running,若内部服务已无法正常响应,则视为探测失败,Kubelet会杀死容器并重建,恢复服务可用性
- 就绪探测(Readiness Probe)
- 用于判断容器是否“准备好提供服务”:若探测不通过,Pod不会被加入Service的负载均衡池,不会给用户提供访问,核心解决扩容时新Pod未就绪就被接入流量导致访问错误的问题
3. 就绪探测(Readiness Probe)详解
3.1 核心作用与匹配规则
Service将Pod纳入后端、提供负载均衡需要同时满足两个条件:
- 标签匹配:Pod的标签是Service标签选择器的子集(全集也属于子集的一种特殊情况)
- 状态就绪:仅就绪状态的Pod会被纳入负载均衡池,未就绪的Pod不会被转发流量
3.2 常用配置参数
| 参数 | 默认值 | 说明 |
|---|---|---|
| initialDelaySeconds | 0 | 容器启动后延迟多久开始执行就绪探测,解决容器启动慢的问题 |
| periodSeconds | 10 | 探测间隔,两次探测之间的时间间隔,可按需调整 |
| timeoutSeconds | 1 | 单次探测超时时间,超时直接判定为失败;官方要求探测命令/脚本资源消耗足够小,避免影响业务,Kubelet与容器同节点通信,1秒默认值足够 |
| successThreshold | 1 | 成功阈值,连续探测成功1次即标记为就绪 |
| failureThreshold | 3 | 失败阈值,连续探测失败3次才标记为未就绪,避免偶发故障误判,可根据需求调整但不建议调过低 |
3.3 状态流转规则
- 若Pod未配置就绪探测,默认一直处于就绪状态
- 配置就绪探测后,仅探测通过才会标记Pod为就绪
- 仅Pod内所有容器都就绪时,整个Pod才会标记为就绪
- 三种探测结果的处理逻辑:
- Success:将容器标记为就绪
- Failure:静默,不修改原有未就绪状态
- Unknown:静默,不修改原有状态
4. 实验演示部分
通过实操验证就绪探测和Service匹配规则,操作步骤如下:
4.1 清理实验环境
- 删除所有Pod:
kubectl delete pod --all - 删除指定Service:
kubectl delete service <Service名称>,注意不建议删除kube-system命名空间下的核心Service,删除后会被自动恢复
4.2 创建实验资源
- 创建两个就绪的Pod:
- pod-1:标签为
app=myapp,使用指定镜像 - pod-2:标签为
app=map, version=v1,属于app=myapp的子集,默认就绪
- pod-1:标签为
- 创建Service:
- 名称为
myapp,类型为ClusterIP,端口为80,默认匹配标签app=myapp的Pod,自动实现负载均衡 - 验证:访问Service的ClusterIP,可轮询访问到pod-1和pod-2,证明负载均衡生效
- 名称为
4.3 验证标签匹配规则
创建第三个Pod(pod-3),标签为app=test,不属于app=myapp的子集,即使Pod处于就绪状态,也不会被Service纳入后端,访问Service时不会路由到pod-3
4.4 后续实验预告
将演示「标签匹配但未就绪」的场景(例如新扩容的Pod未启动完成),通过HTTP GET方式的就绪探测案例验证就绪探测的生效逻辑
AI 总结
就绪探测是Kubernetes实现业务零宕机扩容、流量灰度发布的核心机制,通过「标签子集匹配+就绪状态双重校验」的规则,确保只有完全准备好的Pod才会接入用户流量,从机制上避免服务访问错误,是K8s服务高可用架构的重要基础组件。