我想做的是定期在每个Kubernetes节点上运行一些备份脚本。我希望它在Kubernetes集群中运行,而不是仅仅将脚本添加到每个节点的crontab中。这是因为我将在Kubernetes挂载到节点的卷上存储备份。它与配置不同,但可以是由Flex插件或awsElasticBlockStore挂载的CIFS文件系统。
如果CronJob能够模板DaemonSet (而不是将其修改为jobTemplate),并且有可能将DaemonSet重新启动策略设置为OnFailure,那就太好了。
我希望避免为每个n节点定义不同的CronJobs,然后通过定义nodeSelectors将它们关联到一起,因为在节点动态计数变化的环境中维护起来不太方便。
我所看到的问题在这里讨论时没有任何明确的结论:https://github.com/kubernetes/kubernetes/issues/36601
也许你有什么技巧或技巧来达到这个目的?
发布于 2019-04-29 11:25:45
您可以在下面的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发布于 2022-05-18 09:18:04
我知道我派对迟到了,
第一选择:
使用topologySpreadConstraints运行多个作业荚,使用并行在所有节点上扩展/调度吊舱。
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模板、set并在一定时间后删除它,这在所有节点上都是理想的作业。另外,如果一个自定义的停靠映像在deamon集中运行,那么一旦执行完成,它也可以完成。
额外
我建议您也检查一下这个CRD:https://github.com/AmitKumarDas/metac/tree/master/examples/daemonjob
阅读更多关于CRD:https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/的信息
您可以编写自己的自定义资源,并将其添加到库中。
https://stackoverflow.com/questions/55901375
复制相似问题