Fork me on GitHub

在Minikube上运行Flink集群

目录

  • 背景
  • 第一部分 部署准备
  • 第二部分 验证
  • 总结
  • 参考文献及资料

背景

第一部分 部署准备

首先当然需要部署minikube集群。启动minikube集群:

1
2
3
4
5
6
7
8
9
10
11
# minikube start
Starting local Kubernetes v1.10.0 cluster...
Starting VM...
Getting VM IP address...
Moving files into cluster...
Setting up certs...
Connecting to cluster...
Setting up kubeconfig...
Starting cluster components...
Kubectl is now configured to use the cluster.
Loading cached images from config file.

上面的回显表明minikube已经启动成功。执行下面网络配置:

1
# minikube ssh 'sudo ip link set docker0 promisc on'

第二部分 部署Flink集群

一个基本的Flink集群运行在minikube需要三个组件:

  • Deployment/Job:运行 JobManager
  • Deployment for a pool of TaskManagers
  • Service exposing the JobManager’s REST and UI ports

1.1 创建命名空间

1
2
# kubectl create -f namespace.yaml
namespace/flink created

其中namespace.yaml文件为:

1
2
3
4
5
6
kind: Namespace
apiVersion: v1
metadata:
name: flink
labels:
name: flink

查询minikube集群的的命名空间:

1
2
3
4
5
# kubectl get namespaces
NAME STATUS AGE
flink Active 1m
kube-public Active 254d
kube-system Active 254d

1.2 集群组件资源定义

Job Manager 服务是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
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: flink-jobmanager
namespace: flink
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
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: flink-taskmanager
namespace: flink
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
1.2.3 启用flink服务

使用jobmanager-service.yaml创建服务,并且将端口映射到minikube主机响应端口。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
apiVersion: v1
kind: Service
metadata:
name: flink-jobmanager
namespace: flink
spec:
type: NodePort
ports:
- name: rpc
port: 6123
nodePort: 30123
- name: blob
port: 6124
nodePort: 30124
- name: query
port: 6125
nodePort: 30125
- name: ui
port: 8081
nodePort: 30081
selector:
app: flink
component: jobmanager

1.3 端口映射到虚拟机主机

minikube虚拟机停止的情况下的端口转发命令如下:

1
2
3
4
# VBoxManage modifyvm "minikube" --natpf1 "30123_6123,tcp,,6123,,30123"
# VBoxManage modifyvm "minikube" --natpf1 "30124_6123,tcp,,6124,,30124"
# VBoxManage modifyvm "minikube" --natpf1 "30125_6125,tcp,,6125,,30125"
# VBoxManage modifyvm "minikube" --natpf1 "30081_8081,tcp,,8081,,30081"

格式说明:vboxmanage modifyvm 宿主机名称 natpf<1-n> “映射别名,tcp,,本机端口,,虚拟机端口”

minikube虚拟机运行的情况下的端口转发命令如下:

1
2
3
4
# VBoxManage controlvm "minikube" --natpf1 "30123_6123,tcp,,6123,,30123"
# VBoxManage controlvm "minikube" --natpf1 "30124_6123,tcp,,6124,,30124"
# VBoxManage controlvm "minikube" --natpf1 "30125_6125,tcp,,6125,,30125"
# VBoxManage controlvm "minikube" --natpf1 "30081_8081,tcp,,8081,,30081"

格式说明:vboxmanage controlvm 宿主机名称 natpf<1-n> “映射别名,tcp,,本机端口,,宿主机端口”

另外如果要删除上面转发规则:

vboxmanage controlvm 宿主机名称 natpf<1-n> delete 映射别名

vboxmanage modifyvm 宿主机名称 natpf<1-n> delete 映射别名

第三部分 验证

3.1 minikube控制台界面

为了是主机局域网类服务器都能访问minikube控制台,需要将端口映射出去。

1
# VBoxManage modifyvm "minikube" --natpf1 "kubedashboard,tcp,,30000,,30000"

3.2 Flink控制台

总结

(1)部署前提前拉取镜像到本地镜像库。

(2)需要将服务端口映射到本地机器端口,供局域网服务访问,为后续访问Flink提供方便。

参考文献

1、Kubernetes Setup :https://ci.apache.org/projects/flink/flink-docs-stable/ops/deployment/kubernetes.html

2、How to Deploy Flink Cluster & Flink-exporter in Kubernetes Cluster:https://medium.com/pharos-production/how-to-deploy-flink-cluster-flink-exporter-in-kubernetes-cluster-48e24b440446

3、melentye/flink-kubernetes https://github.com/melentye/flink-kubernetes

4、Set up Ingress on Minikube with the NGINX Ingress Controller https://kubernetes.io/docs/tasks/access-application-cluster/ingress-minikube/

本文标题:在Minikube上运行Flink集群

文章作者:rong xiang

发布时间:2018年06月25日 - 19:06

最后更新:2022年10月25日 - 23:10

原始链接:https://zjrongxiang.github.io/posts/fc1eb8b2/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%