Flink handbook - flink集群与部署之kubernetes篇

本页介绍如何在Kubernetes上部署Flink作业和会话群集。

设置Kubernetes

请参照Kubernetes的设置指南来部署Kubernetes集群。如果您想在本地运行Kubernetes,我们建议使用MiniKube来部署集群。

注意:如果使用MiniKube,请确保minikube ssh 'sudo ip link set docker0 promisc on'在部署Flink群集之前执行。否则,Flink组件无法通过Kubernetes服务自行引用。

Kubernetes上的Flink会话群集

Flink会话群集作为长期运行的Kubernetes部署来执行,请注意,可以在会话群集上运行多个Flink作业。在部署了集群之后,每个作业都需要提交到群集。

一个基本的部署在Kubernetes上的Flink会话群集一般会有三个组件:

  • 一个运行JobManager的deployment或job
  • 一个TaskManagers池 deployment
  • 一个公开JobManager的REST和UI端口的service

在Kubernetes上部署Flink会话群集

使用会话群集的资源定义,采用kubectl命令启动群集:

1
2
3
kubectl create -f jobmanager-service.yaml
kubectl create -f jobmanager-deployment.yaml
kubectl create -f taskmanager-deployment.yaml

然后,您可以通过kubectl proxy按以下方式访问Flink UI :

第一步,保证kubectl proxy在终端中运行

第二步,在浏览器里输入 http://localhost:8001/api/v1/namespaces/default/services/flink-jobmanager:ui/proxy

如果要终止Flink会话群集,可以使用如下命令:

1
2
3
kubectl delete -f jobmanager-deployment.yaml
kubectl delete -f taskmanager-deployment.yaml
kubectl delete -f jobmanager-service.yaml

Kubernetes上的Flink作业集群

Flink作业集群是运行单个作业的专用集群,这项作业是打包在flink镜像里的,因此,不需要提交额外的作业对象,步骤如下:

创建特定于作业的镜像

Flink作业集群镜像需要包含启动集群的作业的用户代码jar。因此,需要为每个作业构建专用的容器镜像。请按照这些说明构建Docker镜像。

在Kubernetes上部署Flink作业集群

要在Kubernetes上部署作业集群,请按照这些说明进行操作。

高级群集部署

GitHub上提供了早期版本的Flink Helm chart

附录

会话群集资源定义

部署使用的最新镜像 flink:latest 可在Docker Hub上找到。该镜像是用这个工具 https://github.com/docker-flink/docker-flink 构建的

jobmanager-deployment.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
"
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:latest
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-deployment.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
"
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:latest
args:
- taskmanager
ports:
- containerPort: 6121
name: data
- containerPort: 6122
name: rpc
- containerPort: 6125
name: query
env:
- name: JOB_MANAGER_RPC_ADDRESS
value: flink-jobmanager
"

jobmanager-service.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
"
apiVersion: v1
kind: Service
metadata:
name: flink-jobmanager
spec:
ports:
- name: rpc
port: 6123
- name: blob
port: 6124
- name: query
port: 6125
- name: ui
port: 8081
selector:
app: flink
component: jobmanager
"