如何通过Jenkins自动化删除OpenShift全项目下符合条件的Pod
OpenShift全项目自动清理已完成Pod的Jenkins落地方案
原有命令问题说明
你之前使用的命令存在两个问题,无法满足全项目清理需求:
- 缺少
-A/--all-namespaces参数,默认仅会操作当前kubeconfig上下文绑定的单个项目,无法跨项目生效 - 命令末尾多了冗余的单引号,直接执行会触发语法报错
前置准备
- 确保Jenkins运行节点与OpenShift集群网络连通,节点上已安装
kubectl或OpenShift原生oc客户端,二者语法完全兼容 - 给Jenkins任务使用的集群账号绑定集群范围的Pod查询、删除权限,仅配置单项目权限会触发403报错,无法实现跨项目操作
- 优先选择Pipeline类型任务实现自动化,相比自由风格项目更易维护,执行日志、配置追溯更方便,新手不推荐用自由风格项目搭建
修正后的可用清理命令
基础全量清理命令如下:
kubectl delete pod -A --field-selector=status.phase==Succeeded
生产环境建议使用带命名空间过滤的安全版本,跳过系统项目避免误删核心组件:
for ns in $(kubectl get ns -o name | grep -v -E 'kube-|openshift-|default' | cut -d/ -f2); do echo "开始清理命名空间 $ns 下的已完成Pod" kubectl delete pod -n $ns --field-selector=status.phase==Succeeded done
注意:正式执行前可以先把delete替换成get,先预览待删除的Pod列表,确认范围无误后再执行删除操作,避免误删业务资源
Jenkins Pipeline配置步骤
- 新建Jenkins任务,类型选择「流水线(Pipeline)」
- 如需定期自动执行清理,在任务的「构建触发器」中勾选
Build periodically,填写对应cron表达式即可,比如要每天凌晨2点执行就填0 2 * * * - 在流水线脚本编辑区粘贴以下示例脚本,根据自身环境调整配置:
pipeline { agent any environment { // 把你的OpenShift集群kubeconfig凭证上传到Jenkins凭证库,替换下面的凭证ID KUBECONFIG = credentials('openshift-cluster-kubeconfig-id') } stages { stage('全项目已完成Pod清理') { steps { script { // 生产环境推荐用下面注释里的安全过滤版本,测试环境可直接用基础清理命令 sh 'kubectl delete pod -A --field-selector=status.phase==Succeeded' // 安全版本命令,取消注释即可使用 // sh ''' // for ns in $(kubectl get ns -o name | grep -v -E 'kube-|openshift-|default' | cut -d/ -f2); do // echo "Cleaning Succeeded pods in namespace: $ns" // kubectl delete pod -n $ns --field-selector=status.phase==Succeeded // done // ''' } } } } post { success { echo "清理任务执行完成" } failure { echo "清理任务执行失败,请检查集群连通性、账号权限配置" } } }
- 保存配置后点击「立即构建」,验证执行效果即可
优化建议
- 如果是OpenShift 4.8以上版本,可以直接给业务Job配置
ttlSecondsAfterFinished参数,Job执行完成超过设定时长后会自动清理关联的已完成Pod,从根源减少残留资源,不用完全依赖定期清理任务 - 不要给清理账号绑定超范围的权限,遵循最小权限原则,仅授予Pod的list、delete权限即可
内容的提问来源于stack exchange,提问作者user19300593
相关产品推荐
相关产品推荐

