[英]Is this possible to schedule CronJob to execute on each of Kubernetes nodes?
我想做的是定期在每個 Kube.netes 節點上運行一些備份腳本。 我希望它在 Kube.netes 集群中運行,而不是只向每個節點的 crontab 添加腳本。 這是因為我會將備份存儲在 Kube.netes 掛載到節點的卷上。 它與配置不同,但它可能是由 Flex 插件或awsElasticBlockStore
安裝的 CIFS 文件系統。
如果CronJob
能夠模板化DaemonSet
(而不是將其固定為jobTemplate
)並且有可能將DaemonSet
重啟策略設置為OnFailure
,那將是完美的。
我想避免為n
節點中的每一個定義n
不同的CronJobs
,然后通過定義nodeSelectors
將它們關聯在一起,因為這在節點計數動態變化的環境中維護起來不太方便。
我能看到的問題在這里討論,沒有任何明確的結論: https://github.com/kube.netes/kube.netes/issues/36601
也許您有任何技巧或竅門來實現這一目標?
這仍然是使用DaemonSet
模板模仿CronJob
的最佳方式嗎? IE。 在所有節點上運行 crontab(基於節點選擇器)
我並不反對它,但我需要一直運行這些 pod 真是太可惜了。 讓 k8s 調度程序為我處理這一切會很好。
您可以將 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
我知道我聚會遲到了,
第一個選項:
使用並行性運行多個 Job POD,使用topologySpreadConstraints在所有節點上傳播/調度 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 映像在守護程序集中運行,它也可以在執行完成后完成。
額外:
我建議也檢查一下這個 CRD: https ://github.com/AmitKumarDas/metac/tree/master/examples/daemonjob
閱讀有關 CRD 的更多信息: https ://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/
您可以編寫自己的自定義資源並將其添加到 kuberetes 中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.