1 概述
flink集群能对接kubernetes、yarn等集群管系统,本文介绍flink对接kubernetes。
flink kubernetes operator(网址:https://nightlies.apache.org/flink/flink-kubernetes-operator-docs-release-1.10/docs/concepts/overview/)可帮助你在kubernetes中管理flink集群、提交flink任务等,而你为此只需要认识一些kubernetes CR。
flink kubernetes operator的架构如下:
2 环境准备
2.1 华为云kubernetes集群
准备一个kubernetes集群,如下图所示:
flink_operator_helm_13">2.2 flink operator helm包下载地址
https://downloads.apache.org/flink/flink-kubernetes-operator-1.10.0/flink-kubernetes-operator-1.10.0-helm.tgz
2.3 cert-manager yaml文件下载地址
https://github.com/jetstack/cert-manager/releases/download/v1.17.2/cert-manager.yaml
flink_25">2.4 准备flink应用示例
https://github.com/apache/flink/tree/master/flink-examples
将示例的代码编译成jar包,再上传到对象存储OBS,如下图所示:
这些jar包存在独立的服务器上,flink operator可以通过HTTP协议拉取jar包,最终提交给flink集群。
3 部署
3.1 安装cert-manager
此组件是flink operator webhook的一个依赖,因此先安装它。
cd /tmp
wget https://github.com/jetstack/cert-manager/releases/download/v1.17.1/cert-manager.yaml
kubectl apply -f cert-manager.yaml
3.2 安装helm二进制工具
cd /tmp
wget https://get.helm.sh/helm-v3.16.2-linux-amd64.tar.gz
tar xf helm-v3.16.2-linux-amd64.tar.gz
cd linux-amd64
/bin/cp -f helm /usr/bin/
helm env
flink_operator_55">3.3 部署flink operator
下载fink operator的helm包,解压文件,最后通过helm命令将它部署在flink namespace中。
cd /tmp
wget https://downloads.apache.org/flink/flink-kubernetes-operator-1.10.0/flink-kubernetes-operator-1.10.0-helm.tgz
tar xf flink-kubernetes-operator-1.10.0-helm.tgz
helm upgrade --install flink-operator -n flink --create-namespace \
--set image.repository=swr.cn-south-1.myhuaweicloud.com/migrator/flink-kubernetes-operator \
--set image.tag=1.10.0 \
./flink-kubernetes-operator/
flink_session_72">3.4 部署flink session集群
将下面一个FlinkDeployment资源提交到kubernetes集群即可,只需要描述flink集群的镜像,jobmanager和taskmanager的资源配额。
apiVersion: flink.apache.org/v1beta1
kind: FlinkDeployment
metadata:name: flink-session-clusternamespace: flink
spec:image: swr.cn-south-1.myhuaweicloud.com/migrator/flink:1.19flinkVersion: v1_19flinkConfiguration:jobManager:resource:memory: "2048m"cpu: 2taskManager:resource:memory: "2048m"cpu: 2serviceAccount: flink
flink_session_96">3.5 负载均衡器暴露flink session集群
在控制台创建ingress资源即可:
flink_102">4 提交flink应用
将FlinkSessionJob资源提交到kubernetes集群中即可。deploymentName指向刚刚新建的flink集群(deployment名称就是CR的名称)。
apiVersion: flink.apache.org/v1beta1
kind: FlinkSessionJob
metadata:name: basic-session-job-examplenamespace: flink
spec:deploymentName: flink-session-clusterjob:jarURI: https://你的服务器地址/StateMachineExample.jarparallelism: 1
提交后,查看flink operator的日志,可以发现控制器协调成功:
o.a.f.k.o.r.d.AbstractFlinkResourceReconciler [INFO ][flink/basic-session-job-example] Resource fully reconciled, nothing to do...
登录浏览器查看flink集群,可见任务正常运行:
5 小结
通过提交kubernetes CR,来完成flink集群的创建、flink任务的管理等,这就是flink kubernetes operator的价值。