如何在airflow 2中使用KubernetesPodOperator的pod_template_file参数?

jhiyze9q  于 2023-03-22  发布在  Kubernetes
关注(0)|答案(1)|浏览(211)

bounty已结束,回答此问题可获得+50声望奖励,奖励宽限期14小时后结束,Naxi希望引起更多关注此问题。

我在aws上通过MWAA运行airflow,工作节点运行k8s。pod的调度很好,但我试图在KubernetesPodOperator中使用pod_template_file,它给了我一堆不确定的行为。
我的模板文件存储在S3中

apiVersion: v1
kind: Pod
metadata:
  name: app1
  namespace: app1
spec:
  containers:
  - name: base
    image: "alpine:latest"
    command: ["/bin/sh"]
    args: ["-c", "while true; do echo hi>> /data/app.log; sleep 5; done"]
    volumeMounts:
    - name: persistent-storage
      mountPath: /data
  volumes:
  - name: persistent-storage
    persistentVolumeClaim:
      claimName: claim1

我的DAG文件

t_1 = KubernetesPodOperator(
    task_id=job_name_1,
    namespace="app",
    name=job_name_1,
    get_logs=True,
    is_delete_operator_pod=False,
    in_cluster=False,
    config_file=kube_config_path,
    startup_timeout_seconds=240,
    cluster_context='test',
    pod_template_file="/opt/airflow/pod_template_file_example-1.yaml",
    dag=dag)

当我这样做时,我得到一个错误,pod规范无效,因为它缺少图像字段。这是令人惊讶的,因为image存在于pod-template中。
我也在下面尝试了一下,它可以工作,但是它完全忽略了pod-template文件,并旋转了一个alpine容器并退出。所以看起来它完全忽略了pod_template_file参数。

full_pod_spec = k8s.V1Pod(
    metadata=metadata_2,
    spec=k8s.V1PodSpec(containers=[
        k8s.V1Container(
            name="base",
            image="alpine:latest",
        )
    ], ))

t_1 = KubernetesPodOperator(
    task_id=job_name_1,
    namespace="mlops",
    name=job_name_1,
    get_logs=True,
    is_delete_operator_pod=False,
    in_cluster=False,
    config_file=kube_config_path,
    startup_timeout_seconds=240,
    cluster_context='aws',
    full_pod_spec=full_pod_spec,
    pod_template_file="/opt/airflow/pod_template_file_example-1.yaml",
    dag=dag)

在airflow中引用KubernetesPodOperator中的pod_template_file的正确方法是什么?
参考文献:medium

kgsdhlau

kgsdhlau1#

以前从未在aws上使用过MWAA。但您的问题似乎是:

您在S3中存储的模板文件是否可以通过路径"/opt/airflow/pod_template_file_example-1.yaml"提供给DAG脚本文件?

查看文档了解KubernetesPodOperator和Kubernetes对象规范之间的差异。
所以KubernetesPodOperator只是为Pod创建了等效的YAML/JSON对象规范,它包含了4种类型的参数,优先顺序如下:

  1. KubernetesPodOperator参数,如name/namespace/image...;
    1.完整的pod spec,即arg:full_pod_spec ;
  2. pod模板文件,即arg:pod_template_file ;
    1.气流连接;

相关问题