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