【问题标题】:Is this possible to schedule CronJob to execute on each of Kubernetes nodes?这是否可以安排 CronJob 在每个 Kubernetes 节点上执行?
【发布时间】:2019-09-17 23:03:40
【问题描述】:

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

如果CronJob 能够模板化DaemonSet(而不是将其固定为jobTemplate)并且可以将DaemonSet 重启策略设置为OnFailure,那将是完美的。

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

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

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

【问题讨论】:

    标签: kubernetes devops kubernetes-cronjob


    【解决方案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
    

    【讨论】:

    • 这是我能想象到的最骇人听闻的方式 ;) 无论如何,它会起作用的。你觉得没有其他更多的 Kubernetes 原生解决方案了吗?
    • 其实k8s GitHub上有一些问题(例如github.com/kubernetes/kubernetes/issues/36601)关于这个问题并且没有原生支持。目前,您的解决方案是最合理的方法,因此我将其标记为已接受。
    • 第 3 行 ||应该是 && 否则总是调用 do_something
    【解决方案2】:

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

    我并不反对,但我需要一直运行这些 pod,这太可惜了。让 k8s 调度程序为我处理这一切会很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-30
      • 2021-02-04
      • 2019-08-18
      • 2016-10-11
      • 2021-09-18
      • 2018-03-16
      • 1970-01-01
      • 2023-02-06
      相关资源
      最近更新 更多