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

Kubernetes/Openshift如何保留新旧Deployment且脚本创建POD不删除旧实例

问题根因

Deployment 原生设计为维护固定副本数的长期运行服务,默认滚动更新逻辑会将旧版本 ReplicaSet 的副本数缩容至 0,仅保留最新版本的对应副本数 Pod,因此默认配置下无法实现所有历史 Pod 同时留存。你的场景更适合使用 Job 资源实现。


最优方案:使用 Job 资源实现需求

Job 是 Kubernetes/Openshift 原生用于执行一次性任务的资源,完全匹配你的需求:

  • 每次执行生成独立 Job 及对应 Pod,不会自动删除历史实例
  • 任务执行完成后 Pod 自动标记为 Completed 状态,可配置自动销毁规则

Job 模板示例

# job-template.yaml
apiVersion: batch/v1
kind: Job
metadata:
  name: abc-{{EXEC_NUM}}
spec:
  backoffLimit: 0 # 任务失败不重试,可按需调整
  template:
    spec:
      containers:
      - name: task-container
        image: 你的业务镜像地址 # 替换为实际镜像
        command: ["你的任务执行命令"] # 替换为Pod内要运行的Job命令
      restartPolicy: Never # 任务完成后不重启Pod
  # 按需开启自动销毁:任务完成后3600秒(1小时)自动删除Job及对应Pod,不需要则注释
  ttlSecondsAfterFinished: 3600

自动递增序号的执行脚本示例

#!/bin/bash
# 获取当前最大的Job序号,没有则从1开始
MAX_NUM=$(oc get job -o name | grep -E 'abc-[0-9]+' | awk -F '-' '{print $NF}' | sort -n | tail -n 1 2>/dev/null || echo 0)
NEW_NUM=$((MAX_NUM + 1))
# 替换模板变量并创建Job
sed "s/{{EXEC_NUM}}/${NEW_NUM}/g" job-template.yaml | oc apply -f -

每次执行该脚本会自动生成abc-1到abc-5的独立Job及对应Pod,所有实例会同时留存,不会被自动删除。


备选方案:必须使用Deployment的场景

如果业务有强约束必须使用Deployment实现,需要每次部署生成唯一的Deployment名称,不要复用同一个Deployment配置,示例脚本如下:

#!/bin/bash
MAX_NUM=$(oc get deploy -o name | grep -E 'abc-[0-9]+' | awk -F '-' '{print $NF}' | sort -n | tail -n 1 2>/dev/null || echo 0)
NEW_NUM=$((MAX_NUM + 1))
# 生成并创建独立Deployment
cat <<EOF | oc apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
  name: abc-${NEW_NUM}
spec:
  replicas: 1
  selector:
    matchLabels:
      app: abc-${NEW_NUM}
  template:
    metadata:
      labels:
        app: abc-${NEW_NUM}
    spec:
      containers:
      - name: business-container
        image: 你的业务镜像地址
        command: ["sh", "-c", "你的任务执行命令 && exit 0"]
EOF

注意该方案下如果Pod内进程执行完成退出,Deployment会自动重启Pod,若要实现执行完成销毁需要配合Pod生命周期钩子或自定义探针实现,优先级低于Job方案。


内容的提问来源于stack exchange,提问作者tvoski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:48:04