AKS - Cronjob在PVC中使用脚本文件

-2 投票
1 回答
46 浏览
提问于 2025-04-14 15:50

我想创建一个定时任务(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"]

撰写回答