本页介绍如何在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 "
|