OCP CronJob 需要哪些 API
Posted
技术标签:
【中文标题】OCP CronJob 需要哪些 API【英文标题】:What APIs are required along with OCP CronJob 【发布时间】:2020-07-17 22:08:22 【问题描述】:我有 ConfigMap、ImageStream、BuildConfig、DeploymentConfig API 可以成功部署我的应用程序并按照要求启动 pod 的数量。但我现在想使用 CronJob。
我是否完全替换了 DeploymentConfig?因为这个想法是根据传递给 CronJob API 的玉米表达式启动一个新的 pod。
【问题讨论】:
【参考方案1】:是的,为什么不 ?,您可以重复使用 DeploymentConfig
的模板 ? 部分。例如:
kind: "DeploymentConfig"
apiVersion: "v1"
metadata:
name: "frontend"
spec:
template:
metadata:
labels:
name: "frontend"
spec:
containers:
- name: "helloworld"
image: "openshift/origin-ruby-sample"
ports:
- containerPort: 8080
protocol: "TCP"
replicas: 5
triggers:
- type: "ConfigChange"
- type: "ImageChange"
imageChangeParams:
automatic: true
containerNames:
- "helloworld"
from:
kind: "ImageStreamTag"
name: "origin-ruby-sample:latest"
strategy:
type: "Rolling"
paused: false
revisionHistoryLimit: 2
minReadySeconds: 0
会变成这样的??:
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: frontend
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
metadata:
labels:
name: "frontend"
spec:
containers:
- name: "helloworld"
image: "openshift/origin-ruby-sample"
ports:
- containerPort: 8080
protocol: "TCP"
restartPolicy: OnFailure
✌️
【讨论】:
Rico,所以这意味着我根本不需要DeploymentCofing
。因为我在添加CronJob
时尝试将其删除,但它失败了,我很确定我一定做错了什么。我只是想确认我没有走错路。我不需要Job
和CronJob
还是CronJob
独立于Job
?感谢您的帮助。
正确,您不需要 DeploymentConfig
里科,Job
呢?我是否需要Job
才能使CronJob
发挥作用?或者,CronJob
是否自给自足?
cronjob 基本上是作业的超集,cronjob 运行一次性作业。【参考方案2】:
我是否完全替换了 DeploymentConfig?因为这个想法是 根据传入的玉米表达式启动一个新的 pod CronJob API。
我不这么认为。基本上,“DeploymentConfig”用于运行“Pod”,“CronJob”用于运行基于“Job”的一次性“Pod”。所以他们的用例是不同的。
例如,“DeploymentConfig”具有通过“ImageStream”根据图像更改触发的功能,这是目标pod应该运行的要求,而不是一次性的。它不适用于“CronJob”。
但是如果你只是想在 Pod 部署中使用“CronJob”而不是“DeploymentConfig”而没有图像触发功能,你还应该考虑如何在“CronJob”上引用“ImageStream”。因为“CronJob”是原生Kubernetes资源,所以“CronJob”不能直接使用“ImageStream”。 为此,将“alpha.image.policy.openshift.io/resolve-names:'*'”注释添加到“CronJob”,如下所示。详情请参考Using Image Streams with Kubernetes Resources。
例如>
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: pi
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
metadata:
annotations:
alpha.image.policy.openshift.io/resolve-names: '*' <-- You need this for using ImageStream
labels:
parent: "cronjobpi"
spec:
containers:
- name: pi
image: "<ImageStream name>"
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: OnFailure
但如果您不想使用 ImageStream,您可以在“DeploymentConfig”和“CronJob”之间为 pod 的容器部署相同的模板,正如 Rico 所提到的。希望能帮到你。 :)
【讨论】:
Daein,当你说“...基于 Job...”时。在定义CronJob
时是否还需要定义Job
?而且,我不需要一直运行 pod,这是否意味着我应该删除 DeploymentConfig
?我只需要像你说的那样运行“一次性 pod”,我想我还需要定义一个 Job
。
我的意思是“CronJob”通过“CronJob”创建的“Job”创建 Pod。如果您的用例是一次性 Pod,那么您无需使用“DeploymentConfig”。
知道了。你正确理解了我的用例。我不会使用DeploymentConfig
,而是使用CronJob
。唯一让我感到困惑的是 - 我需要Job
和CronJob
还是CronJob
是否自给自足?
您只需要为您的用例创建“CronJob”,而无需创建“Job”。因为“CronJob”是用来自动控制“Job”的。以上是关于OCP CronJob 需要哪些 API的主要内容,如果未能解决你的问题,请参考以下文章