本章介绍如何在 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的资源 :

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

可以通过 kubectl proxy 来访问Flink UI:

  1. 在终端执行kubectl proxy 命令
  2. 在浏览器中输入 http://localhost:8001/api/v1/namespaces/default/services/flink-jobmanager:ui/proxy 即可访问

需要停止Flink集群,使用 kubectl:

  1. kubectl delete -f jobmanager-deployment.yaml
  2. kubectl delete -f taskmanager-deployment.yaml
  3. 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

  1. apiVersion: extensions/v1beta1
  2. kind: Deployment
  3. metadata:
  4. name: flink-jobmanager
  5. spec:
  6. replicas: 1
  7. template:
  8. metadata:
  9. labels:
  10. app: flink
  11. component: jobmanager
  12. spec:
  13. containers:
  14. - name: jobmanager
  15. image: flink:latest
  16. args:
  17. - jobmanager
  18. ports:
  19. - containerPort: 6123
  20. name: rpc
  21. - containerPort: 6124
  22. name: blob
  23. - containerPort: 6125
  24. name: query
  25. - containerPort: 8081
  26. name: ui
  27. env:
  28. - name: JOB_MANAGER_RPC_ADDRESS
  29. value: flink-jobmanager

taskmanager-deployment.yaml

  1. apiVersion: extensions/v1beta1
  2. kind: Deployment
  3. metadata:
  4. name: flink-taskmanager
  5. spec:
  6. replicas: 2
  7. template:
  8. metadata:
  9. labels:
  10. app: flink
  11. component: taskmanager
  12. spec:
  13. containers:
  14. - name: taskmanager
  15. image: flink:latest
  16. args:
  17. - taskmanager
  18. ports:
  19. - containerPort: 6121
  20. name: data
  21. - containerPort: 6122
  22. name: rpc
  23. - containerPort: 6125
  24. name: query
  25. env:
  26. - name: JOB_MANAGER_RPC_ADDRESS
  27. value: flink-jobmanager

jobmanager-service.yaml

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