在Openshift上执行spark-submit时如何指定带特定污点的Worker节点
解决步骤
你需要添加两类配置:污点容忍配置(让Spark的Pod可以调度到有对应污点的节点)、节点选择器配置(确保Pod只调度到你指定的目标Worker节点,避免调度到其他也匹配容忍规则的节点)。
需要新增的配置项
如果你需要Driver和Executor都调度到目标Worker节点,添加以下4项配置:
--conf spark.kubernetes.driver.tolerations=key=xxx/yyyy,operator=Exists,effect=NoSchedule --conf spark.kubernetes.executor.tolerations=key=xxx/yyyy,operator=Exists,effect=NoSchedule --conf spark.kubernetes.driver.nodeSelector=<节点标签键>=<节点标签值> --conf spark.kubernetes.executor.nodeSelector=<节点标签键>=<节点标签值>说明:
如果你不知道目标Worker节点的标签,可以在Openshift集群中执行
oc get nodes --show-labels查询,选一个目标节点独有的标签填入上面的nodeSelector配置。
如果你的污点效果不是NoSchedule,请把上面配置中的effect=NoSchedule替换为实际的污点效果,比如PreferNoSchedule、NoExecute。
如果你只需要Executor调度到目标Worker节点,只需要保留executor对应的2项配置即可。如果你的污点是键值对匹配模式(比如
xxx/yyyy=custom-value:NoSchedule),把tolerations配置调整为:--conf spark.kubernetes.executor.tolerations=key=xxx/yyyy,value=custom-value,operator=Equal,effect=NoSchedule
修改后的完整提交命令示例
./spark/bin/spark-submit \ --master xx:6443 \ --deploy-mode cluster \ --name <Name> \ --class com.xxx \ --conf spark.executor.instances=2 \ --conf spark.kubernetes.namespace=xxxx \ --conf spark.kubernetes.authenticate.driver.serviceAccountName=default \ --conf spark.kubernetes.container.image=my-image \ --conf spark.jars.ivy=/tmp/.ivy \ --conf spark.kubernetes.executor.limit.cores=0.1 \ --conf spark.kubernetes.driver.limit.cores=0.1 \ --conf spark.kubernetes.driver.request.cores=0.1 \ --conf spark.kubernetes.executor.request.cores=0.1 \ # 新增配置开始 --conf spark.kubernetes.driver.tolerations=key=xxx/yyyy,operator=Exists,effect=NoSchedule \ --conf spark.kubernetes.executor.tolerations=key=xxx/yyyy,operator=Exists,effect=NoSchedule \ --conf spark.kubernetes.driver.nodeSelector=your-node-label-key=your-node-label-value \ --conf spark.kubernetes.executor.nodeSelector=your-node-label-key=your-node-label-value \ # 新增配置结束 local:///opt/xx.jar
内容的提问来源于stack exchange,提问作者anil panditi
相关产品推荐
相关产品推荐

