一、简介

Flink Kubernetes Operator是针对在Kubernetes上运转Apache Flink应用程序而设计的东西。它充分利用了Kubernetes的优势,完成了对Flink集群的弹性办理和主动化操作,经过扩展Kubernetes API的方法,供给了办理和操作Flink布置的功用。

Flink Kubernetes Operator 介绍

二、优缺陷

长处:

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内部的一个观察把状况回来给用户。

Flink Kubernetes 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

get https://github.com/jetstack/cert-manager/releases/download/v1.8.2/cert-manager.yaml
kubectl create -f cert-manager.yaml

Flink Kubernetes Operator 介绍

检查pod是否正常运转

kubectl get pods -A |grep cert-manager

Flink Kubernetes Operator 介绍

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

Flink Kubernetes Operator 介绍

检查pod是否正常

kubectl get pods -A |grep flink-kubernetes-operator

Flink Kubernetes Operator 介绍

Operator发动完成后,可以提交flink作业了,这儿运用官方的资源文件basic.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

提交作业

kubectl create -f basic.yaml

检查作业是否发动

kubectl get pods -A |grep basic

Flink Kubernetes Operator 介绍

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

kubectl port-forward --address 0.0.0.0 svc/basic-example-rest 8081

Flink Kubernetes Operator 介绍

删去Flink作业

kubectl delete -f basic.yaml

七、结语

Flink Kubernetes Operator是一种强大而灵敏的东西,简化了在Kubernetes上布置和办理Flink集群的复杂性,让开发人员和运维团队可以更专心于业务逻辑而非基础设施的细节。经过运用Operator,可以更轻松地办理Flink作业的生命周期,并依据负载的需求主动调整集群规划,使得在 Kubernetes 上运转 Flink 应用程序变得愈加方便和可靠。