Apache Flink快速入门-如何在Kubernetes 上部署 Flink
Flink集群搭建
Kubernetes(k8s)由Google创建,现已成为最受欢迎的开源编排系统,用于管理多个主机容器化应用,提供了为分布式系统构建和部署可伸缩且可靠的应用程序所需的机制。我们正处在一个时代,服务的正常运行时间必须接近99.9%,要实现这一点,就必须拥有一种机制,即使存在系统崩溃,它们也不能失败。这些类型的系统必须具有某些特性,必须在某些意外发生的时候,工作负载可以在简单维护或部署的情况下进行扩展,停机时间必须为零。
Flink在k8s上支持的集群模式
可以使用会话集群或作业集群两种模式将Apache Flink部署在Kubernetes上。会话集群是一个运行中的独立集群,可以运行多个作业,Kubernetes的视角来看,会话集群由三个组件组成:
- 指定JobManager的部署对象
- 指定TaskManager的部署对象
- 以及公开JobManager的REST API的Service对象
注意:Kubernetes 上的 Flink 不支持 Per-Job 集群模式。
关于Flink 集群模式请参阅
Apache Flin快速入门-部署前要了解内容
Yaml 配置
在Kubernetes上构建Flink Session Cluster,需要将Flink集群中的组件对应的Docker镜像分别在k8s集群中启动,其中包括JobManager、TaskManager、JobManagerServices三个镜像服务,其中每个镜像服务都可以从中央镜像仓库中获取,用户也可以构建本地的镜像仓库,针对每个组件所相应的Kubernetes的yaml配置如下:
JobManager Yaml 配置
主要提供运行JobManager组件镜像的参数配置,包括JobManager自身的参数,例如RPC端口等配置信息:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: flink-jobmanager
spec:
replicas: 1
template:
metadata:
labels:
app: flink
component: jobmanager
spec:
containers:
- name: jobmanager
image: flink:1.9
args:
- jobmanager
ports:
- containerPort: 6123
name: rpc
- containerPort: 6124
name: blob
- containerPort: 6125
name: query
- containerPort: 8081
name: ui
env:
- name: JOB_MANAGER_RPC_ADDRESS
value: flink-jobmanager
TaskManager Yaml 配置
主要提供运行TaskManager组件的参数配置,以及TaskManager自身的参数,例如RPC端口等配置信息:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: flink-taskmanager
spec:
replicas: 2
template:
metadata:
labels:
app: flink
component: taskmanager
spec:
containers:
- name: taskmanager
image: flink:1.9
args:
- taskmanager
ports:
- containerPort: 6121
name: data
- containerPort: 6122
name: rpc
- containerPort: 6125
name: query
env:
- name: JOB_MANAGER_RPC_ADDRESS
value: flink-jobmanager
JobManagerServices 配置
主要为Flink Session 集群提供对外的RestApi和UI地址,使得用户可以通过Flink UI 的方式访问集群并获取任务和监控信息,配置文件如下:
apiVersion: v1
kind: Service
metadata:
name: flink-jobmanager
spec:
type: NodePort
ports:
- name: rpc
port: 6123
- name: blob
port: 6124
- name: query
port: 6125
- name: ui
port: 8081
nodePort: 30001
selector:
app: flink
component: jobmanager
启动Flink Session Cluster
当各个组件服务配置文件定义完毕后,就可以通过使用以下Kubectl命令,创建Flink Session Cluster,集群启动完成后就可以通过JobManagerServices中配置的WebUI端口访问 Flink Web 页面。
kubectl create -f jobmanager-service.yaml
kubectl create -f jobmanager-deployment.yaml
kubectl create -f taskmanager-deployment.yaml