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



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

如果CronJob能够模板DaemonSet(而不是将其修复为jobTemplate),并且有可能将DaemonSet重新启动策略设置为OnFailure,那就完美了。

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

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

也许你有什么技巧或技巧来实现这一目标吗?

您可以将 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

我知道我参加派对迟到了,

第一个选项:

使用并行性运行多个作业 POD,并使用拓扑扩展约束在所有节点上分发/调度 POD。

apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: mycronjob
labels:
jobgroup: parallel
spec:
schedule: "*/5 * * * *"
successfulJobsHistoryLimit: 0
failedJobsHistoryLimit: 0
jobTemplate:
spec:
template:
metadata:
name: kubejob
labels:
jobgroup: parallel
spec:
topologySpreadConstraints:
- maxSkew: 2
topologyKey: kubernetes.io/hostname
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
jobgroup: parallel
containers:
- name: mycron-container
image: alpine
imagePullPolicy: IfNotPresent
command: ['sh', '-c', 'echo Job Pod is Running ; sleep 10']
restartPolicy: OnFailure
terminationGracePeriodSeconds: 0
parallelism: 5
concurrencyPolicy: Allow

选项二:

使用cronjob,您可以应用守护程序集的 YAML 模板,并在一定持续时间后将其删除,这将理想地在所有节点上作为作业工作。此外,如果自定义 docker 镜像在 deamon 集中运行,它也可以在执行完成后完成。

额外

您可以使用CRD选项查看我的文章,它将像守护程序一样工作:https://medium.com/google-cloud/daemon-job-crd-in-k8s-with-compositecontroller-f263b7f25cb9

在每个可用节点上计划作业

阅读更多关于CRD的信息:https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/

您可以编写自己的自定义资源并将其添加到kuberetes

相关内容

  • 没有找到相关文章

最新更新