提问者:小点点

如何让Google Cloud Composer(airflow)在不同的kubernetes集群上运行作业?


我想让我的Cloud Composer环境(Google Cloud的托管Apache Airflow服务)在不同的kubernetes集群上启动pod。我应该怎么做?

请注意,云作曲家在kubernetes集群上运行气流。该集群被认为是作曲家“环境”。使用KubernetesPodOperator的默认值,作曲家将在自己的集群上调度pod。但是在这种情况下,我有一个不同的kubernetes集群,我想在其上运行pod。

我可以连接到工作pod并在那里运行gcloud容器集群get-凭据CLUSTERNAME,但pod偶尔会被回收,因此这不是一个持久的解决方案。

我注意到KubernetesPodOperator有一个in_cluster和一个cluster_context参数,这似乎很有用。我希望这会起作用:

pod = kubernetes_pod_operator.KubernetesPodOperator(
    task_id='my-task',
    name='name',
    in_cluster=False,
    cluster_context='my_cluster_context',
    image='gcr.io/my/image:version'
)

但这会导致kubernetes. config。config_exception.ConfigException:无效的库贝-config文件。库贝-config/上下文列表中名称为CONTEXTNAME的预期对象

尽管如果我在worker pod中运行kubectl config get-context ts,我可以看到列出的集群配置。

所以我不明白的是:

  • 如何确保我的其他kubernetes集群的上下文在我的作曲家环境的worker pod(或者应该在节点上?)上可用?
  • 如果设置了上下文(就像我为测试目的手动做的那样),我如何告诉airflow使用该上下文?

共1个答案

匿名用户

查看GKEPodOperator。

文档中的示例用法:

operator = GKEPodOperator(task_id='pod_op',
                          project_id='my-project',
                          location='us-central1-a',
                          cluster_name='my-cluster-name',
                          name='task-name',
                          namespace='default',
                          image='perl')