Spark on Kubernetes中krb5与Hadoop ConfigMap仅挂载至Driver Pod而非Executor Pod的问题咨询
问题分析与解决方案
你碰到的这个情况不是Spark的预期行为——问题出在你只配置了Driver端的Kerberos/Hadoop ConfigMap挂载参数,漏掉了Executor对应的专属配置项。
Spark 3.0.x在Kubernetes环境下,spark.kubernetes.kerberos.*和spark.kubernetes.hadoop.*这类参数仅作用于Driver Pod;如果要让Executor Pod也挂载对应的ConfigMap和Kerberos凭证,需要添加带executor前缀的配置参数:
1. 补充Executor的ConfigMap挂载配置
需要添加以下两个核心配置,和你给Driver设置的ConfigMap名称保持一致即可:
spark.kubernetes.executor.kerberos.krb5.configMapName:指定要挂载到Executor的krb5配置ConfigMap名称(对应你用的hadoop-kerberos-config)spark.kubernetes.executor.hadoop.configMapName:指定要挂载到Executor的Hadoop配置ConfigMap名称(对应你用的spark-hadoop-config)
2. 配置Executor的Kerberos票据获取
如果需要Executor自动获取Kerberos票据来访问数据源,还需要补充以下配置:
spark.kubernetes.executor.kerberos.keytab.secretName:存储Kerberos Keytab的Secret名称(对应你Driver用的kerberos-keytab)spark.kubernetes.executor.kerberos.principal:Kerberos认证的主体名称(比如spark@YOUR-REALM.COM)spark.executorEnv.KRB5_CONFIG:指定Executor进程读取krb5配置的路径,和挂载路径保持一致(比如/etc/krb5.conf)
完整配置示例(spark-submit参数)
spark-submit \ --conf spark.kubernetes.kerberos.krb5.configMapName=hadoop-kerberos-config \ --conf spark.kubernetes.hadoop.configMapName=spark-hadoop-config \ --conf spark.kubernetes.kerberos.keytab.secretName=kerberos-keytab \ --conf spark.kubernetes.kerberos.principal=your-principal@YOUR-REALM.COM \ # Executor专属配置 --conf spark.kubernetes.executor.kerberos.krb5.configMapName=hadoop-kerberos-config \ --conf spark.kubernetes.executor.hadoop.configMapName=spark-hadoop-config \ --conf spark.kubernetes.executor.kerberos.keytab.secretName=kerberos-keytab \ --conf spark.kubernetes.executor.kerberos.principal=your-principal@YOUR-REALM.COM \ --conf spark.executorEnv.KRB5_CONFIG=/etc/krb5.conf \ # 其他作业部署参数 --deploy-mode cluster \ --class com.yourcompany.YourJobClass \ local:///path/to/your/job.jar
验证方法
提交作业后,查看Executor Pod的描述信息:
kubectl describe pod <executor-pod-name>
在Mounts和Volumes部分应该能看到hadoop-properties、krb5-file以及kerberos-keytab的挂载记录,和Driver Pod的对应部分一致。
这个问题的核心是Spark 3.0.x将Driver和Executor的Kerberos配置做了分离,很多人容易忽略Executor端的专属参数,导致只有Driver能正常获取Kerberos凭证。
内容的提问来源于stack exchange,提问作者Swathi Desai
相关产品推荐
相关产品推荐

