You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Kubernetes Deployment实现先创建全部新Pod再删除旧Pod?

如何配置Kubernetes Deployment实现先启动所有新Pod再删除旧Pod?

完全可以通过调整Deployment的滚动更新策略参数来实现这个需求,正好解决你遇到的TCP连接分布不均的问题。

核心配置思路

修改Deployment的strategy.rollingUpdate下的两个关键参数:

  • maxSurge:设置为100%(或等于当前副本数的固定值),允许更新时创建与当前副本数相等的新Pod
  • maxUnavailable:设置为0,确保更新期间旧Pod不会被提前删除,必须等所有新Pod就绪后才会开始清理旧Pod

完整YAML示例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: your-tcp-deployment
spec:
  replicas: 2  # 你的初始副本数
  strategy:
    rollingUpdate:
      maxSurge: 100%
      maxUnavailable: 0
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: your-tcp-service
    spec:
      containers:
      - name: tcp-container
        image: your-tcp-image:latest
        # 你的容器配置(端口、就绪探针等)
        ports:
        - containerPort: 1234
        readinessProbe:
          tcpSocket:
            port: 1234
          initialDelaySeconds: 5
          periodSeconds: 10

参数说明

  • maxSurge: 100%:以你当前2个副本为例,更新时会先启动2个新Pod,此时集群中临时有4个Pod运行
  • maxUnavailable: 0:Kubernetes会等待所有新Pod通过就绪探针、进入Ready状态后,才会逐步删除旧的2个Pod
  • 就绪探针很关键:必须确保新Pod真正具备处理TCP连接的能力后,才会被加入Service的负载均衡池,这样客户端重连时会被均匀分发到所有可用Pod

额外注意事项

  • 确认集群有足够的资源(CPU、内存)容纳双倍的Pod实例
  • 如果副本数较多,maxSurge也可以设为固定数值(比如maxSurge: 3),避免瞬间占用过多资源
  • 这种更新方式会短暂增加集群负载,但能完美解决你遇到的TCP连接集中问题

内容的提问来源于stack exchange,提问作者Stef Chäser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 08:04:54