本章介绍如何在 Kubernetes上部署Flink作业
安装 Kubernetes
按照 Kubernetes’ setup guide 来部署kubernetes集群,如果需要在本地运行Kubernetes,建议使用 MiniKube.
注意: 如果使用MiniKube,请确保在部署前执行 minikube ssh 'sudo ip link set docker0 promisc on' 命令,窦泽,Flink组件无法通过Kubernetes服务来引用自己
Kubernetes上的Flink集群
Flink会话群集作为长期运行的Kubernetes部署而执行, 所以可以在集群中运行多个Flink作业,集群部署后,需要把任务逐个提交到集群。
在Kubernetes上部署的Flink会话通常有三个组件:
- 部署/作业运行JobManager
- 部署TaskManagers池
- 提供 JobManager’的 REST的 UI服务和端口
在Kubernetes上部署Flink会话集群
使用 kubectl 命令来定义 session cluster的资源 :
kubectl create -f jobmanager-service.yamlkubectl create -f jobmanager-deployment.yamlkubectl create -f taskmanager-deployment.yaml
可以通过 kubectl proxy 来访问Flink UI:
- 在终端执行
kubectl proxy命令 - 在浏览器中输入 http://localhost:8001/api/v1/namespaces/default/services/flink-jobmanager:ui/proxy 即可访问
需要停止Flink集群,使用 kubectl:
kubectl delete -f jobmanager-deployment.yamlkubectl delete -f taskmanager-deployment.yamlkubectl delete -f jobmanager-service.yaml
Kubernetes上的Flink集群
Flink作业集群是运行单个作业的专用集群。是镜像的一部分,所以不需要额外的工作
创建专用作业的镜像
Flink作业集群映像需要包含启动集群的作业的用户代码jar,因此,需要为每个作业构建专用的镜像。按照 说明 来构建Docker镜像
在Kubernetes上部署Flink作业集群
在Kubernetes上部署作业集群,请参阅 instructions.
集群的高级部署
GitHub 上提供了早期版本的Flink Helm chart 。
附录
会话集群的资源文件
在 on Docker Hub上可以通过 flink:latest标签来找到已经构建好的镜像,镜像是从 Github repository这里构建的。
jobmanager-deployment.yaml
apiVersion: extensions/v1beta1kind: Deploymentmetadata:name: flink-jobmanagerspec:replicas: 1template:metadata:labels:app: flinkcomponent: jobmanagerspec:containers:- name: jobmanagerimage: flink:latestargs:- jobmanagerports:- containerPort: 6123name: rpc- containerPort: 6124name: blob- containerPort: 6125name: query- containerPort: 8081name: uienv:- name: JOB_MANAGER_RPC_ADDRESSvalue: flink-jobmanager
taskmanager-deployment.yaml
apiVersion: extensions/v1beta1kind: Deploymentmetadata:name: flink-taskmanagerspec:replicas: 2template:metadata:labels:app: flinkcomponent: taskmanagerspec:containers:- name: taskmanagerimage: flink:latestargs:- taskmanagerports:- containerPort: 6121name: data- containerPort: 6122name: rpc- containerPort: 6125name: queryenv:- name: JOB_MANAGER_RPC_ADDRESSvalue: flink-jobmanager
jobmanager-service.yaml
apiVersion: v1kind: Servicemetadata:name: flink-jobmanagerspec:ports:- name: rpcport: 6123- name: blobport: 6124- name: queryport: 6125- name: uiport: 8081selector:app: flinkcomponent: jobmanager
