如何配置Kubernetes Deployment确保任意时刻仅运行单个进程实例
配置方案
你可以通过调整Deployment的发布策略参数实现需求,共有两种可行的配置方式:
方案1:使用Recreate发布策略(更直观适配需求)
Recreate策略的逻辑为更新时先全量销毁所有运行中的旧实例,待旧实例完全终止后再创建新实例,和你期望的手动发布流程完全一致,从根本上避免双实例同时运行的情况。
配置示例如下:
apiVersion: apps/v1 kind: Deployment spec: # 新增以下策略配置 strategy: type: Recreate # 其余原有配置保持不变 replicas: 1 template: # 你的Pod模板配置
方案2:调整默认RollingUpdate策略的参数
如果你需要保留滚动更新的策略类型,可以调整滚动更新的阈值参数,同样能满足需求:
maxSurge设置为0:更新过程中不允许超出期望副本数创建额外实例maxUnavailable设置为1:更新过程中允许最多1个实例处于不可用状态
配置后更新时会先销毁旧实例,再创建新实例,不会出现双实例共存的情况,配置示例如下:
apiVersion: apps/v1 kind: Deployment spec: # 新增以下策略配置 strategy: type: RollingUpdate rollingUpdate: maxSurge: 0 maxUnavailable: 1 # 其余原有配置保持不变 replicas: 1 template: # 你的Pod模板配置
注意事项
- 两种方案都会产生短时间的服务不可用,不可用窗口为旧实例完全终止到新实例启动就绪的耗时,符合你宁愿短时间停服也不允许双实例运行的要求
- 建议合理配置
terminationGracePeriodSeconds参数,保证旧实例的业务进程有足够时间完成优雅退出,避免极端场景下旧进程未完全终止就启动新实例的问题 - 配置修改完成后直接更新你的deployment.yaml即可,后续自动执行
kubectl apply发布时会自动遵循配置的策略执行,不需要调整现有发布流程
内容的提问来源于stack exchange,提问作者SDE 888
相关产品推荐
相关产品推荐

