我试图创建一个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":错误验证 data:找到v2alpha1.CronJobSpec的无效字段卷;如果你 选择忽略这些错误,关闭验证 --validate =假
我无法找到任何表明这是可能的资源。那么,如果不可能,如何解决将应用程序代码转换为正在运行的CronJob的问题?
答案 0 :(得分:6)
CronJob使用PodTemplate作为基于Pod的其他所有内容,并且可以使用Volumes。您将Volume规范直接放在CronJobSpec而不是PodSpec中,使用它如下:
apiVersion: batch/v2alpha1
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"]
restartPolicy: OnFailure
volumeMounts:
- name: application-code
mountPath: /where/ever
volumes:
- name: application-code
persistentVolumeClaim:
claimName: application-code-pv-claim
答案 1 :(得分:1)
对于那里的另一个问题:“如何解决将应用程序代码放入正在运行的 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
这需要对配置管理和版本控制进行完全不同的思考。