https://github.com/zq2599/blog_demos
内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;
Flink Kubernetes与Flink Native Kubernetes是不同的概览,先回顾一下Flink Kubernetes:
至此,可以小结Flink Kubernetes和Flink Native Kubernetes的区别:
尽管还没有进入Release阶段,但这种操作模式对不熟悉kubernetes的开发者来说还是很友好的,接下来通过实战来体验吧;
为了体验Native Kubernetes,flink官方提出了下列前提条件:
前面两点需要您自己保证已达到要求,第三和第四点现在先不必关心,后面有详细的步骤来完成;
本次实战的环境如下图所示,一套kubernetes环境(版本是1.15.3),另外还有一台CentOS7电脑,上面已部署了flink-1.10(这里的部署是说把安装包解压,不启动任何服务):
准备完毕,开始实战了~
本次实战是在kubernetes环境创建一个session cluster,然后提交任务到这个sessionc cluster运行,与官方教程不同的是本次实战使用自定义namespace和service account,毕竟生产环境一般是不允许使用default作为namespace和service account的;
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
15. 在kubernetes环境查看pod情况,如下图红框所示,有个新建的pod状态是Pending,看来这就是第七个任务不能执行就是因为这个新建的pod无法正常工作导致的:
16. 再看看这个namespace的事件通知,如下图红框所示,名为session001-taskmanager-1-2的pod有一条通知信息:由于CPU资源不足导致pod创建失败:
17. 穷到没钱配置kubernetes环境,连一核CPU都凑不齐:
18. 一时半会儿也找不出多余的CPU资源,唯一能做的就是降低TaskManager的CPU要求,刚才配置的是一个TaskManager使用一核CPU,我打算降低一半,即0.5核,这样就够两个TaskManager用了;
19. 您可能会疑惑:怎么会有0.5个CPU这样的配置?这个和kubernetes的资源限制有关,kubernetes对pod的CPU限制粒度是千分之一个CPU,也是就是在kubernetes中,配置1000单位的CPU表示使用1核,我们配置0.5核,不过是配置了500单位而已(所以我还可以更穷....)
20. 接下来的操作是先停掉当前的session cluster,再重新创建一个,创建的时候参数-Dkubernetes.taskmanager.cpu的值从1改为0.5
21. 在CentOS7电脑上执行以下命令,将session cluster停掉,释放所有资源:
echo ‘stop‘ | ./bin/kubernetes-session.sh -Dkubernetes.namespace=flink-session-cluster -Dkubernetes.cluster-id=session001 -Dexecution.attached=true
./bin/kubernetes-session.sh -Dkubernetes.namespace=flink-session-cluster -Dkubernetes.jobmanager.service-account=flink -Dkubernetes.cluster-id=session001 -Dtaskmanager.memory.process.size=4096m -Dkubernetes.taskmanager.cpu=0.5 -Dtaskmanager.numberOfTaskSlots=6 -Dresourcemanager.taskmanager-timeout=3600000
如果已完成Flink Native Kubernetes体验,想彻底清理掉前面的所有资源,请按照以下步骤操作:
echo ‘stop‘ | ./bin/kubernetes-session.sh -Dkubernetes.namespace=flink-session-cluster -Dkubernetes.cluster-id=session001 -Dexecution.attached=true
kubectl delete service session001 -n flink-session-cluster
kubectl delete clusterrolebinding flink-role-binding-flink
kubectl delete serviceaccount flink -n flink-session-cluster
kubectl delete namespace flink-session-cluster
至此,Flink Native Kubernetes相关的实战就完成了,如果您也在关注这个技术,希望本文能给您一些参考
微信搜索「程序员欣宸」,我是欣宸,期待与您一同畅游Java世界...
https://github.com/zq2599/blog_demos
原文:https://www.cnblogs.com/bolingcavalry/p/13997993.html