此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
1条答案
按热度按时间kgsdhlau1#
以前从未在aws上使用过
MWAA
。但您的问题似乎是:您在S3中存储的模板文件是否可以通过路径
"/opt/airflow/pod_template_file_example-1.yaml"
提供给DAG脚本文件?查看文档了解KubernetesPodOperator和Kubernetes对象规范之间的差异。
所以
KubernetesPodOperator
只是为Pod创建了等效的YAML/JSON对象规范,它包含了4种类型的参数,优先顺序如下:name/namespace/image
...;1.完整的pod spec,即arg:
full_pod_spec
;pod_template_file
;1.气流连接;