官方Airflow Helm Chart的Scheduler Deployment无法应用podAffinity问题求助
问题根因与解决方案
导致该问题的核心原因是Airflow 1.1.0版本官方Helm Chart的Scheduler Deployment默认内置了Pod反亲和规则,与你新增的Pod亲和规则产生了冲突。
1. 冲突原因说明
该版本Chart的Scheduler默认配置了强制反亲和规则,禁止同一节点上运行多个带有component: scheduler标签的Pod,规则如下:
podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: component operator: In values: - scheduler topologyKey: kubernetes.io/hostname
而Webserver Deployment默认没有这类内置反亲和规则,所以相同的亲和配置可以在Webserver上正常生效。当你要求Scheduler必须调度到PostgreSQL所在节点时,如果该节点已经存在Scheduler Pod,或者规则合并后出现逻辑冲突,就会触发调度失败的报错。
2. 解决方案
在你的Helm values.yaml中显式覆盖Scheduler的默认反亲和配置,将你的亲和规则与自定义反亲和规则(根据实际需求设置)合并即可,单实例Scheduler场景可以直接清空反亲和配置:
scheduler: affinity: podAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: app operator: In values: - postgresql topologyKey: "kubernetes.io/hostname" # 单实例Scheduler可直接清空反亲和配置 podAntiAffinity: {}
3. 验证方法
配置更新后执行以下命令查看渲染后的实际affinity规则,确认是否符合预期:
kubectl get deployment <你的scheduler-deployment名称> -o yaml | grep -A 20 affinity:
内容的提问来源于stack exchange,提问作者Bennimi
相关产品推荐
相关产品推荐

