当前位置: 首页 > 知识库问答 >
问题:

阿帕奇闪烁在库伯内特斯-恢复工作,如果工作经理崩溃

黄昊英
2023-03-14

我想在kubernetes上运行一个flink作业,使用一个(持久的)状态后端。似乎崩溃TaskManager没有问题,因为如果我理解正确,他们可以询问jobmanager需要从哪个检查点恢复。

一个崩溃的工作经理似乎更难。在这个flip-6页面上,我读到zookeeper需要知道jobmanager需要使用什么检查点来恢复和领导选举。

鉴于kubernetes会在jobmanager崩溃时重新启动它,新的jobmanager有没有办法在不必设置zookeeper集群的情况下恢复作业?

我们目前正在研究的解决方案是:当kubernetes想要杀死jobmanager(例如,因为它想将其移动到另一个vm)然后创建一个保存点时,但这只适用于正常的关闭。

编辑:http://apache-flink-user-mailing-list-archive.2336050.n4.nabble.com/Flink-HA-with-Kubernetes-without-Zookeeper-td15033.html似乎很有趣,但没有后续跟进

共有3个答案

冀景明
2023-03-14

对于所有对此感兴趣的人,我目前正在评估并实现一个类似的解决方案,使用Kubernetes ConfigMaps和blob存储(例如S3)来持久化作业元数据,覆盖JobManager重启。无需使用本地存储,因为解决方案依赖于状态持久化到blob存储。

Github thmshmm/flink-k8s-ha

还有一些工作要做(保持检查点状态),但基本的实现非常好。

如果有人喜欢使用多个JobManager,Kubernetes提供了一个进行领导人选举的接口,可以利用该接口进行选举。

冯福
2023-03-14

基于Till的答案和Xeli的部分实现,我实现了一个基于文件的HA的轻量级版本
您可以在这个github repo中找到代码-在生产中运行良好。

还写了一个博客系列,解释了如何在k8s上运行作业集群,并具体介绍了这个基于文件的HA实现。

莫英喆
2023-03-14

Flink需要一个ZooKeeper集群来从JobManager崩溃中恢复。然而,我认为您可以轻量级地实现HighAvailabilityServices、CompletedCheckpointStore、CheckpointIDCounter和SubmittedJobGraphStore,这可以为您带来很大的帮助。

考虑到您只有一个始终运行的JobManager(不完全确定K8s是否可以保证这一点),并且您有一个持久存储位置,您可以实现一个CompletedCheckpointStore,它从持久存储系统中检索完成的检查点(例如,读取所有存储的检查点文件)。此外,您还有一个文件,其中包含CheckpointId计数器的当前检查点id计数器,以及SubmittedJobGraphStore的所有提交的作业图。因此,基本思想是将所有内容存储在一个持久卷上,该持久卷可由单个JobManager访问。

 类似资料:
  • 据我所知,作业对象应该在一定时间后收获豆荚。但是在我的GKE集群(库伯内特斯1.1.8)上,“kubectl get pods-a”似乎可以列出几天前的豆荚。 所有这些都是使用乔布斯API创建的。 我确实注意到在使用 kubectl 删除作业后,pod 也被删除了。 我在这里主要担心的是,我将在批量作业中在集群上运行成千上万个pod,并且不想让内部待办系统过载。

  • 我正在尝试在Kubernetes集群(Azure AKS)中部署Flink作业。作业群集在启动后立即中止,但任务管理器运行正常。 docker镜像创建成功,没有任何异常。我可以运行docker镜像,也可以SSHdocker镜像。 我已经按照以下链接中提到的步骤: https://github.com/apache/flink/tree/release-1.9/flink-container/kub

  • 我在windows 10中创建了两个在我的minikube环境中运行的POD。一个POD带有Spring boot应用程序容器,另一个POD带有mysql容器。对于Spring boot应用程序,服务类型为nodePort,对于MYSQL pod,服务类型为club sterIP。这意味着Mysql pod只需要在集群内部进行通信。但是对于Spring boot应用程序,需要从浏览器访问,所以我配

  • 我想使用CronJob在Kubernetes内部运行一个shell脚本,下面是我的CronJon.yaml文件: CronJob已被创建(kubectl apply -f CronJob.yaml)当我获得CronJob的列表时,我可以看到cron job ( kubectl get cj ),当我运行“kubectl get pods”时,我可以看到pod正在被创建,但是pod崩溃了。谁能帮我学

  • 具体来说,当我按照谷歌网站上的指示在GKE上设置nginx ingress时,为什么最终会有两个外部IP地址? 这两个IP地址用于LoadBalancer类型的入口资源和服务资源: 以下是我的想法: 这基本上就是我链接到的教程页面上的图表。因此,我希望负载平衡器是L4类型的,并且有一个外部IP(并且不需要花费任何金钱来使用!)。我希望入口(尽管其名称)没有外部IP,因为我用注释标记了它 谷歌应该承

  • 我是库伯内特斯的新手。我正在为K8S使用GKE托管服务。有2个部署nginx、httpd,并为这2个部署创建了NodePort服务。 我正在尝试为服务创建入口规则。nginx入口控制器是通过helm安装的。我有一个来自freenom的域,并将Google云DNS设置为使用静态公共IP。当我尝试点击入口URL(domain/nginx)时,它会给出: "默认后端-404" 部署: 服务: 与http