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

Dan*_*zot 5 kubernetes devops kubernetes-cronjob

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

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

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

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

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

Vas*_*pov 3

您可以通过以下 bash 脚本使用 DaemonSet:

  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
Run Code Online (Sandbox Code Playgroud)

  • 实际上,k8s GitHub 上有一些关于该问题的问题(例如 https://github.com/kubernetes/kubernetes/issues/36601),并且没有原生支持。目前,您的解决方案是最合理的方法,因此我将其标记为已接受。 (2认同)
  • 第 3 行 || 应该是 &amp;&amp; 否则 do_something 总是被调用 (2认同)