K8s上Apache Zeppelin解释器因UnknownHostException崩溃求助
解决Zeppelin解释器Pod无法解析Server Pod域名的问题
看起来你的Python解释器Pod无法解析Zeppelin Server的Pod域名,这是Zeppelin在K8s环境中常见的RPC通信问题——默认情况下Zeppelin Server会通知解释器连接自己的Pod FQDN,但Pod域名是动态且可能存在DNS解析不稳定的情况,更稳妥的方式是使用Service稳定域名来进行RPC通信。
问题分析
日志中的错误java.net.UnknownHostException: zeppelin-server-6d7f46d8d8-m9jlv.zeppelin.svc说明解释器Pod无法解析Zeppelin Server的Pod域名。而K8s的Service域名是固定且可靠的,我们可以让Zeppelin Server使用Service地址作为RPC通信的端点,让解释器连接这个稳定地址。
解决方案步骤
1. 修改Zeppelin配置,指定RPC通信地址为Service域名
编辑你的zeppelin-server-conf-map ConfigMap,添加ZEPPELIN_SERVER_RPC_ADDRESS环境变量,值设置为Zeppelin Server Service的FQDN:
apiVersion: v1 kind: ConfigMap metadata: name: zeppelin-server-conf-map namespace: zeppelin data: SERVICE_DOMAIN: https://zeppelin.karstecsa.com.ar/ ZEPPELIN_K8S_SPARK_CONTAINER_IMAGE: spark:2.4.5 ZEPPELIN_K8S_CONTAINER_IMAGE: apache/zeppelin:0.9.0-SNAPSHOT ZEPPELIN_HOME: /zeppelin ZEPPELIN_SERVER_RPC_PORTRANGE: 12320:12322 # 新增配置:指定RPC通信地址为Service稳定域名 ZEPPELIN_SERVER_RPC_ADDRESS: zeppelin-server.zeppelin.svc SPARK_MASTER: k8s://https://kubernetes.zeppelin.svc SPARK_HOME: /spark
2. 应用配置并重启Zeppelin Server
执行以下命令更新配置并重启Deployment:
kubectl apply -f zeppelin-server.yaml -n zeppelin kubectl rollout restart deployment/zeppelin-server -n zeppelin
3. 验证DNS解析(可选)
如果问题仍然存在,可以先验证解释器Pod能否解析Service域名:
# 启动一个临时测试Pod kubectl run -it --rm --image busybox:1.28 test-dns -n zeppelin # 在测试Pod中ping Service域名 ping zeppelin-server.zeppelin.svc
如果能正常ping通,说明K8s DNS配置正常,上述RPC地址修改应该能解决问题。
额外检查点
- 确认Zeppelin Server Service已正确暴露RPC端口:你的Service配置中已经包含
rpc端口12320,与Deployment容器端口对应,这部分无需修改。 - 确认Pod的DNS策略:Zeppelin Server和解释器Pod的
dnsPolicy默认应为ClusterFirst,如果被修改过,需要确保恢复为默认值,保证Pod能正常使用K8s集群DNS。
内容的提问来源于stack exchange,提问作者Ignacio Norris Perret
相关产品推荐
相关产品推荐

