Openshift中异步等待容器正常运行的可用检查方案有哪些?
OpenShift/Kubernetes 原生容器启动校验方案
以下所有方案均不需要阻塞Pod的并行创建,可以在推进其他部署任务的同时异步完成校验:
1. 启动探针(Startup Probe)
这是最贴合需求的原生特性,K8s 1.16+及OpenShift 4.x全版本稳定支持:
- 专门用于检测容器启动流程是否完成,检测逻辑完全独立于就绪探针,不会阻塞其他Pod的并行调度与创建
- 可根据业务实际启动耗时自定义超时阈值,总允许启动时长为
failureThreshold * periodSeconds,超时后才会判定启动失败并触发容器重启 - 配置示例:
# 容器组配置下的探针定义 startupProbe: httpGet: path: /startup-check port: 8080 failureThreshold: 30 # 最多允许检测失败30次 periodSeconds: 10 # 每10秒检测一次,总最长等待启动时间300秒
探针检测成功后,容器的started状态会被自动标记为true,代表启动完成。
2. 直接查询容器状态字段
如果你是通过脚本/CI/CD流程管理部署,可直接通过K8s API或oc/kubectl命令异步查询容器启动状态,不需要阻塞部署流程:
- 容器的启动完成状态直接对应Pod对象的
status.containerStatuses[*].started字段,字段值为true即代表启动完成,和Pod就绪状态完全独立 - 批量查询指定标签的所有Pod容器启动状态的命令:
oc get pods -l app=your-target-app -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.containerStatuses[*].started}{"\n"}{end}'
你可以在并行执行其他部署任务的同时,后台轮询该命令的返回结果即可完成校验。
3. OpenShift 部署配置优化
如果使用OpenShift原生的DeploymentConfig资源,可通过配置调整完全实现Pod并行创建+异步校验:
- 调整部署策略的
maxSurge参数为你需要的并行创建数量,部署流程会一次性创建指定数量的Pod,无需等待前序Pod就绪即可继续创建 - 执行部署命令时添加
--asynchronous=true参数,命令会直接返回,不需要等待部署完成,你可以后续单独执行校验逻辑。
注意事项
不要使用就绪探针(Readiness Probe)做启动校验,就绪探针的作用是标记容器是否可对外提供服务,会影响服务路由、Endpoint挂载,和容器启动完成是两个独立的状态。如果需要同时校验启动完成和业务可用,可同时配置启动探针和就绪探针,启动探针检测成功后才会触发就绪探针的检测,两者互不干扰。
内容的提问来源于stack exchange,提问作者solarflare
相关产品推荐
相关产品推荐

