前提条件

k8s >=1.9

kubectl具有创建pod的权限

k8s启用了DNS

service account有创建,删除pod的权限

flink版本1.16.1

flink on k8s的类型

Application Mode

其它的部署模式,在启动时,需要在客户端执行任务的main方法,生成JobGraph,并将相应的依赖和JobGraph上传到集群,在有多个用户同时添加的场景下,会因为下载依赖和上传文件而占用大量的网络带宽,执行main方法导致cpu飙升;Application Mode在提交时,会先创建集群,在集群中由jobmanager执行main方法,从而避免上述的问题,当任务执行完成后,会主动释放资源。相比与 Per-job模式,Application Mode支持提交多个任务,即在代码中多次执行execute或executeAsync方法,但在同时执行多个任务的时候,不支持高可用。

Session Mode

先创建一个集群,每次任务提交时都在该集群中执行,集群的资源在创建时指定,后期不可在动态扩容了,这种模式的好处是,在任务提交时,不需要在去申请资源而耗费时间,直接使用集群中的资源即可。坏处是一旦集群中有一个任务失败,会导致集群中正在运行的所有任务都失败。

Application Mode部署

打包镜像

Application Mode在部署时,需要作业的jar包位于/opt/flink/usrlib目录下,因此需要在flink官方的镜像上,将自己的jar包添加进去。

ROM  flink:1.16.1-scala_2.12-java8
RUN mkdir -p /opt/flink/usrlib
COPY ./flink-demo-1.16.1.jar  /opt/flink/usrlib/
提交任务
./bin/flink run-application \
    --target kubernetes-application \
    -Dkubernetes.cluster-id=my-first-application-cluster \
    -Dkubernetes.container.image=flink:1.16.1 \
    -Dkubernetes.namespace=spark \
    -Dkubernetes.service-account=spark-serviceaccount \
    -c flink.demo.wordcount.WordCount \
    local:///opt/flink/usrlib/flink-demo-1.16.1.jar 

minikube相关配置参考:https://blog.csdn.net/Andrew_2018/article/details/129194898

参考文章

1.https://nightlies.apache.org/flink/flink-docs-release-1.16/docs/deployment/overview/#application-mode

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐