按年龄清理工作和豆荚?

时间:2017-07-26 14:25:32

标签: cron openshift

根据年龄,oc delete jobsoc delete pods有办法吗?我想根据他们的年龄来清理cron job artifacts。这可能吗?

编辑:我添加了一个python脚本来清理下面的工作。有用。我假设它也会清理相关的pod,但事实并非如此。我意识到即使我询问了pod清理,尝试解决这个问题可能超出了单个问题的范围,所以当我回过头来解决这个问题时,我会问一个新问题。感谢那些回答并帮助我朝着正确方向前进的人。

3 个答案:

答案 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)

这可以很好地清理工作。