如何在 kubernetes 中每 10 秒运行一次 cronjob?

Ish*_*wan 7 kubernetes k8s-cronjobber

“我只想每 10 秒在 Kubernetes 中运行一次 cronjob。为此,命令是什么?”

mor*_*ook 11

您可以\xe2\x80\x99t 使用 CronJob kubernetes 对象来运行少于 1 分钟。对于必须经常运行的流程,您可能使用了错误的工具。https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/

\n

在 Deployment 上创建无限循环(将其守护)

\n

您\xe2\x80\x99将需要使用bash公式(或您最喜欢的任何编程语言,Go,Java,Python或Ruby)来进行无限循环,并在部署中每次执行时休眠10秒。这是 bash/sh 的示例:

\n
apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: cronjob-deployment\n  labels:\n    app: cronjob\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: cronjob\n  template:\n    metadata:\n      labels:\n        app: cronjob\n    spec:\n      containers:\n      - name: cronjob\n        image: busybox\n        args:\n        - /bin/sh\n        - -c\n        - while true; do echo call ./script.sh here; sleep 10; done\n
Run Code Online (Sandbox Code Playgroud)\n

使用多个容器创建 1 个 CronJob

\n

如果您仍然想使用 CronJobs,您可以在定义中使用 6 个容器来实现。一种没有延迟,另一种则有 10、20、30、40 和 50 秒的延迟。

\n
apiVersion: batch/v1beta1\nkind: CronJob\nmetadata:\n  name: hello\nspec:\n  schedule: "*/1 * * * *"\n  jobTemplate:\n    spec:\n      template:\n        spec:\n          containers:\n          - name: no_delay\n            image: busybox\n            args:\n            - /bin/sh\n            - -c\n            - echo call ./script.sh here\n          - name: 10_seconds\n            image: busybox\n            args:\n            - /bin/sh\n            - -c\n            - sleep 10; echo call ./script.sh here\n          - name: 20_seconds\n            image: busybox\n            args:\n            - /bin/sh\n            - -c\n            - sleep 20; echo call ./script.sh here\n          - name: 30_seconds\n            image: busybox\n            args:\n            - /bin/sh\n            - -c\n            - sleep 30; echo call ./script.sh here\n          - name: 40_seconds\n            image: busybox\n            args:\n            - /bin/sh\n            - -c\n            - sleep 40; echo call ./script.sh here\n          - name: 50_seconds\n            image: busybox\n            args:\n            - /bin/sh\n            - -c\n            - sleep 50; echo call ./script.sh here\n          restartPolicy: OnFailure\n
Run Code Online (Sandbox Code Playgroud)\n

当然,您可能遇到的问题之一是您的进程可能会重叠(同时并发运行)。这取决于您的进程需要运行的秒数,以及 kubernetes 需要安排和创建容器的时间。

\n