kubernetes 在k8s上使用动态列表值,从部署yamlMap到部署yaml

2admgd59  于 2023-11-17  发布在  Kubernetes
关注(0)|答案(2)|浏览(153)

我正在使用argo来编排我的工作流程。我有许多python任务之一接受nargs作为参数,我试图弄清楚如何从配置Map传递+nargs。
对于每一个工作流作业,我计划有一个不同的NARG Map,其中的narg参数可能会有所不同。
例如,其中一个作业可能具有market_app.py --buy_fruits apple pear,另一个作业可能具有market_app.py --buy_fruits blueberry raspberry strawberry
当我的argo yaml试图从配置Map中读取它时,它被读取为一个字符串,而不是传递到配置键值中的许多字符串,并且它不会将其加载为一个列表,这通常是默认情况下从命令行传递时处理的。
这就是我的WPMap键/值对的样子:
buy_fruits: apple pear
我的部署yaml会有

- name: go-to-market
      container:
        args:
          - '--buy_fruits'
          - '{{inputs.parameter.fruits}}'
        command:
          ["python",'-m',"market_app"]
      inputs:
        parameters:
          - name: fruits
            valueFrom:
              configMapKeyRef:
                name: market-config
                key: buy_fruits

字符串
当我的应用程序启动时,它应该将配置加载为[“apple”,“pear”],而在上面的示例中,它的加载为[“apple pear”]
我当然可以改变我的应用程序读取它的方式,但我不会仅仅为了让它从MapMap中读取而改变我的代码。

5us2dqdw

5us2dqdw1#

你确定这不是Python脚本吗?
我想如果你有Python中的["apple pear"],你可以做:

cm_content = ["apple pear"]

cm_content_array = cm_content[0].split(' ')

# result:
# cm_content_array = ['apple', 'pear']

字符串

iyfjxgzm

iyfjxgzm2#

如果你在args中传递值。arg列表中的每个元素都将被视为single string。我们可以通过避免args来克服这种行为。我使用下面的python脚本进行验证。
test.py

import argparse
my_parser = argparse.ArgumentParser()
my_parser.add_argument('--fruits', nargs='*', type=str)
args = my_parser.parse_args()
print(args.fruits)

字符串
deployment.yaml

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: eks-python
  name: eks-python
spec:
  containers:
  - image: python
    name: eks-python
    resources: {}
    command:
    - "sh"
    - "-c"
    - "python3 test.py --fruits $fruits"
    env:
      - name: fruits
        valueFrom:
          configMapKeyRef:
            name: market-config
            key: buy_fruits

  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}


ConfigMap

apiVersion: v1
data:
  buy_fruits: apple pear
kind: ConfigMap
metadata:
  creationTimestamp: "2023-10-17T06:53:04Z"
  name: market-config
  namespace: default
  resourceVersion: "61288391"


Pod logs

k logs eks-python
['apple', 'pear']

相关问题