Kubernetes 设置
本章介绍如何在 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.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集群,使用 kubectl
:
kubectl delete -f jobmanager-deployment.yaml
kubectl delete -f taskmanager-deployment.yaml
kubectl 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/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
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
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