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