Flink Native Kubernetes 的部署demo

Flink Native Kubernetes 的部署
(还在不断学习~欢迎指正)

部署前的准备

1、需要确认k8s namespace及相关权限,这里采用单独的 flink 服务账户和namespace用来部署flink job

# 设置专属的namespace--flinkjob
kubectl create namespace flinkjob

# 创建一个新的 flink服务账户(flink)
kubectl create serviceaccount flink -n flinkjob

#  设置角色绑定
kubectl create clusterrolebinding flink-role-binding-flink --clusterrole=edit --serviceaccount=flinkjob:flink

2、下载对应版本的Flink压缩包并解压,下列操作都是在对应目标下指定的(也可以配置成环境变量)

Session 模式

Session mode是先创建一个集群,然后后续的提交都在这个集群中运行,会存在资源竞争的情况,并且不好单独管理各个任务资源的分配。
1、启动指令:
需要主要的是需要指定namespace 和 service-account 为之前设置的特定环境下,cluster-id用来标示集群名。其他参数可以选择在config.flink-conf.yaml文件中设定,也可以像下面进行特殊指定。相关参数参考

因为我这边采用的任务提交是在页面上进行提交,所有kubernetes.rest-service.exposed.type 设定的NodePort,可以通过访问创建好的指定端口进行访问、或者手动更改为特定端口(ps:我还不知道如何在启动前指定端口,所有就每次启动后再去改的端口号)

./bin/kubernetes-session.sh \
  -Dkubernetes.namespace=flinkjob \
  -Dkubernetes.jobmanager.service-account=flink \
  -Dkubernetes.cluster-id=session-track \
  -Dtaskmanager.memory.process.size=1024m \
  -Dkubernetes.jobmanager.cpu=0.2 \
  -Dkubernetes.taskmanager.cpu=0.2 \
  -Dtaskmanager.numberOfTaskSlots=1 \
  -Dkubernetes.rest-service.exposed.type=NodePort \
  -Dresourcemanager.taskmanager-timeout=3600000 

2、集群启动后

# 查看启动的pod
kubectl get pod -n flinkjob

# 查看启动的svc
kubectl get svc -n flinkjob

# 更改rest 端口号,更换里面NodePort参数
kubectl edit svc session-track-rest -n flinkjob

然后就可以在对应端口页面上进行任务提交和相关查看了

3、任务cance / savepoint/ 集群stop

# 任务cancel 并保存savepoint;127.0.0.1:30016 为集群对应地址(我这里在flink-config.yml中指定了savepoint的默认地址,所用就用-s 可以了)
./bin/flink cancel -m 127.0.0.1:30016 -s <job-id>

./bin/flink cancel -m 127.0.0.1:30016 -s /tmp/savepoint <job-id>

# 不保存savepoint
./bin/flink  cancel -m 127.0.0.1:30016 <job-id>

# 停止整个集群
echo 'stop' | ./bin/kubernetes-session.sh -Dkubernetes.cluster-id=session-track -Dkubernetes.namespace=flinkjob -Dexecution.attached=true

Application Mode部署模式

Application mode 是为每个应用程序创建一个集群,并在应用程序完成时销毁。
1、构造flink-job 镜像

Dockerfile

FROM flink:1.11.1-scala_2.12
RUN mkdir -p /flink/flink-jobs

COPY ./flink-jobs/target/*.jar /flink/flink-jobs/flink-jobs.jar

构建镜像,push

docker build -t ***/flink-jobs:git.$1 -f Dockerfile .
docker push ***/flink-jobs:git.$1

2、启动

./bin/flink run-application -p 1 -t kubernetes-application \
  --detached \
  --allowNonRestoredState \			# 从指定savepoint启动,不需要时可省略掉
  --fromSavepoint oss://flinkjob-state-prod/savepoint-f1e2d7-3108369d7445 \		# 从指定savepoint启动不需要时可省略掉
  -Dkubernetes.namespace=flinkjob \
  -Dkubernetes.jobmanager.service-account=flink \
  -Dkubernetes.cluster-id=flink-jobs \
  -Dkubernetes.container.image.pull-policy=Always \
  -Dkubernetes.container.image=*****/flink-jobs:git.c2f4bba9ffbc26a077ae73d8508fcce0e05752ed \		# 对应镜像地址
  -Djobmanager.memory.process.size=1024m \
  -Dtaskmanager.memory.process.size=1024m \
  -Dkubernetes.jobmanager.cpu=0.2 \
  -Dkubernetes.taskmanager.cpu=0.1 \
  -Dtaskmanager.numberOfTaskSlots=1 \
  -Dkubernetes.rest-service.exposed.type=NodePort \
 local:///flink/flink-jobs/flink-jobs.jar		# 镜像需要执行的jar地址

3、job savepoint / stop

# 查看当前集群任务id
./bin/flink list --target kubernetes-application -Dkubernetes.cluster-id=flink-jobs -Dkubernetes.namespace=flinkjob

# stop 任务并进行状态savepoint
./bin/flink stop --savepointPath --target kubernetes-application -Dkubernetes.cluster-id=flink-production -Dkubernetes.namespace=flinkjob <job-id>

# stop集
echo 'stop' | ./bin/kubernetes-session.sh -Dkubernetes.cluster-id=flink-production -Dkubernetes.namespace=flinkjob -Dexecution.attached=true
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值