EKS部署Flink集群新区域作业提交失败、UI无法访问排查求助
问题背景
在EKS上搭建K8s集群,部署1个JobManager(JM)、30个TaskManager(TM)、3个Zookeeper节点,使用lyft开源的flinkk8soperator进行集群管理。集群基于Zookeeper开启高可用模式,完全相同的配置在其他区域可正常运行,新搭建区域出现无法提交Flink作业、Flink UI无法访问的异常。
已观测现象
- Zookeeper初始有少量报错,后续运行正常,日志均输出Processing...
- JobManager侧报错明显,暂未定位根因
- Flink operator仅提示无法提交作业
- TM日志无太多有效信息
核心日志汇总
1. Flink operator日志
{"json":{"app_name":"my-app","ns":"flink-cluster","phase":"SubmittingJob"},"level":"info","msg":"Handle state skipped for application, lastSeenError UnknownMethod call failed with status FAILED and message '': Could not find deployments for service my-app","ts":"2021-09-28T15:35:54Z"}
{"json":{"app_name":"my-app","ns":"flink-cluster","phase":"SubmittingJob"},"level":"info","msg":"Handle state skipped for application, lastSeenError UnknownMethod call failed with status FAILED and message '': Could not find deployments for service my-app","ts":"2021-09-28T15:36:24Z"}
2. 单台TaskManager日志
2021-09-28 16:13:02,940 ERROR org.apache.flink.runtime.taskexecutor.TaskExecutor [] - 向ResourceManager注册失败
java.util.concurrent.CompletionException: org.apache.flink.runtime.rpc.exceptions.FencingTokenException: Fencing token未设置:忽略发送到 akka.tcp://flink@100.117.59.33:35805/user/rpc/resourcemanager_0 的消息 RemoteFencedMessage(8bb0ba2f8de9e3fa13b269deba364c70, RemoteRpcInvocation(registerTaskExecutor(TaskExecutorRegistration, Time))),原因是fencing token为null。
后续堆栈日志与原报错一致,最终TM在重试后成功注册ResourceManager,注册ID为78d410e0d100d4712171571f087b6476。
3. JobManager日志
2021-09-28 16:13:30,063 INFO org.apache.flink.runtime.resourcemanager.StandaloneResourceManager [] - 正在ResourceManager注册TaskManager,ResourceID为 120.117.67.21:34443-d3dd7f (akka.tcp://flink@120.117.67.21:34443/user/rpc/taskmanager_0)
2021-09-30 15:36:33,455 WARN akka.remote.Remoting [] - 与 [akka.tcp://flink@120.117.78.156:33767] 的关联失败,UID未知。无法隔离未知UID的地址,将屏蔽该地址50ms。
2021-09-30 15:42:25,636 ERROR akka.remote.Remoting [] - 与 [akka.tcp://flink@120.117.79.241:40783](UID [-210531468])的关联不可恢复地失败,隔离该地址。
java.util.concurrent.TimeoutException: 远程系统长时间无响应(超过48.0小时)
at akka.remote.ReliableDeliverySupervisor$$anonfun$idle$1.applyOrElse(Endpoint.scala:387)
~[flink-dist_2.12-1.12.1.jar:1.12.1]
4. Zookeeper日志
日志较长,此处省略全量内容。
排查思路建议
第一优先级:解决operator资源找不到问题
Flink operator日志核心报错为Could not find deployments for service my-app,优先排查三类配置:
- 核对EKS集群RBAC权限:确认flink operator关联的ServiceAccount是否拥有
flink-cluster命名空间下Deployment、Service资源的get/list权限,跨区域部署时极易遗漏RBAC规则配置 - 核对服务标签匹配关系:确认Flink集群Service对应的selector标签与JM Deployment的标签完全一致,operator通过标签关联服务与对应部署资源
- 核对集群网络策略:确认是否存在网络策略限制operator访问集群内的Deployment、Service资源
第二优先级:排查Flink RPC通信异常
JM、TM日志存在明确的akka RPC通信故障,按以下步骤排查:
- 验证Pod网络连通性:在TM Pod内手动ping JM的Pod IP、Service IP,测试RPC端口连通性,排除跨可用区网络延迟、安全组限制问题
- 验证高可用配置一致性:确认
high-availability.zookeeper.quorum配置的ZK地址在新区域可正常访问,同时确认high-availability.cluster-id配置正确,Fencing token为空通常是ResourceManager未从ZK获取到正确的主节点令牌,说明高可用主节点选举流程异常 - 清理ZK残留脏数据:若此前集群有过异常启动记录,ZK上可能残留旧集群元数据,导致新启动的JM无法正常获取主节点权限,可停止Flink集群后删除ZK下对应的集群元数据目录再重启
第三优先级:资源类问题排查
资源类问题概率较低,可作为补充验证项:
- 检查JM的CPU、内存使用率,确认是否存在JM进程OOM被Kill的情况,OOM会导致RPC无响应触发超时
- 检查EKS节点的ulimit配置,确认进程最大打开文件数、最大进程数等内核参数与正常区域一致,高并发场景下内核参数限制也会导致RPC通信失败
内容的提问来源于stack exchange,提问作者Ace McCloud

