根据年龄,oc delete jobs
或oc delete pods
有办法吗?我想根据他们的年龄来清理cron job artifacts。这可能吗?
编辑:我添加了一个python脚本来清理下面的工作。有用。我假设它也会清理相关的pod,但事实并非如此。我意识到即使我询问了pod清理,尝试解决这个问题可能超出了单个问题的范围,所以当我回过头来解决这个问题时,我会问一个新问题。感谢那些回答并帮助我朝着正确方向前进的人。
答案 0 :(得分:0)
Kubernetes关于清理工作的文件是:
作业完成后,不再创建Pod,但也不会删除Pod。由于它们被终止,它们不会显示kubectl get pods,但是它们将显示kubectl get pods -a。保持它们可以让您仍然查看已完成的pod的日志,以检查错误,警告或其他诊断输出。作业对象在完成后也会保留,以便您可以查看其状态。在注意到其状态后,用户可以删除旧作业。
因此您需要使用oc delete
来自行清理它们。
唯一的方法是使用脚本(未经测试),例如:
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
答案 1 :(得分:0)
docker-gc可以通过GRACE_PERIOD_SECONDS
变量删除已退出的容器的大小。它将删除所有已退出的容器,而不仅仅是cron,但您可以使用EXCLUDE_FROM_GC
变量使其工作。
答案 2 :(得分:0)
对不起,花了这么长时间来到这里。 由于我没有管理员权限,而且我已经在openhift上有cronjobs触发的python应用程序,我认为最好的方法是使用REST API。这导致我编写这个脚本来清理已完成且超过24小时的作业。
from os import environ
import requests
from datetime import datetime, timedelta
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)
这可以很好地清理工作。