簡體   English   中英

是否可以安排 CronJob 在每個 Kube.netes 節點上執行?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM