繁体   English   中英

如何处理 flink 管理和 k8s 管理

[英]How to handle flink management and k8s management

我正在考虑用 K8s 部署 Flink。 我是 Flink 的新手,有一个简单的问题:

说我使用 K8s 来管理 docker 并将 TaskManager 部署到 docker 中。

据我了解,一个 docker 失败时可以由 K8s 重启,而 Task 失败时可以由 Flink 重启。

如果一个 Task 在 docker 的容器中运行,并且容器由于某种原因突然失败,在 Flink 看来,一个 Task 失败,应该重新启动该任务,而在 K8s 看来,一个容器失败,应该重新启动 docker . 在这种情况下,我们是否应该担心因为两种“被重启”而产生一些冲突?

I think you want to read up on the official kubernetes setup guide here: https://ci.apache.org/projects/flink/flink-docs-release-1.10/ops/deployment/kubernetes.html

它描述了使其工作的 3 种方法:

  1. Session 集群:这涉及在附录中启动 2 个部署,并要求您在开始时手动或通过脚本提交 Flink 作业。 这与您开发时的本地独立集群非常相似,只是它现在位于您的 kubernetes 集群中

  2. 作业集群:通过将 Flink 部署为 k8s 作业,您将能够消除作业提交步骤。

  3. Helm chart :从外观上看,该项目已经有 2 年没有更新了,所以你的里程可能会有所不同。

我在 Session 集群上取得了成功,但我最终想尝试“正确”的方式,即从外观上看,使用第二种方法将其部署为 kubernetes 作业。

根据您的 Flink Source 和故障类型,您的 Flink 作业将失败。 你不应该担心“冲突”。 Kubernetes 将重新启动容器,或者 Flink 将处理它可以处理的错误。 经过一定量的重试后,它会取消,具体取决于您如何配置它。 有关更多详细信息,请参阅配置 如果容器以非 0 的代码退出,Kubernetes 将尝试重新启动它。 但是,它可能会或可能不会重新提交作业,具体取决于您是否在作业集群中部署了作业,或者您是否有用于所使用映像的初始化脚本。 在 Session 集群中,这可能会出现问题,具体取决于作业提交是通过任务管理器还是作业管理器完成的。 如果作业是通过任务管理器提交的,那么我们需要取消现有的失败作业,以便重新提交的作业可以开始。

注意:如果您使用 Session 集群执行 go 并且有基于文件系统的有状态后端(非 RocksDB 有状态后端)用于检查点,您需要找出一种方法让作业管理器和任务管理器共享检查点目录

如果任务管理器使用作业管理器无法访问的检查点目录,则任务管理器的持久层将建立并最终导致某种磁盘空间不足错误。 如果您决定使用 RocksDB 使用 go 并启用增量检查点,这可能不是问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM