至此,可以小结Flink Kubernetes和Flink Native Kubernetes的区别:
Flink Kubernetes自1.2版本首次出现,Flink Native Kubernetes自1.10版本首次出现;
Flink Kubernetes是把JobManager和TaskManager等进程放入容器,在kubernetes管理和运行,这和我们把java应用做成docker镜像再在kubernetes运行是一个道理,都是用kubectl在kubernetes上操作;
Flink Native Kubernetes是在Flink安装包中有个工具,此工具可以向kubernetes的Api Server发送请求,例如创建Flink Master,并且可以和Flink Master通讯,用于提交任务,我们只要用好Flink安装包中的工具即可,无需在kubernetes上执行kubectl操作;
Flink Native Kubernetes只是Beta版,属于实验性质(官方原话:still experimental),请勿用于生产环境!
只支持session cluster模式(一个常驻session执行多个任务),还不支持Job clusters模式(一个任务对应一个session)
尽管还没有进入Release阶段,但这种操作模式对不熟悉kubernetes的开发者来说还是很友好的,接下来通过实战来体验吧;
为了体验Native Kubernetes,flink官方提出了下列前提条件:
kubernetes版本不低于1.9
kubernetes环境的DNS是正常的
KubeConfig文件,并且这个文件是有权对pod和service资源做增删改查的(kubectl命令有权对pod和service做操作,也是因为它使用了对应的KubeConfig文件),这个文件一般在kubernetes环境上,全路径:~/.kube/config
pod执行时候的身份是service account,这个service account已经通过RBAC赋予了pod的增加和删除权限;
前面两点需要您自己保证已达到要求,第三和第四点现在先不必关心,后面有详细的步骤来完成;
本次实战的环境如下图所示,一套kubernetes环境(版本是1.15.3),另外还有一台CentOS7电脑,上面已部署了flink-1.10(这里的部署是说把安装包解压,不启动任何服务):
准备完毕,开始实战了~
本次实战是在kubernetes环境创建一个session cluster,然后提交任务到这个sessionc cluster运行,与官方教程不同的是本次实战使用自定义namespace和service account,毕竟生产环境一般是不允许使用default作为namespace和service account的;
【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
oot账号;
在kubernetes的节点上,确保有权执行kubectl命令对pod和service进行增删改查,将文件/.kube/config复制到CentOS7电脑的/.kube/目录下;
在kubernetes的节点上,执行以下命令创建名为flink-session-cluster的namespace:
kubectl create namespace flink-session-cluster
kubectl create serviceaccount flink -n flink-session-cluster
kubectl create clusterrolebinding flink-role-binding-flink \
–clusterrole=edit \
–serviceaccount=flink-session-cluster:flink
./bin/kubernetes-session.sh \
-Dkubernetes.namespace=flink-session-cluster \
-Dkubernetes.jobmanager.service-account=flink \
-Dkubernetes.cluster-id=session001 \
-Dtaskmanager.memory.process.size=8192m \
-Dkubernetes.taskmanager.cpu=1 \
-Dtaskmanager.numberOfTaskSlots=4 \
-Dresourcemanager.taskmanager-timeout=3600000
9. pod启动成功后访问flink web,如下图,此时还没有创建TaskManager,因此Slot为零:
10. 回到CentOS7电脑,在flink目录下执行以下命令,将官方自带的WindowJoin任务提交到session cluster:
./bin/flink run -d \
-e kubernetes-session \
-Dkubernetes.namespace=flink-session-cluster \
-Dkubernetes.cluster-id=session001 \
examples/streaming/WindowJoin.jar
一时半会儿也找不出多余的CPU资源,唯一能做的就是降低TaskManager的CPU要求,刚才配置的是一个TaskManager使用一核CPU,我打算降低一半,即0.5核,这样就够两个TaskManager用了;
您可能会疑惑:怎么会有0.5个CPU这样的配置?这个和kubernetes的资源限制有关,kubernetes对pod的CPU限制粒度是千分之一个CPU,也是就是在kubernetes中,配置1000单位的CPU表示使用1核,我们配置0.5核,不过是配置了500单位而已(所以我还可以更穷…)
接下来的操作是先停掉当前的session cluster,再重新创建一个,创建的时候参数-Dkubernetes.taskmanager.cpu的值从1改为0.5
在CentOS7电脑上执行以下命令,将session cluster停掉,释放所有资源:
echo ‘stop’ | \
./bin/kubernetes-session.sh \
-Dkubernetes.namespace=flink-session-cluster \