Cron 按年龄清理工作和豆荚?

Cron 按年龄清理工作和豆荚?,cron,openshift,Cron,Openshift,有没有办法按年龄oc删除作业或oc删除吊舱?我想根据cron作业工件的年代来清理它们。可能吗 编辑:我添加了一个python脚本,用于清理下面的作业。它起作用了。我假设它也会清理相关的豆荚,但事实并非如此。我意识到,即使我问了关于pod清理的问题,试图解决这个问题可能超出了一个可回答的问题的范围,所以当我重新思考这个问题时,我会问一个新问题。感谢那些回答并帮助我走上正确方向的人。库伯内特斯关于清理工作的文档是: 作业完成后,不会再创建POD,但也不会删除POD。由于它们被终止,它们不会出现

有没有办法按年龄
oc删除作业
oc删除吊舱
?我想根据cron作业工件的年代来清理它们。可能吗


编辑:我添加了一个python脚本,用于清理下面的作业。它起作用了。我假设它也会清理相关的豆荚,但事实并非如此。我意识到,即使我问了关于pod清理的问题,试图解决这个问题可能超出了一个可回答的问题的范围,所以当我重新思考这个问题时,我会问一个新问题。感谢那些回答并帮助我走上正确方向的人。

库伯内特斯关于清理工作的文档是:

作业完成后,不会再创建POD,但也不会删除POD。由于它们被终止,它们不会出现kubectl get pods,但它们会出现kubectl get pods-a。保留它们允许您仍然查看已完成POD的日志,以检查错误、警告或其他诊断输出。作业对象也会在完成后保留,以便您可以查看其状态。用户可以在记录旧作业的状态后删除它们

因此,您需要使用
ocdelete
自己清理它们

执行此操作的唯一方法似乎是使用以下脚本(未测试):

for job in $( oc get jobs -o name ); do
   if [[ "$( oc get "${job}" -o jsonpath="{.status.conditions[0]['status','type']}" ) != "Complete True" ]]; then
       continue
   fi

   completionTime="$( oc get "${job}" -o jsonpath='{.status.completionTime}' )"
   if [[ "$( date -d "${completionTime}" +%s)" -lt  "$( date -d "${cutoff}" +%s )" ]]; then
       oc delete "${job}"
   fi
done

可以通过
GRACE\u PERIOD\u SECONDS
变量,根据已退出的容器的使用年限来删除这些容器。但它将删除所有已退出的容器,不仅仅是cron容器,而且您可以使用
EXCLUDE\u FROM\u GC
变量使其工作。

很抱歉,在这里花了这么长时间。 由于我没有管理员权限,而且我已经在openshift上使用了由cronjobs触发的python应用程序,所以我认为最好的方法是使用。这让我写了这个脚本,清理已经完成并且超过24小时的作业

from os import environ
import requests
from datetime import datetime, timedelta
设置身份验证令牌 找到目前的工作 循环,确定要删除的作业 删除集合中的作业
这样可以很好地清理工作

您使用的是什么OpenShift安装?对于一个完整的安装,定期作业应该在集群级别运行,当某些东西超过某个时间时,该作业会循环并清理它们。如果在Minishift或oc cluster up上运行,我不确定此作业是否运行。它使用的命令是
ocadmprune
,尽管我没有看到任何关于作业中停止的pod的信息。我将尝试找出停止的pod用于作业时会发生什么情况。@GrahamDumpleton我使用的是v3.5.5.31,但我没有管理员权限,因此我必须找到不同的方法来处理它。我将看看你的方法,但我也提出了我自己的方法,我将在测试后与大家分享。我在读这篇文章[,它基本上说的是手动清理cron作业工件的事情。这不是他正在使用的普通老Docker服务,而是OpenShift/Kubernetes。像
Docker gc
这样的工具不会做需要做的事情。
apihost = 'https://openshift.redhat.com:8443{endpoint}'

jobsurl = apihost.format(
endpoint = '/apis/batch/v1/namespaces/%s/jobs' % environ['NAMESPACE']
)

headers = {
'Authorization': 'Bearer %s' % environ['AUTH_TOKEN']
}
req_jobs = requests.get(jobsurl, headers=headers, verify=False)
jobstodelete = []

for item in req_jobs.json()['items']:
    if 'completionTime' in item['status']:
        elapsed_time = datetime.now() - datetime.strptime(item['status']['completionTime'], '%Y-%m-%dT%H:%M:%SZ')
        if elapsed_time > timedelta(hours=24):
            jobstodelete.append(item['metadata']['selfLink'])
for job in jobstodelete:
    delurl = apihost.format(
        endpoint = job
    )

req_del = requests.delete(delurl, headers=headers, verify=False)