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

问题描述 投票:0回答:1

我想创建一个 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

并使用以下命令添加一个 Python 脚本文件:
kubectl -n <NAMESPACE> cp cronjob_script.py general-utils:/var/scripts

一旦确认 PVC 中存在脚本文件,我将创建一个 cronjob,如下所示:

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

创建后,我通过运行手动触发 cronjob:

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,所以就变成了死循环。

如果我想让cronjob获取脚本文件来运行,我应该如何实现?

python dockerfile kubectl kubernetes-pvc kubernetes-cronjob
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"]
© www.soinside.com 2019 - 2024. All rights reserved.