Kubernetes 如何分配Cloud Composer DAG在特定节点池上运行?

Kubernetes 如何分配Cloud Composer DAG在特定节点池上运行?,kubernetes,airflow,google-cloud-composer,Kubernetes,Airflow,Google Cloud Composer,我正在谷歌云上使用CloudComposer(Apache Airflow)。我们的一些进程需要比Composer的默认节点池更多的资源,因此我在集群中创建了一个额外的节点池。资源密集型DAG使用KubernetesPodOperator,并通过affinity={nodeAffinity…}属性专门针对特殊节点池 我的问题是,自从创建新的节点池以来,我注意到我的所有工作负载都安排在这个新的池上。如何在保留新节点池以用于特殊用例的同时,保持正常工作负载在默认池上运行 下面是一个以特殊池为目标的K

我正在谷歌云上使用CloudComposer(Apache Airflow)。我们的一些进程需要比Composer的默认节点池更多的资源,因此我在集群中创建了一个额外的节点池。资源密集型DAG使用KubernetesPodOperator,并通过
affinity={nodeAffinity…}
属性专门针对特殊节点池

我的问题是,自从创建新的节点池以来,我注意到我的所有工作负载都安排在这个新的池上。如何在保留新节点池以用于特殊用例的同时,保持正常工作负载在默认池上运行

下面是一个以特殊池为目标的KubernetesPodOperator定义示例。常规KubernetesPodOperator没有填写affinity属性:

KubernetesPodOperator(namespace='default',
            image="image_name",
            image_pull_policy='Always',
            name="example_name",
            task_id="example_name",
            get_logs=True,
            affinity={
                'nodeAffinity': {
                    'requiredDuringSchedulingIgnoredDuringExecution': {
                        'nodeSelectorTerms': [{
                            'matchExpressions': [{
                                'key': 'cloud.google.com/gke-nodepool',
                                'operator': 'In',
                                'values': ['datascience-pool']
                            }]
                        }]
                    }
                }
            },
            is_delete_operator_pod=True,
            dag=dag)

KubernetesPodOperator没有任何默认的关联首选项,因此,Kubernetes调度程序会决定是否将正常工作负载放入新节点池。为了避免这种情况,您现在必须在KubernetesPodOperator的所有实例上设置关联(通过使用
default\u args
apply\u defaults
decorator,您可以稍微减轻痛苦)


至少在1.8.3之前的Cloud Composer版本中,Composer系统POD将始终在节点池
默认池中运行。因此,您可以使用此选项来确保POD在Composer节点池中运行,而不是在自定义节点池中运行。

KubernetesPodOperator没有任何默认的关联首选项,因此,Kubernetes调度程序会做出正常工作负载在新节点池中的调度决策。为了避免这种情况,您现在必须在KubernetesPodOperator的所有实例上设置关联(通过使用
default\u args
apply\u defaults
decorator,您可以稍微减轻痛苦)


至少在1.8.3之前的Cloud Composer版本中,Composer系统POD将始终在节点池
默认池中运行。因此,您可以使用它来确保POD在Composer节点池中运行,而不是在自定义节点池中运行。

如何识别资源密集型进程和正常进程,它们是否属于不同的DAG节点?不同的DAG节点可以使用不同的
亲和性
选项来构造。我已经创建了两个不同的节点池,并且正在使用亲和性选项。问题是,常规工作负载不再在默认节点池上调度。例如,如果我没有在KubernetesPodOperator上指定affinity…默认行为的目标是我的新节点池,而不是默认的。Cloud Composer似乎有一些隐式的调度策略。你能提供你的KubernetesPodOperator构造参数吗?修改了原始帖子,加入了一个KubernetesPodOperator定义的例子。常规工作负载不使用affinity属性。如何识别资源密集型流程和正常流程,它们是否属于不同的DAG节点?不同的DAG节点可以使用不同的
亲和性
选项来构造。我已经创建了两个不同的节点池,并且正在使用亲和性选项。问题是,常规工作负载不再在默认节点池上调度。例如,如果我没有在KubernetesPodOperator上指定affinity…默认行为的目标是我的新节点池,而不是默认的。Cloud Composer似乎有一些隐式的调度策略。你能提供你的KubernetesPodOperator构造参数吗?修改了原始帖子,加入了一个KubernetesPodOperator定义的例子。常规工作负载不使用affinity属性。