Flink Kubernetes Operator 介绍
一、简介
Flink Kubernetes Operator 是针对在 Kubernetes 上运行 Apache Flink 应用程序而设计的工具。它充分利用了 Kubernetes 的优势,实现了对 Flink 集群的弹性管理和自动化操作,通过扩展 Kubernetes API 的方式,提供了管理和操作 Flink 部署的功能。
二、优缺点
优点:
1.部署和监控 Flink 应用程序和会话部署:Flink Kubernetes Operator 允许用户在 Kubernetes 集群中轻松部署和监控 Flink 应用程序。它支持会话模式部署,允许多个 Flink 作业共享相同的 Flink 集群,优化资源使用并简化管理。
2.升级、挂起和删除部署:用户可以方便地升级 Flink 应用程序,无需中断当前作业。同时,Flink Kubernetes Operator 也支持暂停或删除部署,提供灵活的管理选项以适应不同的运维需求。
3.完整的日志记录和度量集成:它提供了强大的日志记录和监控功能,使运维团队能够实时监控 Flink 应用程序的性能和状态。这些日志和度量信息可以与 Kubernetes 的监控工具集成,方便进行性能分析和故障排查。
4.灵活的部署和与 Kubernetes 工具的本地集成:Flink Kubernetes Operator 支持灵活的部署策略,允许用户根据需求定制 Flink 应用程序的部署。此外,由于它是专为 Kubernetes 设计的,因此与 Kubernetes 的原生工具和生态系统(如 Helm)集成得非常紧密,进一步增强了用户的部署和管理体验。
缺点:
1.兼容的版本有限:目前支持的 Flink 版本有:1.13、1.14、1.15、1.16、1.17 和 1.18。
2.灵活性不够高:目前还不能完全自动扩展或缩减资源。
3.用户体量较少,未知的 bug 较多:目前是 apache flink 出来的一个子项目,大部分企业都还是在使用 fink native kubernetes 管理,或者自己二次开发了 Flink Kubernetes Operator,但没有完全贡献到社区。
三、组件
Flink Kubernetes Operator 的组件主要包括以下几个部分:
Operator 控制器:这是 Flink Kubernetes Operator 的核心组件,负责监听 Kubernetes API 中的 Flink 集群和作业定义,并根据这些定义执行相应的操作。它管理着 Flink 集群的生命周期,包括集群的创建、更新、删除等操作。
自定义资源(Custom Resource):用户可以通过自定义资源定义 Flink 集群和作业的配置。这些资源描述了 Flink 集群的规格、资源需求、作业的配置等信息。Operator 会根据这些自定义资源的定义来创建和管理 Flink 集群。
资源控制器(Resource Controller):资源控制器负责管理 Flink 集群的计算资源。它会根据集群的需求动态调整 TaskManager 的数量和配置,以确保集群能够高效地处理作业负载。
作业管理器(Job Manager):作业管理器是 Flink 集群的中心组件,负责作业的调度和管理。它会接收用户提交的作业,并根据集群的资源状况进行作业的调度和执行。作业管理器还提供作业的监控和故障恢复功能。
任务管理器(Task Manager):任务管理器是 Flink 集群的计算节点,负责执行具体的计算任务。它会接收作业管理器分配的任务,并在本地执行计算操作。任务管理器会将计算结果返回给作业管理器,并在需要时与其他任务管理器进行数据传输和通信。
存储卷(Storage Volumes):Flink Kubernetes Operator 使用 Kubernetes 的存储卷来持久化 Flink 集群的状态和数据。这些存储卷可以是持久化存储卷或临时存储卷,具体取决于用户的需求和配置。
监控与日志系统:Flink Kubernetes Operator 可以集成 Kubernetes 的监控和日志系统,这些系统可以提供实时监控和日志收集功能,帮助用户了解 Flink 集群和作业的运行状态,并进行故障排除和性能优化。
四、部署作业流程
用户使用 Kubernetes 命令行工具 kubectl 与 Flink Operator 进行交互。Operator 将会持续追踪与 FlinkDeploymenty 与 FlinkSessionJob 自定义资源相关的部署事件,同时通过 Operator 内部的一个观察把状态返回给用户。
Operator 由以下步骤组成:
1.用户使用提交 FlinkDeployment 自定义资源(CR)并提交到 Operator 上。
2.Operator 启动 Flink 集群部署,应创建 UI 访问的 ingress 规则,与此同时创建 JobManager 和 TaskManager 并提交 Flink 作业。
3.可以随时在集群上(重新)应用部署。Operator 不断调整以模仿期望的状态,直到当前状态变为用户期望状态,这个过程称为 reconcile,是一个持续进行的循环。
五、工作流程
Flink Kubernetes Operator 的工作流程大致可以分为以下几个步骤:
1.资源定义:
用户通过定义 Flink CR 资源,如 Flink Application 或 Flink Session Cluster,来描述他们希望部署的 Flink 集群的配置。
2.资源提交:
用户将 CR 资源提交到 Kubernetes 集群。
3.Operator 响应:
Flink Kubernetes Operator 监测到 CR 资源的提交,开始执行相应的操作。
4.集群部署与管理:
Operator 根据 CR 的定义,部署 Flink 集群,JobManager 节点和 TaskManager 节点。
Operator 还负责监控集群状态,处理故障恢复,进行升级和缩放等操作。
5.状态更新与反馈:
Operator 将集群的实时状态更新到 CR 的状态字段中,用户可以通过查询 CR 的状态来获取集群的运行情况。
六、安装与使用
环境准备,需要安装 docker、k8s 集群、 heml
安装 operator
查看 pod 是否正常运行
查看 pod 是否正常
Operator 启动完成后,可以提交 flink 作业了,这里使用官方的资源文件 basic.yaml,其内容如下:
提交作业
查看作业是否启动
如果需要打开 flink web 监控页面,需要暴露端口,命令如下
删除 Flink 作业
七、结语
Flink Kubernetes Operator 是一种强大而灵活的工具,简化了在 Kubernetes 上部署和管理 Flink 集群的复杂性,让开发人员和运维团队能够更专注于业务逻辑而非基础设施的细节。通过使用 Operator,可以更轻松地管理 Flink 作业的生命周期,并根据负载的需求自动调整集群规模,使得在 Kubernetes 上运行 Flink 应用程序变得更加方便和可靠。
评论