如何在Cloud Composer 2的KubernetesPodOperator中指定非默认计算类
解决Cloud Composer 2中KubernetesPodOperator指定Balanced计算类的报错问题
直接在KubernetesPodOperator中添加cloud.google.com/compute-class的nodeAffinity会触发报错,原因是Cloud Composer 2的准入控制器会拦截指定非默认计算类的Pod请求,平台默认限制工作负载只能使用环境默认的general-purpose计算类。
要实现让Spark作业Pod运行在Balanced类节点上,需要按以下步骤操作:
给Composer 2环境添加Balanced计算类的节点池
- 进入GCP控制台的Composer环境详情页,找到「节点池」选项,添加新节点池:
- 计算类选择「Balanced」
- 给该节点池添加自定义标签(比如
workload-type: spark-jobs),用于后续Pod调度匹配
- 进入GCP控制台的Composer环境详情页,找到「节点池」选项,添加新节点池:
修改KubernetesPodOperator的调度配置
- 不要直接使用
cloud.google.com/compute-class标签,而是通过自定义标签来指向新创建的Balanced节点池,示例代码如下:
- 不要直接使用
from airflow.providers.cncf.kubernetes.operators.kubernetes_pod import KubernetesPodOperator spark_task = KubernetesPodOperator( task_id="run_spark_job", name="spark-migration-pod", image="your-spark-execution-image", # 使用nodeSelector简化配置 node_selector={"workload-type": "spark-jobs"}, # 或者使用nodeAffinity的方式 # affinity={ # "nodeAffinity": { # "requiredDuringSchedulingIgnoredDuringExecution": { # "nodeSelectorTerms": [ # { # "matchExpressions": [ # { # "key": "workload-type", # "operator": "In", # "values": ["spark-jobs"] # } # ] # } # ] # } # } # }, # 其他必要配置(如资源请求、命令等) )
这样配置后,Pod会被调度到你创建的Balanced计算类节点池上,同时不会触发Composer的准入拦截。
内容的提问来源于stack exchange,提问作者mehere
相关产品推荐
相关产品推荐

