在上一篇文章《Flink On K8s实践1:Flink Kubernetes Operator介绍》中讲解了Flink Kubernetes Operator是什么和它的架构,本文继续讲解如何安装和使用Flink Kubernetes Operator。

一、Flink Kubernetes Operator安装

在正式安装Flink Kubernetes Operator之前,需要先提前准备一套可用的Kubernetes集群环境,这套Kubernetes集群可以是非高可用的,但建议Node节点的个数不少于2个,因为如果Flink集群(对于Application模式,一个作业就是1个Flink集群,对于Session模式,多个Flink作业共享一个Flink集群)开启了HA,也就是JobManager有2个或多个,那么默认情况下,不同的JobManager Pod会调度到不同的K8s Node节点上,但TaskManger不受影响,例如启动了多个TaskManager Pod,多个TaskManager Pod可以调度到同一个K8s Node节点,当然它们也可以与JobManagre在同一个节点。
有关Kubernetes集群的安装教程,可以到bigdataonk8s查阅,里面有介绍安装高可用Kubernetes集群和常用组件(K8s Dashboard、Callico、Ingress、Metallb和Prometheus)的视频和资料。

1、Flink Kubernetes Operator版本选择

Flink Kubernetes Operator对Flink的支持是有版本限制的,它支持Flink的最小版本是1.13。
此外Flink Kubernetes Operator自身也在不断的更新和完善中,在实际使用中,建议使用当前最新的Flink Kubernetes Operator。当前Flink Kubernetes Operator的最新版本是1.4。这里需要注意的是,Flink Kubernetes Operator从1.3版本开始才支持其自身的HA高可用部署(也就是说,可以启动2个或多个Flink Kubernetes Operator Pod),而从1.4版本开始才支持Flink ZooKeeper的HA服务实现方式,1.4版本之前Flink的HA只能使用Kuebrnetes的服务实现方式。
本文使用Flink Kubernetes Operator 1.4版本来演示。

2、Helm安装

Flink Kubernetes Operator的安装需要使用Helm,可以到Helm的官方网站下载Helm,Helm的官网为Helm,也可以使用以下命令下载和安装。
wget https://get.helm.sh/helm-v3.11.2-linux-amd64.tar.gz

tar -zxvf helm-v3.11.2-linux-amd64.tar.gz

mv linux-amd64/helm /usr/local/bin/

helm安装好后,可以添加常用的helm源。

helm repo add flink-operator-repo https://downloads.apache.org/flink/flink-kubernetes-operator-1.3.1/

helm repo add stable http://mirror.azure.cn/kubernetes/charts

helm repo add bitnami https://charts.bitnami.com/bitnami

helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

3、安装cert-manager

在上一篇文章《Flink On K8s实践1:Flink Kubernetes Operator介绍》中介绍Flink Webhook的时候,有提到Flink Webhook默认使用TLS协议进行通信,也就是HTTPS,所以在使用Flink Kubernetes Operator时,需要先安装cert-manager组件,由它提供证书服务。
通常使用cert-manager.yaml来安装cert-manager,cert-manager.yaml可以从cert-manager的官网获取,它的官网地址是 cert-manager ,需要注意的是,官网提供的cert-manager.yaml使用的镜像是国外的镜像仓库,在国内有可能会因为网络原因无法下载镜像,导致无法安装。为此,建议下载cert-manager.yaml后修改它的镜像地址,可以按如下方式将cert-manager.yaml里的image进行替换修改
registry.cn-hangzhou.aliyuncs.com/cm_ns01/cert-manager-webhook:v1.10.0
registry.cn-hangzhou.aliyuncs.com/cm_ns01/cert-manager-cainjector:v1.10.0
registry.cn-hangzhou.aliyuncs.com/cm_ns01/cert-manager-controller:v1.10.0
也可以到以下网盘获取修改好的cert-manager.yaml文件。
下载链接:https://caiyun.139.com/m/i?085CuBLc4piSZ
提取码:HMm6
下载并修改好cert-manager.yaml后,使用kubectl命令安装即可。
kubectl apply -f cert-manager.yaml
cert-manager安装好后会启动3个Pod和2个Service,使用命令 kubectl get all -n cert-manager 查看。

4、Flink Kubernetes Operator安装

Helm和cert-manager安装好后,接下来就可以正式安装Flink Kubernetes Operator。
Flink Kubernetes Operator最简单直接的安装方式就是使用helm在线安装,命令如下:
helm repo add flink-operator-repo https://downloads.apache.org/flink/flink-kubernetes-operator-1.4.0/
helm install flink-kubernetes-operator flink-operator-repo/flink-kubernetes-operator  --namespace flink --create-namespace
此处,我们将Flink Kubernetes Operator安装到K8s的flink Namespace下,如果flink Namespace不存在,则创建之。
可以使用如下命令检查安装情况:
kubectl get all -n flink -owide
helm list -n flink
如果需要定制Flink Kubernetes Operator,例如开启HA和修改它的启动参数配置,那么建议采用helm本地安装的方式。此方式需要先下载Flink Kubernetes Operator的Helm包文件,下载网址为https://downloads.apache.org/flink/flink-kubernetes-operator-1.4.0/flink-kubernetes-operator-1.4.0-helm.tgz, 然后解压进入目录,根据需要修改values.yaml文件,并使用如下命令安装:
helm install -f values.yaml flink-kubernetes-operator . --namespace flink --create-namespace
有关Flink Kubernetes Operator定制安装方面的教程,可以到bigdataonk8s观看和获取。
下图所示的是以HA方式安装的Flink Kubernetes Operator,其中副本数是2,所以启动了2个flink kubernetes operator pod,它们是主备关系,此外,也有1个Flink Webhook的Service。

 

 、Flink Kubernetes Operator使用体验

1、准备示例Flink作业

Flink Kubernetes Operator的源码里提供了不少示例程序,这是体验Flink Kubernetes Operator的很好方式,可以到 https://github.com/apache/flink-kubernetes-operator/tags 获取Flink Kubernetes Operator源码。
本文使用源码中的basic.yaml来演示Flink Kubernetes Operator的使用,该文件在源码解压后的examples目录下,以下是basic.yaml文件的内容(本文件对其做了部分改动,见注释描述):
apiVersion: flink.apache.org/v1beta1
kind: FlinkDeployment  # Flink集群在K8s的资源类型
metadata:
  name: basic-example  # 作业的名字
  namespace: flink        # 指定在flink命名空间下运行
spec:
  image: flink:1.13.6      # Flink的镜像,改为使用1.13.6
  # 如果官方Flink镜像下载不了,可以使用此镜像
  # image: registry.cn-hangzhou.aliyuncs.com/cm_ns01/flink:1.13.6  
  flinkVersion: v1_13    # Flink的版本,与镜像版本保持一致
  flinkConfiguration:
    taskmanager.numberOfTaskSlots: "2"
  serviceAccount: flink
  jobManager:
    resource:
      memory: "1024m"
      cpu: 1
  taskManager:
    resource:
      memory: "1024m"
      cpu: 1
  job:
    jarURI: local:///opt/flink/examples/streaming/StateMachineExample.jar  # Flink作业的启动类所在的Jar包路径
    parallelism: 2
    upgradeMode: stateless

在basic.yaml示例中,定义了一个Application模式的Flink作业(也可以称作Flink集群)规格信息,其中使用了1.13.6版本的Flink镜像。就如前面所述,Flink Kubernetes Operator支持的Flink最低版本就是1.13。此外,也定义了JobManager和TaskManager的资源配额,最后,在job部分,定义了Flink作业的启动类所在的Jar包路径,由于该Jar包默认就包含在Flink镜像里,所以可以直接使用本地路径方式读取。

2、运行示例Flink作业

basic.yaml文件准备好后,使用如下命令提交Flink作业到K8s集群运行。
kubectl apply -f basic.yaml
可以使用如下任意一个命令检查作业的运行情况
kubectl get all -n flink
kubectl get FlinkDeployment -n flink
可以看到,basic.yaml文件提交到K8s后,K8s在flink命名空间下新启动了2个Pod,一个是JobManager的Pod,名字是basic-example-556fd8bf6-tms8n,另一个是TaskManager的Pod,名字是basic-example-taskmanager-1-1。此外也可以看到创建了一个名字为basic-example,资源类型为FlinkDeployment的实例。
可以看到,basic.yaml文件提交到K8s后,K8s在flink命名空间下新启动了2个Pod,一个是JobManager的Pod,名字是basic-example-556fd8bf6-tms8n,另一个是TaskManager的Pod,名字是basic-example-taskmanager-1-1。此外也可以看到创建了一个名字为basic-example,资源类型为FlinkDeployment的实例。

3、终止示例Flink作业

停止Flink作业运行很简单,只需要执行以下任一命令即可。
kubectl delete -f basic.yam
kubectl delete FlinkDeployment basic-example -n flink

在下一篇文章中,会继续讲解和演示Flink Kubernetes Operator Application模式的2种Flink作业提交方式。更多有关Flink Kubernetes Operator的视频和学习资料,可以到bigdataonk8s观看和获取。 

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐