使用输入参数从 kubernetes 运行 python 脚本

JaV*_*aPG 0 bash python-2.7 docker kubernetes kubernetes-helm

我正在尝试使用输入参数从 kubernetes 运行 python 脚本(在 python 上使用 import argsparse),python 脚本在 kubernetes 上没有任何输入参数的情况下运行良好,以下命令在 dockerpython python_script.py -e $(date -d '2020/08/23') -d 7 -m映像上运行也没有问题。

我正在尝试构建我的 values.yaml 文件,以便 kubernetes 也可以运行它,但直到现在都没有成功。

我的 values.yaml 文件(仅与脚本相关的部分):

- name: python-script
  command: ["python"]
  args:
    - "python_script.py"
    - "-e $(date -d '2020/08/23')"
    - "-d 7"
    - "-m"
  resources:
    limits:
      cpu: 50m
      memory: 512Mi
    requests:
      cpu: 50m
      memory: 512Mi
  failedJobsHistoryLimit: 1
  successfulJobsHistoryLimit: 3
  concurrencyPolicy: Forbid
  restartPolicy: Never
Run Code Online (Sandbox Code Playgroud)

在 kubernetes 上运行时的输出python_script.py: error argument -e/--end_date: Not a valid date: ' $(date -d "2020/08/23")'.

就像 kubernetes$(date -d "2020/08/23")出于某种原因甚至没有将 bash 命令解析为有效日期,而 docker 图像则没有问题。

我试图["bash"]在 python 文件之后添加另一个命令并在那里添加 args 但仍然出现错误。

有任何想法吗?任何帮助将不胜感激!

谢谢。

Vic*_*ong 5

当您使用 command 运行时python,则shell不会调用then 。

所以尝试:

- name: python-script
  command: ["/bin/sh"]
  args:
    - -c
    - >-
        python python_script.py
        -e $(date -d '2020/08/23')
        -d 7
        -m
  resources:
    limits:
      cpu: 50m
      memory: 512Mi
    requests:
      cpu: 50m
      memory: 512Mi
  failedJobsHistoryLimit: 1
  successfulJobsHistoryLimit: 3
  concurrencyPolicy: Forbid
  restartPolicy: Never
Run Code Online (Sandbox Code Playgroud)

  • 整个命令“python python_script.py ...”需要位于单个“args:”行内,但可能与“-c”分开。 (3认同)
  • @2bon2b 您可以在 https://yaml-multiline.info/ 中阅读更多相关信息 (2认同)