27

我正在尝试创建一个 Kubernetes CronJob 来每分钟运行一个应用程序。

一个先决条件是我需要将我的应用程序代码放到 CronJob 中运行的容器上。我认为最好的方法是使用持久卷,pvclaim,然后定义卷并将其安装到容器中。我已经使用在 Pod 中运行的容器成功地做到了这一点,但在 CronJob 中似乎是不可能的?这是我尝试的配置:

apiVersion: batch/v2alpha1
kind: CronJob
metadata:
  name: update_db
spec:
  volumes:
  - name: application-code
    persistentVolumeClaim:
      claimName: application-code-pv-claim
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: update-fingerprints
            image: python:3.6.2-slim
            command: ["/bin/bash"]
            args: ["-c", "python /client/test.py"]
          restartPolicy: OnFailure

对应的错误:

错误:验证“cron-applications.yaml”时出错:验证数据时出错:发现 v2alpha1.CronJobSpec 的无效字段卷;如果您选择忽略这些错误,请使用 --validate=false 关闭验证

我找不到任何资源表明这是可能的。那么,如果不可能,如何解决将应用程序代码放入正在运行的 CronJob 的问题?

4

2 回答 2

32

CronJob使用 PodTemplate 作为基于 Pod 的所有其他内容,并且可以使用 Volumes 您将 Volume 规范直接放在 CronJobSpec 而不是PodSpec中,像这样使用它:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: update-db
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: update-fingerprints
            image: python:3.6.2-slim
            command: ["/bin/bash"]
            args: ["-c", "python /client/test.py"]
            volumeMounts:
            - name: application-code
              mountPath: /where/ever
          restartPolicy: OnFailure
          volumes:
          - name: application-code
            persistentVolumeClaim:
              claimName: application-code-pv-claim
于 2017-10-05T06:03:11.577 回答
3

对于那里的另一个问题:“如何解决将应用程序代码放入正在运行的 CronJob 的问题?”

您构建自己的包含代码的图像。这就是通常的做法。

FROM python:3.6.2-slim
ADD test.py /client/test.py

CMD ['python','-c','/client/test.py']

构建并推送到 docker 注册表。

docker build -t myorg/updatefingerprints
docker push myorg/updatefingerprints

在描述符中使用此图像。

apiVersion: batch/v2alpha1
kind: CronJob
metadata:
  name: update_db
spec:
  volumes:
  - name: application-code
    persistentVolumeClaim:
      claimName: application-code-pv-claim
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: update-fingerprints
            image: myorg/update-fingerprints
            imagePullPolicy: Always
          restartPolicy: OnFailure

这需要对配置管理和版本控制进行完全不同的思考。

于 2021-03-30T08:56:42.367 回答