是否可以安排CronJob在每个Kubernetes节点上执行?

时间:2019-04-29 10:22:59

标签: kubernetes devops kubernetes-cronjob

我想做的是定期在每个Kubernetes节点上运行一些备份脚本。与只向每个节点的crontab添加脚本相反,我希望它在Kubernetes集群中运行。这是因为我会将备份存储在Kubernetes挂载到该节点的卷上。它与配置不同,但是可能是由Flex插件或awsElasticBlockStore挂载的CIFS文件系统。

如果CronJob能够模板化DaemonSet(而不是将其固定为jobTemplate)并且可以将DaemonSet重新启动策略设置为OnFailure

我想避免为每个n节点定义CronJobs个不同的n,然后通过定义nodeSelectors将它们关联在一起,因为这样维护起来不太方便在节点计数动态变化的环境中。

这里讨论了我能看到的问题,但没有明确的结论:https://github.com/kubernetes/kubernetes/issues/36601

也许您有任何技巧或技巧来实现这一目标?

2 个答案:

答案 0 :(得分:1)

您可以将DaemonSet与以下bash脚本一起使用:

  while :; do
   currenttime=$(date +%H:%M)
   if [[ "$currenttime" > "23:00" ]] || [[ "$currenttime" < "23:05" ]]; then
     do_something
   else
     sleep 60
   fi
   test "$?" -gt 0 && notify_failed_job
  done

答案 1 :(得分:1)

这仍然是使用CronJob模板模仿DaemonSet的最佳方法。即。在所有节点上运行crontab(基于节点选择器)

我不反对,但是对此我感到很沮丧,我需要一直运行这些吊舱。最好让k8s调度程序为我处理所有这一切。