如何让Google Cloud Composer(气流)在另一个kubernetes群集上运行作业?

时间:2019-09-02 10:00:25

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

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

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

我可以连接到工作吊舱并在其中运行gcloud container clusters get-credentials CLUSTERNAME,但有时不时回收吊舱,所以这不是一个持久的解决方案。

我注意到KubernetesPodOperator同时具有in_clustercluster_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: Invalid kube-config file. Expected object with name CONTEXTNAME in kube-config/contexts list

尽管如果我在工作窗格中运行kubectl config get-contexts,我仍然可以看到列出的集群配置。

所以我不知道的是:

  • 如何确保我的其他kubernetes集群的上下文在我的作曲者环境的工作单元上可用(或者应该在节点上?)?
  • 如果设置了上下文(如我出于测试目的手动进行的设置),如何告诉气流使用该上下文?

1 个答案:

答案 0 :(得分:2)

为此检查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')