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

ruby 复制代码
get https://github.com/jetstack/cert-manager/releases/download/v1.8.2/cert-manager.yaml

kubectl create -f cert-manager.yaml

查看pod是否正常运行

arduino 复制代码
kubectl get pods -A |grep cert-manager
csharp 复制代码
elm repo add flink-operator-repo
https://downloads.apache.org/flink/flink-kubernetes-operator-1.6.1/

helm install flink-kubernetes-operator flink-operator-repo/flink-kubernetes-operator

查看pod是否正常

arduino 复制代码
kubectl get pods -A |grep flink-kubernetes-operator

Operator启动完成后,可以提交flink作业了,这里使用官方的资源文件basic.yaml,其内容如下:

yaml 复制代码
apiVersion: flink.apache.org/v1beta1
kind: FlinkDeployment    
metadata:
  name: basic-example
spec:
  image: flink:1.15
  flinkVersion: v1_15
  flinkConfiguration:
    taskmanager.numberOfTaskSlots: "2"
  serviceAccount: flink
  jobManager:
    resource:
      memory: "2048m"
      cpu: 1
  taskManager:
    resource:
      memory: "2048m"
      cpu: 1
  job:
    jarURI: local:///opt/flink/examples/streaming/StateMachineExample.jar
    parallelism: 2
upgradeMode: stateless

提交作业

lua 复制代码
kubectl create -f basic.yaml

查看作业是否启动

arduino 复制代码
kubectl get pods -A |grep basic

如果需要打开flink web监控页面,需要暴露端口,命令如下

css 复制代码
kubectl port-forward --address 0.0.0.0 svc/basic-example-rest 8081

删除Flink作业

arduino 复制代码
kubectl delete -f basic.yaml

七、结语

Flink Kubernetes Operator是一种强大而灵活的工具,简化了在Kubernetes上部署和管理Flink集群的复杂性,让开发人员和运维团队能够更专注于业务逻辑而非基础设施的细节。通过使用Operator,可以更轻松地管理Flink作业的生命周期,并根据负载的需求自动调整集群规模,使得在 Kubernetes 上运行 Flink 应用程序变得更加方便和可靠。

相关推荐
华农DrLai20 小时前
Spark SQL Catalyst 优化器详解
大数据·hive·sql·flink·spark
岁岁种桃花儿20 小时前
Flink从入门到上天系列第一篇:搭建第一个Flink程序
大数据·linux·flink·数据同步
Hello.Reader1 天前
Flink ZooKeeper HA 实战原理、必配项、Kerberos、安全与稳定性调优
安全·zookeeper·flink
Hello.Reader1 天前
Flink 使用 Amazon S3 读写、Checkpoint、插件选择与性能优化
大数据·flink
Hello.Reader1 天前
Flink 对接 Google Cloud Storage(GCS)读写、Checkpoint、插件安装与生产配置指南
大数据·flink
Hello.Reader1 天前
Flink Kubernetes HA(高可用)实战原理、前置条件、配置项与数据保留机制
贪心算法·flink·kubernetes
wending-Y1 天前
记录一次排查Flink一直重启的问题
大数据·flink
Hello.Reader1 天前
Flink 对接 Azure Blob Storage / ADLS Gen2:wasb:// 与 abfs://(读写、Checkpoint、插件与认证)
flink·flask·azure
Hello.Reader2 天前
Flink 文件系统通用配置默认文件系统与连接数限制实战
vue.js·flink·npm