Kubernetes:是否可以将卷作为 CronJob 挂载到容器 运行?
Kubernetes: Is it possible to mount volumes to a container running as a CronJob?
我正在尝试每分钟为 运行 一个应用程序创建一个 Kubernetes CronJob。
一个先决条件是我需要将我的应用程序代码放到 运行CronJob 中的容器中。我认为最好的方法是使用持久卷、pvclaim,然后定义卷并将其安装到容器中。我已经在 Pod 中使用 运行ning 容器成功完成了此操作,但在 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
对应错误:
error: error validating "cron-applications.yaml": error validating
data: found invalid field volumes for v2alpha1.CronJobSpec; if you
choose to ignore these errors, turn validation off with
--validate=false
我找不到任何资源表明这是可能的。那么,如果不可能,如何解决将应用程序代码放入 运行ning CronJob 中的问题?
一个CronJob uses a PodTemplate as everything else based on Pods and can use Volumes. You placed your Volume specification directly in the CronJobSpec instead of the 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
对于其中的另一个问题:“如何解决将应用程序代码放入 运行 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
这需要对配置管理和版本控制进行不同的思考。
我正在尝试每分钟为 运行 一个应用程序创建一个 Kubernetes CronJob。
一个先决条件是我需要将我的应用程序代码放到 运行CronJob 中的容器中。我认为最好的方法是使用持久卷、pvclaim,然后定义卷并将其安装到容器中。我已经在 Pod 中使用 运行ning 容器成功完成了此操作,但在 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
对应错误:
error: error validating "cron-applications.yaml": error validating data: found invalid field volumes for v2alpha1.CronJobSpec; if you choose to ignore these errors, turn validation off with --validate=false
我找不到任何资源表明这是可能的。那么,如果不可能,如何解决将应用程序代码放入 运行ning CronJob 中的问题?
一个CronJob uses a PodTemplate as everything else based on Pods and can use Volumes. You placed your Volume specification directly in the CronJobSpec instead of the 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
对于其中的另一个问题:“如何解决将应用程序代码放入 运行 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
这需要对配置管理和版本控制进行不同的思考。