首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在kubernetes中每10秒运行一次cronjob?

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

Stack Overflow用户
提问于 2020-08-16 04:19:49
回答 3查看 4.9K关注 0票数 4

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

EN

回答 3

Stack Overflow用户

发布于 2020-08-16 05:00:54

CronJob kubernetes object的运行时间不能超过1分钟。对于必须频繁运行的进程,您可能使用了错误的工具。https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/

在部署上创建无限循环(守护它)

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

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: cronjob-deployment
  labels:
    app: cronjob
spec:
  replicas: 1
  selector:
    matchLabels:
      app: cronjob
  template:
    metadata:
      labels:
        app: cronjob
    spec:
      containers:
      - name: cronjob
        image: busybox
        args:
        - /bin/sh
        - -c
        - while true; do echo call ./script.sh here; sleep 10; done

创建一个包含多个容器的CronJob

如果你仍然想使用CronJobs,你可以在定义中使用6个容器。一个没有延迟,其他的有10,20,30,40和50秒的延迟。

代码语言:javascript
复制
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: no_delay
            image: busybox
            args:
            - /bin/sh
            - -c
            - echo call ./script.sh here
          - name: 10_seconds
            image: busybox
            args:
            - /bin/sh
            - -c
            - sleep 10; echo call ./script.sh here
          - name: 20_seconds
            image: busybox
            args:
            - /bin/sh
            - -c
            - sleep 20; echo call ./script.sh here
          - name: 30_seconds
            image: busybox
            args:
            - /bin/sh
            - -c
            - sleep 30; echo call ./script.sh here
          - name: 40_seconds
            image: busybox
            args:
            - /bin/sh
            - -c
            - sleep 40; echo call ./script.sh here
          - name: 50_seconds
            image: busybox
            args:
            - /bin/sh
            - -c
            - sleep 50; echo call ./script.sh here
          restartPolicy: OnFailure

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

票数 5
EN

Stack Overflow用户

发布于 2020-08-16 05:09:39

如果您的任务需要频繁运行,那么cron就是工具。

除了它不会频繁地启动作业这一事实之外,如果作业运行的时间比两次启动之间的间隔更长,那么还有可能出现一些严重的问题。重写任务,使其守护进程并持久运行,然后在必要时从cron启动它(同时确保它不会在已经运行的情况下重新启动)。

票数 4
EN

Stack Overflow用户

发布于 2021-04-12 01:04:43

您可以编写一个以10秒为间隔执行6次的脚本。并设置Kubernetes cron作业每分钟运行一次。这样,您的脚本每分钟开始运行一次,然后每隔10秒执行一次任务。

脚本在一分钟后执行cron作业时,每10秒运行一次逻辑,共运行6次。

这将在每10秒打印hello world 6次:#!/bin/bash -x a=0

直到$a -gt 5回应"hello world“a=expr $a + 1睡眠10完成

cronjob示例:

apiVersion:批/v1beta1种类:Sample元数据:名称: hello spec: schedule:"*/1 ** *“jobTemplate: spec: template: spec: containers:- name: hello image: imagePullPolicy: IfNotPresent命令:-/ CronJob /sh- -c - ./sample.sh restartPolicy: OnFailure ~

因此,通过这种方式,您的cron作业每一分钟执行一次,.which轮流启动您的进程,该进程每10秒运行一次,并执行业务逻辑6分钟。

这是您可以遵循的想法,使cron作业在几秒钟内工作,因为Kubernetes不会为低于1分钟的调度提供值。

尽管在这种方法中,您需要设置不与下一次执行cron作业重叠的策略。例如,如果您的业务逻辑需要15秒才能执行,而您现在每10秒运行一次业务逻辑6次。由于业务逻辑需要15秒,因此理想情况下,它应该立即运行4次而不是6次。因此,您需要调整脚本中的重复。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63430479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档