在DAG脚本中

PARAM = {
    'key1' : 'value1',
    'key2' : 'value2'
}

t1 = KubernetesPodOperator(
    task_id=task_id,
    name=task_name,
    cmds=["pipenv", "run", "python3", "myscript.py"],
    env_vars={
        'GCS_PROJECT': GCS_PROJECT,
        'GCS_BUCKET': GCS_BUCKET,
        'PARAM': PARAM # this line throws an error
    },
    image=docker_image
)

在上面的情况下,我未能通过字典(PARAM)。我试图通过两个列表(键列表和一个值列表,以便以后可以将它们拉链),但它也无法使用。错误消息是这样的

kubernetes.client.exceptions.ApiException: (400)
Reason: Bad Request
HTTP response headers: ......
HTTP response body: {
    ......    
    "apiVersion":"v1",
    "metadata":{},
    "status":"Failure",
    "message":"Pod in version \"v1\" cannot be handled as a Pod: json: cannot be unmarshal object into Go struct field EnvVar.spec.containers.env.value of type string"
    ....
}

有没有办法通过PARAM?

分析解答

环境变量是字符串。除非您首先将其转换为字符串(例如,通过将其序列化为JSON),否则您不能在环境变量中像字典一样传递结构化变量。您可以这样做:

t1 = KubernetesPodOperator(
    task_id=task_id,
    name=task_name,
    cmds=["pipenv", "run", "python3", "myscript.py"],
    env_vars={
        'GCS_PROJECT': GCS_PROJECT,
        'GCS_BUCKET': GCS_BUCKET,
        'PARAM': json.dumps(PARAM),
    },
    image=docker_image,
)