K8s相关岗必问。探针是生产事故高发区——面试官用这题探真实经验。
状态:Pending(已调度、拉镜像中)、Running(容器都启动)、Succeeded(都退出0)、Failed(有非零退出)、Unknown。
init容器在应用容器前依次跑完。适合迁移、拉配置、初始化。
liveness:进程还活着吗?失败kill容器。只用于死锁检测。过激=crash loop。
readiness:进程能对外服务吗?失败从Service endpoints摘掉(不kill)。用于warmup、降级、依赖失联。
startup:给慢启动应用用。通过前liveness被禁;通过后交给liveness。
Pod走Pending(待调度+拉镜像)→Running(容器起来)→Succeeded或Failed。init容器先跑完——适合迁移和拉配置。两种探针解决不同问题都重要。liveness回答"进程卡了吗"——失败K8s kill容器。只给真死锁用;激进的liveness就是crash loop production的方式。readiness回答"该给这个pod发流量吗"——失败把pod从Service endpoint集合摘掉但不kill。这是warmup、依赖故障、临时降级时要的。启动慢的应用(JVM、ML模型)加startup probe,否则liveness在应用起来前就开火。优雅退出:SIGTERM→preStop hook→排流量→退出。应用比负载均衡器察觉得还快就丢请求——preStop sleep是常见修法。
readiness该查依赖(DB、缓存)。liveness不该——上游闪一下会把健康pod也干掉。
terminationGracePeriodSeconds+preStop sleep能覆盖大部分"滚动发版丢请求"问题。
即答侠每种探针配了失败模式——面试官爱听"这我被坑过"。
应用不死锁就能省。很多团队只跑readiness——比激进的liveness更安全。
startup probe是现代答案——通过了liveness才跑。initialDelaySeconds要猜启动时间。