【问题标题】:How to access Google Cloud Composer's data folder from a pod launched using KubernetesPodOperator?如何从使用 KubernetesPodOperator 启动的 pod 访问 Google Cloud Composer 的数据文件夹?
【发布时间】:2021-12-18 20:36:11
【问题描述】:

我有一个 Google Cloud Composer 1 环境 (Airflow 2.1.2),我想在其中运行一个使用 KubernetesPodOperator 的 Airflow DAG。

Cloud Composer makes available 给所有 DAG 一个共享文件目录,用于存储应用程序数据。目录中的文件驻留在 Composer 管理的 Google Cloud Storage 存储桶中。 Composer 使用 FUSE 将目录映射到其所有 Airflow 工作 pod 上的路径 /home/airflow/gcs/data

在我的 DAG 中,我像这样运行几个 Kubernetes pod:

    from airflow.contrib.operators import kubernetes_pod_operator
    
    # ...

    splitter = kubernetes_pod_operator.KubernetesPodOperator(
        task_id='splitter',
        name='splitter',
        namespace='default',
        image='europe-west1-docker.pkg.dev/redacted/splitter:2.3',
        cmds=["dotnet", "splitter.dll"],
    )

我运行的所有 pod 中的应用程序代码都需要读取和写入 /home/airflow/gcs/data 目录。但是当我运行 DAG 时,我的应用程序代码无法访问该目录。这可能是因为 Composer 已将目录映射到工作 pod,但没有将此礼貌扩展到我的 pod。

我需要做什么才能让我的 pod 对 /home/airflow/gcs/data 目录进行读写访问?

【问题讨论】:

    标签: kubernetes google-cloud-platform airflow google-cloud-composer


    【解决方案1】:

    Cloud Composer 使用 FUSE 将某些目录从 Cloud Storage 挂载到在 Kubernetes 中运行的 Airflow worker pod 中。它使用无法覆盖的默认权限安装这些,因为谷歌云存储不跟踪元数据。一种可能的解决方案是使用在 DAG 开头运行的 bash 运算符将文件复制到新目录。另一种可能的解决方案是使用非 Google Cloud Storage 路径,例如 /pod 路径。

    【讨论】:

    • 谢谢。我希望有类似于 Docker 的“绑定挂载”的东西。 k8s中没有等价的概念吗?
    • 也许 Anthos[1] 这统一了应用程序和基础架构之间的管理。 [1]cloud.google.com/anthos
    • 再次感谢。 Cloud Composer 挂载的卷名为gcsdir,类型为emptyDir。可能无法将其类型更改为persistent disk,然后从我使用KubernetesPodOperator 启动的吊舱安装它?
    • 为什么要将 gcsdir 从 emptyDir 更改为永久磁盘?无论如何,您可以创建一个带有卷和 volumeClaim 的 GCE 实例,然后将数据复制到 pod 中,然后使用 KubernetesPodOperator 连接到卷。
    猜你喜欢
    • 2021-04-30
    • 1970-01-01
    • 1970-01-01
    • 2016-03-12
    • 1970-01-01
    • 1970-01-01
    • 2020-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多