如何配置Replica Set重启限制以应对应用启动失败场景
实现需求的配置方案与说明
直接给你修改后的完整Deployment配置,对应的关键点我会逐一说明:
apiVersion: apps/v1 kind: Deployment metadata: name: apideployment namespace: dilshod spec: # 保留历史版本,方便回滚,至少留1个旧版本 revisionHistoryLimit: 5 # 设置更新超时时间,10分钟内没完成更新就标记失败 progressDeadlineSeconds: 600 # 滚动更新策略,确保旧版本Pod始终可用,只分批启动新版本 strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 0 selector: matchLabels: app: api_deploymentpod template: metadata: labels: app: api_deploymentpod spec: containers: - image: komdil/app:1.0.19 imagePullPolicy: Always name: appcontainer ports: - containerPort: 80 # 启动探针:专门检测应用启动阶段的健康状态 startupProbe: httpGet: path: /health port: 80 # 启动后每5秒检查一次 periodSeconds: 5 # 最多重试3次,失败后停止重启容器 failureThreshold: 3 # 每次检查超时时间 timeoutSeconds: 3 # 存活探针:检测运行中应用的状态,崩溃后触发重启 livenessProbe: httpGet: path: /health port: 80 periodSeconds: 10 failureThreshold: 1 timeoutSeconds: 3 # 就绪探针:确保只有健康的Pod才会被流量访问 readinessProbe: httpGet: path: /health port: 80 periodSeconds: 5 failureThreshold: 2 timeoutSeconds: 3 # 容器重启策略保持Always,运行时崩溃会一直重启 restartPolicy: Always
关键配置的作用说明
- 启动探针(startupProbe):
只在应用启动阶段生效,这里设置failureThreshold: 3,如果/health端点连续3次返回非200状态,kubelet就会停止重启这个容器,正好满足你“启动失败最多重启3次”的需求。启动阶段结束后,存活探针会接管健康检查。 - 存活探针(livenessProbe):
应用启动成功后,每隔10秒检查一次/health状态,只要返回非OK,kubelet就会按照restartPolicy: Always的配置立刻重启容器,实现“运行时崩溃始终重启”的要求。 - 滚动更新策略:
maxUnavailable: 0确保更新过程中旧版本的Pod不会被销毁,maxSurge: 1限制每次只启动一个新版本Pod。如果新版本Pod启动失败(启动探针触发3次失败),Deployment会在progressDeadlineSeconds(这里设了10分钟)后标记更新失败,不会继续替换旧Pod,自动保留原有可用版本。 - 版本历史(revisionHistoryLimit):
保留5个历史版本,万一更新出问题,你也可以手动执行kubectl rollout undo deployment/apideployment -n dilshod快速回滚到旧版本。
内容的提问来源于stack exchange,提问作者Dilshod K
相关产品推荐
相关产品推荐

