信也容器云揭秘02-Flink上云

网络安全侠
• 阅读 2123

Flink作为大数据和实时数据部门重要的框架和引擎,扮演着重要的角色,Flink的使用也越来越多,集群管理也变得越来越不容易。为了支持Flink上云,容器云团队也对其做了大量的探索工作,以保证Flink能够更好的且平稳的进行容器化。

一:部署方式选择

目前信也上云的Flink版本是Flink 1.11,Flink 1.11基于kubernetes的部署模式有:Session、Per-job、Application三种模式,下面说明三种部署模式的对比

这三种模式的区别在于:

  • 集群生命周期和资源隔离保证
  • 应用程序的main()方法是在客户端还是在集群上执行

信也容器云揭秘02-Flink上云

​ 图:1-1

Application模式

用户程序的 main 方法将在集群中而不是客户端运行,用户将程序逻辑和依赖打包进一个可执行的 jar 包里,集群的入口程序 (ApplicationClusterEntryPoint) 负责调用其中的 main 方法来生成 JobGraph。Application 模式为每个提交的应用程序创建一个集群,该集群可以看作是在特定应用程序的作业之间共享的会话集群,并在应用程序完成时终止。在这种体系结构中,Application 模式在不同应用之间提供了资源隔离和负载平衡保证。在特定一个应用程序上,JobManager 执行 main() 可以节省所需的 CPU 周期,还可以节省本地下载依赖项所需的带宽。

Per-Job 模式

per-job模式是为每个提交的作业启动Flink集群,拥有自己的jobmanager和taskmanager。所以在启动的时候该作业模式可能延迟会比较高点。作业完成后,集群将销毁,并清理所有的资源。此模式允许更好的资源隔离,因为运行有问题的作业也不会影响到其它作业。

Session模式

session模式假定一个已经在运行的集群,并使用该集群的资源来执行任何提交的应用程序。在同一个(会话)集群中执行的应用程序使用相同的资源,并因此竞争相同的资源。你并没有为每一项工作付出全部的开销。但是,如果其中一个作业行为不当或导致TaskManager崩溃,则该TaskManager上运行的所有作业都将受到该故障的影响。除了对导致失败的作业造成负面影响外,这意味着一个潜在的大规模恢复过程,即所有重新启动的作业同时访问文件系统,并使其对其他服务不可用。另外,让一个集群运行多个作业意味着JobManager的负载更大,JobManager负责记录集群中的所有作业。这种模式非常适合于启动延迟非常重要的短作业,例如交互式查询。

目前信也科技在服务的容器化方面的支持已经很成熟,有一套完善的构建发布流程,所以通过对比Flink的几种部署模式的优缺点,最终我们采用了Application的部署方式,该方式相比于其它两种模式优点明显,拥有更好的隔离性,同时对资源的利用率也高,也更符合我们现有的发布流程规范。

二:Flink on k8s

信也容器云揭秘02-Flink上云

​ 图:2-1

创建Flink Kubernetes集群时,Flink客户端将首先连接到Kubernetes ApiServer提交集群,包括ConfigMap,Job Manager。然后,Kubernetes将创建JobManager,在此期间,Kubelet将拉取镜像,准备并挂载,然后执行启动命令。启动JobManager命令后,Dispatcher和KubernetesResourceManager可用,并且群集已准备好接受一个或多个作业。当用户通过Flink客户端提交作业时,客户端将生成 Job graph ,并将其与用户jar一起上传到Dispatcher。JobManager向KubernetesResourceManager请求slots资源。如果没有可用的slots,资源管理器生成TaskManager并在集群中注册。这是Flink 在在kubernetes内部的简要交互方式。

三:构建发布

信也采用的Flink版本为1.11,部署模式是Application。我们把每个job抽象成一个应用。所以每个job的发布流程也就是信也普通应用一样的发布流程:

  • 申请Flink job相关的应用
  • 非1.11版本的job升级到1.11版本,并集成maven 镜像构建打包插件
  • 通过aladdin打包平台,打包镜像。通过stargate平台选择相应应用和打包的镜像版本进行job的发布

1.构建

信也容器云揭秘02-Flink上云

​ 图:3-1

2.发布

信也容器云揭秘02-Flink上云

​ 图:3-2

在程序进行升级的时候,停止job可以采用savepoint的机制来保持作业的完整快照,在下次启动的时候可以利用保存的savepoint来进行作业的恢复

四:监控告警

Flink部署在kubernetes上后,job的监控和运维也需要相应的配套设施才行。 当Flink job在运行过程中挂掉了,我们怎么才能监控到并产生告警?job在运行过程中可能会出现不健康的运行,比如checkpoint时间过长、gc频繁、或者发生了重启。这些我们又如何监控?

1. 配置探针

Flink job在运行过程中由jobmanager进行资源管理、作业调度,所以我们为每个Flink job中的jobmanager添加探针,检测job是否正常运行,当健康检测不通过,我们通过zmon平台进行告警

 readinessProbe:
        httpGet:
          path: /jobs/overview
          port: 8081
          scheme: HTTP
        initialDelaySeconds: 30
        timeoutSeconds: 3
        periodSeconds: 5
        successThreshold: 3
        failureThreshold: 12

2.指标收集

目前公司上云的应用都是采用prometheus进行指标进行收集,所以Flink的指标收集我们仍然采用prometheus进行收集。利用grafana进行展示(下图进展示部分)

信也容器云揭秘02-Flink上云

​ 图:4-1

1.对于系统指标最常关注的是作业的可用性,如 uptime (作业持续运行的时间)、fullRestarts (作业重启的次数)
2.另外是 checkpoint 相关信息,例如最近完成的 checkpoint 的时长(lastCheckpointDuration )、最近完成的 checkpoint 的大小(lastCheckpointSize )、作业失败后恢复的能力(lastCheckpointRestoreTimestamp )、成功和失败的 checkpoint 数目(numberOfCompletedCheckpoints、numberOfFailedCheckpoints)以及在 Exactly once 模式下 barrier 对齐时间(checkpointAlignmentTime)

五:高可用

作业可能由于机器维护、硬件故障导致挂掉,这时候如何快速恢复作业也成为了需要思考的问题。目前我们采用的方式是可以通过程序的方式自动恢复作业

如下图:

信也容器云揭秘02-Flink上云

​ 图:5-1

注意:

因为部分job并不适用这种方式来恢复job,所以在平台可以设置,如果job设置了启用高可用,默认情况下,检测到job挂掉,会采用checkpoint的机制来直接恢复job,如果没有设置,job挂掉后会通知对应的job负责人,负责人收到告警后,需要手动来恢复job

六:遇到的问题

1. 网络问题

Flink在部署的过程中需要访问Apiserver,这时候job需要通过clusterip来访问ApiServer,而公司集群采用的是macvlan网络是无法访问clusterip的,所以为了支持Flink部署,我们在大数据集群通过给对应pod添加双网卡的方式(一块是macvlan,一块是bridge)

2. ip管理

因为Flink部署在kubernetes是采用的deployment方式部署,这种方式部署的pod,我们无法管理相关Flink pod的ip,所以容器云团队,部署了一个webhook的服务,来监听集群pod的相关事件,来分配和释放相关的ip

信也容器云揭秘02-Flink上云

​ 图:6-1

3.配置问题

Flink在运行过程中在做checkpoint和savepoint时都依赖于hdfs,所以pod在运行过程中是需要访问hdfs服务的,我们是通过,将hdfs-site.xml、core-site.xml相关配置提前配置到kubernetes集群Configmap里,并在Flink启动过程中指定相应的ConfigMap

信也容器云揭秘02-Flink上云

​ 图:6-2

信也容器云平台

stargate作为信也科技的容器云平台,是基于kubernetes开发的一套企业级容器管理平台,具有业务场景覆盖全面、生态丰富的特点,目前已经开源

开源地址:https://github.com/ppdaicorp/stargate

扫描加群讨论(备注:stargate)

信也容器云揭秘02-Flink上云

点赞
收藏
评论区
推荐文章
一键开启云原生网络安全新视界
本文作者:陈桐乐李卓嘉随着云原生的兴起,微服务、容器、kubernetes容器编排正在快速改变着企业软件架构的形态,单体架构、分布式架构、微服务架构,软件架构在持续演进的过程中,变得越来越复杂,管理和维护也越来越困难,不断出现的安全漏洞也在持续挑
爱库里 爱库里
4年前
Kubernetes笔记:十分钟部署一套K8s环境
Kubernetes是Goole开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理——百度百科。接触K8s也有半年多了,也基于阿里云平台搭建了包含多级服务、目前运行较为稳定的K8s集群(感兴趣的可参考\k8s云集群混搭模式,可能帮你节省50%以上的服务成本\,\k8s云集群混搭模式落地分享\,但一直没来得及对其进行系统
good123 good123
4年前
奈学p7云原生架构师
云原生的概念主要是基于容器云,其主要原则是,软件产品从设计、开发到交付,全流程都考虑适配容器云的环境。传统的开发,是本地开发与测试,测试环境再次测试,然后部署上线,如果有上容器的需求,那么再编写Dcokerfile,做容器化改造,最后部署到容器云上云原生的产品,开发,测试和上线都是完全兼容容器云的环境,例如通过EclipseChe镜像开发,提交到git上,从
Stella981 Stella981
4年前
Flink on YARN部署快速入门指南
Apache Flink是一个高效、分布式、基于Java和Scala(主要是由Java实现)实现的通用大数据分析引擎,它具有分布式MapReduce一类平台的高效性、灵活性和扩展性以及并行数据库查询优化方案,它支持批量和基于流的数据分析,且提供了基于Java和Scala的API。  从Flink官方文档可以知道,目前Flink支持三大部署模式:Loca
Stella981 Stella981
4年前
Kubernetes的四种用户部署场景,你知吗?
Kubernetes可以作为容器编排引擎、PaaS或者作为云原生应用的核心基础架构被用户部署到生产环境。这些用例并不是相互排斥的。DevOps可以委托基于Kubernetes的PaaS层完成整个应用生命周期的管理(ALM),也可以独立部署Kubernetes管理CI/CD工具部署的应用。对于新应用程序可以使用Kubernetes管理微服务架构的云原始应用,支
Stella981 Stella981
4年前
Kubernetes(K8S)
一、简介  Kubernetes是Google公司在2014年6月开源的一个容器集群管理系统,使用Go语言开发,也叫K8S。Kubernetes的目标是让部署容器化的应用简单并且高效,Kubernetes提供了应用部署,规划,更新,维护的一种机制。Kubernetes一个核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着
flink on k8s的基本介绍
本文分享自天翼云开发者社区《》,作者:ln一、背景介绍ApacheFlink是一个流处理引擎,具有高效的流处理和批处理能力,以及良好的可伸缩性和容错性。Kubernetes(简称K8s)是一种容器编排系统,用于自动化容器部署、扩展和管理。将Flink部署在
选择天翼云混合云管理平台的五大理由
数字时代下,企业上云成为数字化转型的突破口。云上应用越来越多,云业务容灾备份、分级安全、应用弹性扩展等需求也日益增长。出于对综合成本、多云的差异化优势互补等因素的考量,企业多采用混合云部署策略。混合云,成为云服务市场的重要发展趋势。天翼云混合云管理平台面向企业客户提供资源统一开通、统一管理、统一运营、统一运维,支持对硬件资源和虚拟资源进行纳管,并通过整合天翼
天翼云铸牢国云安全,护航千行百业
随着数字化转型节奏不断加快,越来越多企业将业务和数据迁移到云平台上。企业在享受“上云用数赋智”带来的好处的同时,也面临新的安全挑战。天翼云作为云服务国家队,肩负着守护用户云上安全的重要责任和使命。安全可信,是国云的基本要求,也是国云的本质特征。天翼云时刻牢记使命、坚持初心,打造安全可信核心竞争力,为用户提供全方位的网信安全保障能力,并从五个方面进行实践,铸牢
Kubernetes 资源拓扑感知调度优化
作者星辰算力团队,星辰算力平台基于深入优化云原生统一接入和多云调度,加固容器运行态隔离,挖掘技术增量价值,平台承载了腾讯内部的CPU和异构算力服务,是腾讯内部大规模离线作业、资源统一调度平台。背景问题源起近年来,随着腾讯内部自研上云项目的不断发展,越来越多的业务开始使用云原生方式托管自己的工作负载,容器平台的规模因此不断增大。以Kubernetes
Flink 与Flink可视化平台StreamPark教程(开篇)
本文分享自天翼云开发者社区《》,作者:ln介绍Flink是一个大数据流处理引擎,可以为不同行业提供实时大数据处理解决方案。随着Flink的快速发展和改进,世界各地的许多公司现在都能看到它的存在。目前,北美、欧洲和金砖国家都是全球Flink应用的热门地区。当