一、简介
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
get https://github.com/jetstack/cert-manager/releases/download/v1.8.2/cert-manager.yaml
kubectl create -f cert-manager.yaml
检查pod是否正常运转
kubectl get pods -A |grep cert-manager
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是否正常
kubectl get pods -A |grep 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 web监控页面,需求暴露端口,命令如下
kubectl port-forward --address 0.0.0.0 svc/basic-example-rest 8081
删去Flink作业
kubectl delete -f basic.yaml
七、结语
Flink Kubernetes Operator是一种强大而灵敏的东西,简化了在Kubernetes上布置和办理Flink集群的复杂性,让开发人员和运维团队可以更专心于业务逻辑而非基础设施的细节。经过运用Operator,可以更轻松地办理Flink作业的生命周期,并依据负载的需求主动调整集群规划,使得在 Kubernetes 上运转 Flink 应用程序变得愈加方便和可靠。