Flink Native Kubernetes实战

在这里插入图片描述

准备完毕,开始实战了~

实战内容简介

本次实战是在kubernetes环境创建一个session cluster,然后提交任务到这个sessionc cluster运行,与官方教程不同的是本次实战使用自定义namespace和service account,毕竟生产环境一般是不允许使用default作为namespace和service account的;

实战

  1. 在CetnOS7电脑上操作时使用的是root账号;

  2. 在kubernetes的节点上,确保有权执行kubectl命令对pod和service进行增删改查,将文件/.kube/config复制到CentOS7电脑的/.kube/目录下;

  3. 在kubernetes的节点上,执行以下命令创建名为flink-session-cluster的namespace:

kubectl create namespace flink-session-cluster

  1. 执行以下命令创建名为flink的serviceaccount:

kubectl create serviceaccount flink -n flink-session-cluster

  1. 执行以下命令做serviceaccount和角色的绑定:

kubectl create clusterrolebinding flink-role-binding-flink \

–clusterrole=edit \

–serviceaccount=flink-session-cluster:flink

  1. SSH登录部署了flink的CentOS7电脑,在flink目录下执行以下命令,即可创建名为session001的session cluster,其中-Dkubernetes.namespace参数指定了namespace,另外还指定了一个TaskManager实例使用一个CPU资源、4G内存、内含6个slot:

./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

  1. 如下图,控制台提示创建成功,并且红框中提示了flink web UI的访问地址是http://192.168.50.135:31753:

在这里插入图片描述

  1. 下载镜像和启动容器需要一定的时间,可以用kubectl get和kubectl describe命令观察对应的deployment和pod的状态:

Flink Native Kubernetes实战

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

  1. 控制台提示提交任务成功:

在这里插入图片描述

  1. 页面上也会同步显示增加了一个TaskManager,对应6个slot,已经用掉了一个:

在这里插入图片描述

  1. 再连续提交5次相同的任务,将此TaskManager的slot用光:

在这里插入图片描述

  1. 这时候再提交一次任务,按理来说应该增加一个TaskManager,可是页面如下图所示,TaskManager数量还是1,并没有增加,并且红框中显示新增的任务并没有正常运行起来:

在这里插入图片描述

  1. 在kubernetes环境查看pod情况,如下图红框所示,有个新建的pod状态是Pending,看来这就是第七个任务不能执行就是因为这个新建的pod无法正常工作导致的:

在这里插入图片描述

  1. 再看看这个namespace的事件通知,如下图红框所示,名为session001-taskmanager-1-2的pod有一条通知信息:由于CPU资源不足导致pod创建失败:

在这里插入图片描述

  1. 穷到没钱配置kubernetes环境,连一核CPU都凑不齐:

在这里插入图片描述

  1. 一时半会儿也找不出多余的CPU资源,唯一能做的就是降低TaskManager的CPU要求,刚才配置的是一个TaskManager使用一核CPU,我打算降低一半,即0.5核,这样就够两个TaskManager用了;

  2. 您可能会疑惑:怎么会有0.5个CPU这样的配置?这个和kubernetes的资源限制有关,kubernetes对pod的CPU限制粒度是千分之一个CPU,也是就是在kubernetes中,配置1000单位的CPU表示使用1核,我们配置0.5核,不过是配置了500单位而已(所以我还可以更穷…)

  3. 接下来的操作是先停掉当前的session cluster,再重新创建一个,创建的时候参数-Dkubernetes.taskmanager.cpu的值从1改为0.5

  4. 在CentOS7电脑上执行以下命令,将session cluster停掉,释放所有资源:

echo ‘stop’ | \

./bin/kubernetes-session.sh \

-Dkubernetes.namespace=flink-session-cluster \

-Dkubernetes.cluster-id=session001 \

-Dexecution.attached=true

  1. 控制台提示操作成功:

在这里插入图片描述

  1. 稍等一分钟左右,再去查看pod,发现已经全部不见了:

在这里插入图片描述

  1. 在CentOS7电脑的flink目录下,执行以下命令,和之前相比,唯一变化就是-Dkubernetes.taskmanager.cpu参数的值:

./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

  1. 从控制台提示得到新的flink web UI端口值,再访问网页,发现启动成功了:

在这里插入图片描述

  1. 像之前那样提交任务,连续提交7个,这一次很顺利,在提交了第七个任务后,新的TaskManager创建成功,7个任务都成功执行了:

在这里插入图片描述

  1. 用kubectl describe pod命令查看TaskManager的pod,如下图红框所示,可见该pod的CPU用量是500单位,符合之前的推测:

在这里插入图片描述

这里再提醒一下,降低CPU用量,意味着该pod中的进程获取的CPU执行时间被降低,会导致任务执行变慢,所以这种方法不可取,正确的思路是确保硬件资源能满足业务需求(像我这样穷到一核CPU都凑不齐的情况还是不多的…)

清理资源

如果已完成Flink Native Kubernetes体验,想彻底清理掉前面的所有资源,请按照以下步骤操作:

  1. 在web页面点击Cancel Job停止正在运行的任务,如下图红框:

在这里插入图片描述

  1. 在CentOS7电脑上停止session cluster:

echo ‘stop’ | \

./bin/kubernetes-session.sh \

-Dkubernetes.namespace=flink-session-cluster \

-Dkubernetes.cluster-id=session001 \

-Dexecution.attached=true

  1. 在kubernetes节点清理service、clusterrolebinding、serviceaccount、namespace:

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
1715675675568)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值