在具有多个容器的Pod中处理cronjobs

时间:2020-05-04 12:53:40

标签: kubernetes kubernetes-cronjob

我有一个要求,我需要在kubernetes中创建一个cronjob,但该容器具有多个容器(使用单个容器可以正常工作)。

有可能吗?

要求是这样的: 1.第一个容器:运行shell脚本来完成一项工作。 2.第二个容器:运行fluentbit conf解析日志并将其发送。

以前,我认为已经有一个部署,并且运行良好,但是由于该部署仅用于10分钟的工作,所以我认为这是一项定时任务。

我们非常感谢您的帮助。

关于cronjob,我也不确定豆荚是否可以支持多个容器来做同样的事情。

谢谢, 阳光明媚

3 个答案:

答案 0 :(得分:1)

我需要同意@Arghya Sadhu 提供的答案。它展示了如何使用 Pod 运行多容器 CronJob。在回答之前,我想更多地关注@Chris Stryczynski 提供的评论:

<块引用>

不清楚容器是并行运行还是顺序运行


不完全清楚您尝试运行的工作负载是否:

<块引用>

要求是这样的:

  1. 第一个容器:运行 shell 脚本来完成一项工作。
  2. 第二个容器:运行 fluentbit conf 来解析日志并发送。

可用于parallel(两者同时运行)或需要sequential方法(X成功完成后,运行Y)。

如果工作负载可以并行运行,@Arghya Sadhu 提供的答案是正确的,但是如果一个工作负载依赖于另一个工作负载,我认为您应该使用 initContainers 而不是多容器 {{1 }}。

实现 PodsCronJob 示例如下:

initContainer

apiVersion: batch/v1beta1 kind: CronJob metadata: name: hello spec: schedule: "*/1 * * * *" jobTemplate: spec: template: spec: restartPolicy: Never containers: - name: ubuntu image: ubuntu command: [/bin/bash] args: ["-c","cat /data/hello_there.txt"] volumeMounts: - name: data-dir mountPath: /data initContainers: - name: echo image: busybox command: ["bin/sh"] args: ["-c", "echo 'General Kenobi!' > /data/hello_there.txt"] volumeMounts: - name: data-dir mountPath: "/data" volumes: - name: data-dir emptyDir: {} 会将特定文本写入带有 CronJob 的文件,然后“主”容器将显示其结果。值得一提的是,如果 initContainer 的操作不成功,主容器将不会启动。

  • initContainer
$ kubectl logs hello-1234567890-abcde

其他资源:

答案 1 :(得分:0)

是的,您可以创建具有多个容器的cronjob。 CronJob是Pod之上的抽象。因此,在容器规范中,可以像在普通容器中一样拥有多个容器。例如

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
  namespace: default
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            args:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          - name: app
            image: alpine
            command:
            - echo
            - Hello World!
          restartPolicy: OnFailure

答案 2 :(得分:0)

用于记录作为第二个容器的 sidecar 容器如何,它可以在没有退出代码的情况下继续运行。即使作业可能运行,作业的状态仍然失败。