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

OKD 4.x:如何复刻OCP/OKD 3.11的*-deploy Pod自动删除功能

OKD 4.x 自动清理Completed状态Deploy辅助Pod方案

问题背景

在OKD 4.x中,通过DeploymentConfig或其超集Template部署应用时,业务Pod(<POD>)进入Running状态后,名为<POD>-deploy的辅助部署Pod会以Completed状态永久留存。但在OCP 3.11/OKD 3.11中,这类Pod会被自动删除。需要复刻该行为的原因:

  • 这类Pod与业务Pod名称高度相似,使用oc(即kubectl)查看Pod列表时需手动过滤,影响操作效率
  • 会占用节点250个Pod的配额限制,甚至可能持续占用IP地址池资源(疑似Bug)
  • 大量留存会拖慢etcd元数据处理,降低集群整体性能

OCP 3.11中的自动清理示例:

NAME                                      READY     STATUS        RESTARTS   AGE
ml-admin-vsc-node2-1-mtjz5   1/1       Running       0         7s
ml-admin-vsc-node2-1-tdr4g   0/1       Terminating   1         8d
ml-admin-vsc-node2-1-deploy   0/1       Completed     0         13s
ml-admin-vsc-node2-1-deploy   0/1       Terminating   0         13s

解决方案

方法1:针对单个DeploymentConfig配置

通过修改DeploymentConfig的revisionHistoryLimit参数为0,可让控制器在部署完成后自动删除Completed状态的deploy Pod。

修改现有DeploymentConfig:

oc patch dc <你的DC名称> -p '{"spec":{"revisionHistoryLimit":0}}'

创建新DeploymentConfig时,直接在YAML中添加配置:

spec:
  revisionHistoryLimit: 0
  # 其余DeploymentConfig配置...

方法2:全局集群级配置

若需要所有新创建的DeploymentConfig都自动清理deploy Pod,可修改集群全局配置:

oc patch deployments.config.openshift.io/cluster -p '{"spec":{"revisionHistoryLimit":0}}'

注:该配置仅对修改后新建的DeploymentConfig生效,已存在的需单独调整。

方法3:定时Job兜底清理

如果上述配置不生效,可创建定时CronJob定期清理所有Completed状态的deploy Pod。

  1. 创建清理Job的YAML文件(cleanup-deploy-pods.yaml):
apiVersion: batch/v1
kind: CronJob
metadata:
  name: cleanup-deploy-pods
spec:
  schedule: "*/5 * * * *" # 每5分钟执行一次,可按需调整
  jobTemplate:
    spec:
      template:
        spec:
          serviceAccountName: cleanup-deploy-sa
          containers:
          - name: kubectl
            image: image-registry.openshift-image-registry.svc:5000/openshift/cli:latest
            command:
            - /bin/sh
            - -c
            - "oc delete pods --field-selector=status.phase=Completed -l openshift.io/deployer-pod=true"
          restartPolicy: OnFailure
  1. 创建对应的ServiceAccount与权限(sa-rbac.yaml):
apiVersion: v1
kind: ServiceAccount
metadata:
  name: cleanup-deploy-sa
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cleanup-deploy-pods-role
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["delete", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: cleanup-deploy-pods-binding
subjects:
- kind: ServiceAccount
  name: cleanup-deploy-sa
  namespace: <你的命名空间> # 替换为实际命名空间
roleRef:
  kind: ClusterRole
  name: cleanup-deploy-pods-role
  apiGroup: rbac.authorization.k8s.io
  1. 执行创建命令:
oc apply -f cleanup-deploy-pods.yaml
oc apply -f sa-rbac.yaml

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 09:53:19