问题描述
我在 Kubernetes 之上有一个 Flink session 集群,最近我从基于 ZK 的 HA 切换到了 Kubernetes HA。
我可以在 Flink 命名空间上观察每个资源的配置映射,如上述文档中所述:
k8s-ha-app1-00000000000000000000000000000000-jobmanager 2 4m35s
k8s-ha-app1-dispatcher 2 4m38s
k8s-ha-app1-resourcemanager 2 4m38s
k8s-ha-app1-restserver 2 4m38s
但是,我没有看到“jobmanager”资源的单个配置映射。我看到很多,因为工作全天运行。这可能是一个很大的数字,所以几天后,这意味着集群命名空间中配置映射的大量涌入。
jobmanager 的不同 HA 配置映射似乎在
“地址”: "akka.tcp://flink@flink-jobmanager:6123/user/rpc/jobmanager_XXX"
(其中 XXX 增加)
和“sessionId”值。
有人可以向我解释一下这些“jobmanager”资源是根据什么创建的? 一开始我认为可能会有计划的清理轮次,但我在文档中读到 HA 配置映射是从所有者那里剥离而不是删除的。 我是否错过了一些设置以便所有作业都针对同一个会话运行,或者我可以通过某种方式在作业运行后清理这些 k8s-ha-app1-XXXXXXXXXXXXXXXXXXXXX-jobmanager?
解决方法
Flink 内部的工作方式是 Dispatcher
为每个提交的作业创建一个专用的 JobMaster
组件。该组件需要领导选举,为此它创建了一个 k8s-ha-app1-<JOB_ID>-jobmanager
配置映射。这就是您看到正在创建多个 xyz-jobmanager
ConfigMap 的原因。
之所以没有清理这些 ConfigMap,是因为目前只有在整个集群关闭时才会发生这种情况。这是一个限制,Flink 社区创建了 FLINK-20695 来修复它。这个想法是在作业达到终止状态后可以删除 JobMaster
相关的 ConfigMap。
有点相关的是另一个限制,它会在会话集群的情况下妨碍正确的清理。如果集群使用 SIGTERM 信号关闭,则目前不能保证所有资源都被清除。有关详细信息,请参阅 FLINK-21008。