如何从气流主机将卷装入运行docker容器的Kubernetes Pod,该主机使用KubernetesPodOperator触发卷

2024-10-04 01:33:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我在airflow中有一个使用KubernetesPodOperator的DAG,我正在尝试将pod中运行的容器生成的一些文件返回到airflow主机。对于开发,我的主机是一个Docker容器,运行带有Docker desktop K8s集群的airflow image,对于生产,我使用带有EKS的AWS EC2盒

volume_mount = VolumeMount('dbt-home',
                           mount_path=<CONTAINER_DIR>,
                           sub_path=None,
                           read_only=False)

volume_config= {
    'hostPath':
      {'path': <HOST_DIR>, 'type': 'DirectoryOrCreate'}
    }

volume = Volume(name="dbt-home", configs=volume_config)


dbt_run = KubernetesPodOperator(
                          namespace='default',
                          image=MY_IMAGE>,
                          cmds=["bash", "-cx"],
                          arguments=[command],
                          env_vars=MY_ENVIRONMENT,
                          volumes=[volume],
                          volume_mounts=[volume_mount],
                          name="test-run",
                          task_id="test-run-task",
                          config_file=config_file,
                          get_logs=True,
                          reattach_on_restart=True,
                          dag=dag
                          )

我尝试对卷使用hostPath类型,但我认为它指的是pod的主机。我在kubernetes文档中查找了一些卷,在这些卷中我找到了EmptyDir,但也没有找到


Tags: pathdockerrunimageconfighomedir容器
1条回答
网友
1楼 · 发布于 2024-10-04 01:33:31

根据您的评论,您正在询问pod中运行的一个任务如何完成并将日志写入pod中运行的另一个任务在启动时可以读取的位置。看起来你可以做一些事情

  1. 您可以让启动的任务通过kubectl get logs(即将kubectl放入任务映像并允许其服务帐户获取该名称空间中的pod日志)或使用Kubernetes python API获取已完成的上一个pod的日志
  2. 您可以在某个位置将pvc装入初始任务并在那里写入日志,然后当它完成时,您可以将相同的pvc装入下一个任务并从该位置读取日志。如果ebs一次只能装入一个pod,则可以使用ebs;如果nfs一次装入多个pod,则可以使用nfs。nfs可能会有意义,这样您就可以同时在pod中的多个任务之间共享日志
  3. 您可以将日志发送到Cloudwatch via fluentd。然后,您的任务可以查询Cloudwatch以查找上一个任务的日志。我认为将日志发送到Cloudwatch是一个很好的实践,因此您也可以这样做

我不确定你是否在寻找一种更为自然的方法来解决这个问题,但这些想法会在你脑海中浮现,从而解决你的问题

相关问题 更多 >