flink on k8s (flink-1.13.0 最新版本 application 部署方式)

run-application模式

(此方式一劳永逸,节省资源+数据隔离,集群之间不会相互影响)

①,将自己的项目jar包 和 flink镜像 打在一起生成新的镜像

(默认jdk是1.8,如果有jdk版本要求可将jdk的home目录一起打进镜像,然后通过配置文件内添加参数 env.java.home: /opt/flink/jdk-11.0.10+0 来指定jdk )


 Dockerfile:
FROM flink
RUN mkdir -p /opt/flink/usrlib
COPY matest.jar /opt/flink/usrlib/matest.jar
COPY jdk-11.0.10+0 /opt/flink/jdk-11.0.10+0
        
//RUN echo "env.java.home=/opt/flink/jdk-11.0.10+0" > /opt/flink/conf/flink-conf.yaml

②,构建镜像

 docker build -t wordcount:1.0(你的镜像自定义名字) ./

③,如果有本地仓库的push到本地仓库,这样其他kubernetes的节点就不需要手动拷贝镜像了

docker tag wordcount:1.0 192.168.xx.xx:30002/gtcom/wordcount:1.0
docker push 192.168.xx.xx:30002/gtcom/wordcount:1.0

④,创建kubernets命名空间

  kubectl create namespace flink-application-cluster

⑤,创建该空间的用户 flink (自定义)

  kubectl create serviceaccount flink -n flink-application-cluster

⑥,给该用户赋权
(不创建用户和赋权启动时候会报 "权限"错)

kubectl create clusterrolebinding flink-role-binding-flink \
        --clusterrole=edit \
        --serviceaccount=flink-application-cluster:flink

⑦,到你服务器flink的home目录下,用flink命令 启动集群

bin/flink  run-application --target kubernetes-application  \
       -Dkubernetes.cluster-id=gtcom-application-cluster(自定义任务名称,否则会自动创建)  \
       -Dkubernetes.namespace=flink-application-cluster  \
       -Dkubernetes.service-account=flink  \
       -Dkubernetes.container.image= 192.168.xx.xx:30002/gtcom/wordcount:1.0  \
       local:///opt/flink/usrlib/gxxxxxxxx-2.3.0.jar  --driverType AccessGovern --flow news --topicName flink-index --kafkaParallelism 3 --sinkParallelism 3

(从“–driverType” 开始是你的jar包需要传递的一些自定义参数)

图片

Alt

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

Logo

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

更多推荐