如何在EKS-Fargate上使用EMR实现全Serverless架构部署
结论
EKS完全不需要配置托管节点组,仅使用Fargate即可正常运行EMR on EKS的Spark作业,你遇到的调度失败是配置适配问题,和是否存在EC2节点组无关。
问题根因
你当前的报错是因为Spark Pod未被Fargate Profile正确匹配,EKS不会自动为未匹配Fargate Profile的Pod添加Fargate节点污点的容忍规则,因此Pod无法调度到Fargate节点,移除EC2节点组后就会进入Pending状态。
修复步骤
1. 调整Fargate Profile配置(二选一即可)
方案1:去掉标签限制快速验证
删除现有带标签筛选的Fargate Profile,创建匹配spark命名空间下所有Pod的Profile,EKS会自动为该命名空间下所有Pod添加Fargate污点容忍:
eksctl delete fargateprofile --cluster eksworkshop-eksctl --name emr eksctl create fargateprofile --cluster eksworkshop-eksctl --name emr --namespace spark
方案2:保留标签筛选规则
如果需要按标签筛选调度的Pod,除了现有的driver、executor标签配置,还需要在Spark提交参数中显式添加污点容忍:
在你的sparkSubmitParameters中新增以下配置:
--conf spark.kubernetes.tolerations=key=eks.amazonaws.com/compute-type,value=fargate,effect=NoSchedule
2. 全Fargate集群必要适配
因为你没有EC2节点组,需要修改CoreDNS的默认配置,移除其仅调度到EC2节点的限制:
kubectl patch deployment coredns -n kube-system --remove-spec/tolerations/0
3. 通用适配配置
无论选择以上哪种Fargate Profile方案,都建议在Spark提交参数中添加--conf spark.kubernetes.fargate=true,适配Fargate的运行环境限制,避免存储、网络相关的兼容性问题。
完成以上配置后重新提交作业即可,不需要添加任何EC2托管节点组。
内容的提问来源于stack exchange,提问作者Charmee Lee
相关产品推荐
相关产品推荐

