Kubernetes CronJob运行Python脚本

koaltpgm  于 2023-06-21  发布在  Kubernetes
关注(0)|答案(2)|浏览(178)

我试图通过Kubernetes CronJob调度Python脚本,但由于某种原因,我无法理解如何做到这一点。我能够运行像echo Hello World这样的简单脚本,但这不是我想要的
我尝试使用这个规范:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: test
spec:
  schedule: "*/1 * * * *"
  concurrencyPolicy: "Forbid"
  failedJobsHistoryLimit: 10
  startingDeadlineSeconds: 600 # 10 min
  jobTemplate:
    spec:
      backoffLimit: 0
      activeDeadlineSeconds: 3300 # 55min
      template:
        spec:
          containers:
            - name: hello
              image: python:3.6-slim
              command: ["python"]
              args: ["./main.py"]
          restartPolicy: Never

但是我无法运行它,因为main.py找不到www.example.com,我知道不支持相对路径,所以我硬编码了路径,但是我找不到我的主目录,我试着做ls /home/,在那里我的文件夹名称不可见,所以我无法访问我的项目存储库。
最初我打算运行bash脚本,它可以做:
1.按pip install requirements.txt安装要求
1.然后运行Python脚本
但是我不确定我怎么能用kubernetes做到这一点,这对我来说太混乱了
简而言之,我希望能够运行k8s CronJob,它可以通过首先安装需求然后运行它来运行Python脚本

dohp0rv5

dohp0rv51#

启动脚本在哪里。/main.py位于?它是否存在于映像中。您需要使用python:3.6-slim作为基础映像构建新映像,并将python脚本添加到PATH中。那么你就可以从k8s CronJob上运行它

dw1jzc5e

dw1jzc5e2#

看起来这个答案可以帮助你:Kubernetes: Is it possible to mount volumes to a container running as a CronJob?
如果你不想构建自己的docker镜像,你可以将脚本挂载为Volume。
这里有一个例子

---
apiVersion: v1
kind: ConfigMap
metadata:
  name: test-scripts
data:
  script.py: |
    print('Hello, world!')
---
apiVersion: batch/v1
kind: CronJob
metadata:
  name: test
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: python:3.11-alpine
            args: ["python", "/tmp/python/script.py"]
            volumeMounts:
            - name: scripts
              mountPath: /tmp/python
          restartPolicy: Never
          volumes:
          - name: scripts
            configMap:
              name: test-scripts

相关问题