我有一个要求,我需要在kubernetes中创建一个cronjob,但该容器具有多个容器(使用单个容器可以正常工作)。
有可能吗?
要求是这样的: 1.第一个容器:运行shell脚本来完成一项工作。 2.第二个容器:运行fluentbit conf解析日志并将其发送。
以前,我认为已经有一个部署,并且运行良好,但是由于该部署仅用于10分钟的工作,所以我认为这是一项定时任务。
我们非常感谢您的帮助。
关于cronjob,我也不确定豆荚是否可以支持多个容器来做同样的事情。
谢谢, 阳光明媚
答案 0 :(得分:1)
我需要同意@Arghya Sadhu 提供的答案。它展示了如何使用 Pod
运行多容器 CronJob
。在回答之前,我想更多地关注@Chris Stryczynski 提供的评论:
不清楚容器是并行运行还是顺序运行
不完全清楚您尝试运行的工作负载是否:
<块引用>要求是这样的:
可用于parallel
(两者同时运行)或需要sequential
方法(X成功完成后,运行Y)。
如果工作负载可以并行运行,@Arghya Sadhu 提供的答案是正确的,但是如果一个工作负载依赖于另一个工作负载,我认为您应该使用 initContainers
而不是多容器 {{1 }}。
实现 Pods
的 CronJob
示例如下:
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 容器如何,它可以在没有退出代码的情况下继续运行。即使作业可能运行,作业的状态仍然失败。