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 时尝试将其删除,但它失败了,我很确定我一定做错了什么。我只是想确认我没有走错路。我不需要JobCronJob 还是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。唯一让我感到困惑的是 - 我需要JobCronJob 还是CronJob 是否自给自足? 您只需要为您的用例创建“CronJob”,而无需创建“Job”。因为“CronJob”是用来自动控制“Job”的。

以上是关于OCP CronJob 需要哪些 API的主要内容,如果未能解决你的问题,请参考以下文章

使用 cronjob + API 的 Amazon MapReduce

运行带有cronjob的结果需要时间的页面[关闭]

20Job和CronJob

k8s的 Job/CronJob资源对象及添加api版本

每分钟 Cronjob

JSON 服务器 - 使用 cronjob 更新数据库