AKS - Cronjob在PVC中使用脚本文件
我想创建一个定时任务(cronjob),让它能够获取PVC里的脚本文件并运行。
在这里,我在AKS中创建了一个PVC,具体如下:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
annotations:
volume.beta.kubernetes.io/mount-options: dir_mode=0777,file_mode=0777,uid=999,gid=999
volume.beta.kubernetes.io/storage-provisioner: kubernetes.io/azure-file
name: cronjob-scripts
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
storageClassName: aks-azure-files
之后,我把它和一个叫做general-utils
的pod连接起来,
并使用下面的命令把一个Python脚本文件添加到里面:
kubectl -n <NAMESPACE> cp cronjob_script.py general-utils:/var/scripts
确认脚本文件已经在PVC里后,我创建了一个定时任务,具体如下:
apiVersion: batch/v1
kind: CronJob
metadata:
name: testing-cronjob
spec:
schedule: "00 0 * * *"
concurrencyPolicy: Forbid
successfulJobsHistoryLimit: 1
failedJobsHistoryLimit: 1
startingDeadlineSeconds: 300
jobTemplate:
spec:
template:
spec:
imagePullSecrets:
- name: <SECRET_NAME>
restartPolicy: OnFailure
volumes:
- name: cronjob-scripts
persistentVolumeClaim:
claimName: cronjob-scripts
containers:
- name: testing-cronjob
image: <PYTHON_INSTALLED_ALPINE_IMAGE>
command: ["py /var/scripts/cronjob_script.py"]
volumeMounts:
- name: cronjob-scripts
mountPath: "/var/scripts"
imagePullPolicy: Always
创建后,我手动触发这个定时任务,运行:
kubectl -n <NAMESPACE> create job --from=cronjob/testing-cronjob job-of-testing-cronjob
但是,由这个任务创建的pod在事件描述中出现了以下错误:
Warning Failed 13s (x2 over 13s) kubelet
Error: failed to create containerd task: failed to create shim task:
OCI runtime create failed: runc create failed:
unable to start container process: exec: "py /var/scripts/cronjob_script.py":
stat py /var/scripts/cronjob_script.py: no such file or directory: unknown
我不确定在pod创建后PVC是否会连接上,所以这就变成了一个死循环。
如果我想让定时任务获取脚本文件来运行,我该怎么做呢?
1 个回答
0
经过长时间的调查,我发现这个错误是因为脚本文件的路径不对。
我们需要把路径放到 args
里面,而不是直接在配置中写成 one line
命令,也就是说:
从
- name: testing-cronjob
image: <PYTHON_INSTALLED_ALPINE_IMAGE>
command: ["py /var/scripts/cronjob_script.py"]
到
- name: testing-cronjob
image: <PYTHON_INSTALLED_ALPINE_IMAGE>
command: ["py"]
args: ["/var/scripts/cronjob_script.py"]