You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-zh@flink.apache.org by Yang Wang <da...@gmail.com> on 2022/01/10 07:17:15 UTC

Re: Flink on Native K8s 部署模式下Tm和Jm容器配置Hosts问题

抱歉回复晚了

在实践中,Flink on Native K8s的部署方式需要一个机器同时拥有k8s和flink客户端才能很好的完成部署工作。

Flink client并不依赖K8s客户端的,只要有对应的kube config就可以了


你说的两种方法都是可以的,而且也没有本质上的差异。都是把Flink client运行在集群内来完成提交,第一种是常驻的,第二种是动态起的 。
如果作业使用的pod template都是一样的,那就可以自己保存在ConfigMap中然后挂载给Flink client pod就可以了。
如果每个作业使用的都不同,就只能按照你说的方法了


另外,还有一个可行的思路是开发一个你们自己的K8s operator,然后通过CR的方式进行传递。可以参考这个简单的demo[1]

[1]. https://github.com/wangyang0918/flink-native-k8s-operator


Best,
Yang



JianWen Huang <ji...@gmail.com> 于2021年12月30日周四 00:01写道:

> 明白了。感谢。
> 在实践中,Flink on Native K8s的部署方式需要一个机器同时拥有k8s和flink客户端才能很好的完成部署工作。
> 请问在工程实践上有什么比较好的持续集成提交方式。我目前想到两种。
> 1.在k8s 启动一个带flink客户端的容器。在容器内部进行命令行提交。
> 2.在k8s以带Flink客户端的镜像启动一个Job类型作业,然后在作业运行时进行命令提交。
>
> 第1种对于kubernetes.pod-template-file的提交需要把kubernetes.pod-template-file中的模板文件cp到容器中。
> 第2种需要提前把kubernetes.pod-template-file文件打到带Flink客户端的镜像中。
> 请问您有更好的方法吗。
>
> Yang Wang <da...@gmail.com> 于2021年12月26日周日 16:39写道:
> >
> > 拿如下提交命令举例,pod-temlate.yaml是在和运行run-application这个命令相同的机器上面。Flink
> > client会自动把这个文件存放到ConfigMap,然后挂载给JM的
> > user jar(StateMachineExample.jar)是需要在镜像里面
> >
> > 注意:一般需要在镜像里面的都会使用local://这个schema,本地文件则不需要
> >
> > bin/flink run-application -t kubernetes-application \
> > -Dkubernetes.cluster-id=my-flink-cluster \
> > -Dkubernetes.pod-template-file=/path/of/pod-template.yaml \
> > local:///opt/flink/examples/streaming/StateMachineExample.jar
> >
> >
> >
> > 如果还是不明白,看一下这个测试的实现就清楚了[1]
> >
> > [1].
> >
> https://github.com/apache/flink/blob/master/flink-end-to-end-tests/test-scripts/test_kubernetes_application_ha.sh
> >
> >
> > Best,
> > Yang
> >
> > 黄剑文 <ji...@gmail.com> 于2021年12月24日周五 17:57写道:
> >
> > > client-local的文件,不是镜像里面的。这句话该怎么理解?因为run-application
> > >
> > >
> 模式下是需要将用户jar包跟flink标准镜像打到一起形成自己镜像然后进行提交。那么这个文件该放在哪个地方?目前我指定路径发现读的是镜像包中的路径。如/opt/my-pod-template。读的是镜像中/opt/my-pod-template文件。
> > >
> > > 谢谢您的回复。
> > >
> > > Yang Wang <da...@gmail.com> 于2021年12月24日周五 11:18写道:
> > > >
> > > > 使用flink
> > > >
> run-application来提交任务时,kubernetes.pod-template-file需要指定的是一个client-local的文件
> > > > 不是镜像里面的
> > > >
> > > > Best,
> > > > Yang
> > > >
> > > > hjw <10...@qq.com.invalid> 于2021年12月23日周四 22:21写道:
> > > >
> > > > > Flink版本:1.13Flink基于Native K8s
> > > > >
> > >
> 部署模式下,因为有场景需要,jobmanager和taskmanager需要配置一些特定的hosts,查阅官方文档后发现可以支持自己指定一些pod-Template来指定jm和tm的一些K8s部署行为,但这些pod-Template需要打在提交客户端镜像里。
> > > > >
> > > > >
> > >
> 问题是jm和tm在不同环境下需要配置的Hosts并不相同。如开发环境,测试环境,生产环境。这意味着不同环境需维护不同的镜像。请问各位在使用上有什么好方法去解决呢。谢谢。
> > >
>

Re: Flink on Native K8s 部署模式下Tm和Jm容器配置Hosts问题

Posted by Yang Wang <da...@gmail.com>.
你可以通过环境变量或者flink config option的方式来指定kube config

export KUBECONFIG=/path/of/kube.config

或者

-Dkubernetes.config.file=/path/of/kube.config

具体的代码在这里[1]

[1].
https://github.com/apache/flink/blob/master/flink-kubernetes/src/main/java/org/apache/flink/kubernetes/kubeclient/FlinkKubeClientFactory.java#L58


Best,
Yang

JianWen Huang <ji...@gmail.com> 于2022年1月10日周一 22:04写道:

> 首先感谢您答复。我也想到了采用第二种JOB动态+ConfigMap挂到Flink Client Pod中,然后命令提交。
> 另外您和官方文档都提到kube config的配置。请问flink client在源码实现中是在哪个地方去解析读取kube config的?
>
> Yang Wang <da...@gmail.com> 于2022年1月10日周一 15:17写道:
> >
> > 抱歉回复晚了
> >
> > 在实践中,Flink on Native K8s的部署方式需要一个机器同时拥有k8s和flink客户端才能很好的完成部署工作。
> >
> > Flink client并不依赖K8s客户端的,只要有对应的kube config就可以了
> >
> >
> > 你说的两种方法都是可以的,而且也没有本质上的差异。都是把Flink client运行在集群内来完成提交,第一种是常驻的,第二种是动态起的 。
> > 如果作业使用的pod template都是一样的,那就可以自己保存在ConfigMap中然后挂载给Flink client pod就可以了。
> > 如果每个作业使用的都不同,就只能按照你说的方法了
> >
> >
> > 另外,还有一个可行的思路是开发一个你们自己的K8s operator,然后通过CR的方式进行传递。可以参考这个简单的demo[1]
> >
> > [1]. https://github.com/wangyang0918/flink-native-k8s-operator
> >
> >
> > Best,
> > Yang
> >
> >
> >
> > JianWen Huang <ji...@gmail.com> 于2021年12月30日周四 00:01写道:
> >
> > > 明白了。感谢。
> > > 在实践中,Flink on Native K8s的部署方式需要一个机器同时拥有k8s和flink客户端才能很好的完成部署工作。
> > > 请问在工程实践上有什么比较好的持续集成提交方式。我目前想到两种。
> > > 1.在k8s 启动一个带flink客户端的容器。在容器内部进行命令行提交。
> > > 2.在k8s以带Flink客户端的镜像启动一个Job类型作业,然后在作业运行时进行命令提交。
> > >
> > >
> 第1种对于kubernetes.pod-template-file的提交需要把kubernetes.pod-template-file中的模板文件cp到容器中。
> > > 第2种需要提前把kubernetes.pod-template-file文件打到带Flink客户端的镜像中。
> > > 请问您有更好的方法吗。
> > >
> > > Yang Wang <da...@gmail.com> 于2021年12月26日周日 16:39写道:
> > > >
> > > > 拿如下提交命令举例,pod-temlate.yaml是在和运行run-application这个命令相同的机器上面。Flink
> > > > client会自动把这个文件存放到ConfigMap,然后挂载给JM的
> > > > user jar(StateMachineExample.jar)是需要在镜像里面
> > > >
> > > > 注意:一般需要在镜像里面的都会使用local://这个schema,本地文件则不需要
> > > >
> > > > bin/flink run-application -t kubernetes-application \
> > > > -Dkubernetes.cluster-id=my-flink-cluster \
> > > > -Dkubernetes.pod-template-file=/path/of/pod-template.yaml \
> > > > local:///opt/flink/examples/streaming/StateMachineExample.jar
> > > >
> > > >
> > > >
> > > > 如果还是不明白,看一下这个测试的实现就清楚了[1]
> > > >
> > > > [1].
> > > >
> > >
> https://github.com/apache/flink/blob/master/flink-end-to-end-tests/test-scripts/test_kubernetes_application_ha.sh
> > > >
> > > >
> > > > Best,
> > > > Yang
> > > >
> > > > 黄剑文 <ji...@gmail.com> 于2021年12月24日周五 17:57写道:
> > > >
> > > > > client-local的文件,不是镜像里面的。这句话该怎么理解?因为run-application
> > > > >
> > > > >
> > >
> 模式下是需要将用户jar包跟flink标准镜像打到一起形成自己镜像然后进行提交。那么这个文件该放在哪个地方?目前我指定路径发现读的是镜像包中的路径。如/opt/my-pod-template。读的是镜像中/opt/my-pod-template文件。
> > > > >
> > > > > 谢谢您的回复。
> > > > >
> > > > > Yang Wang <da...@gmail.com> 于2021年12月24日周五 11:18写道:
> > > > > >
> > > > > > 使用flink
> > > > > >
> > >
> run-application来提交任务时,kubernetes.pod-template-file需要指定的是一个client-local的文件
> > > > > > 不是镜像里面的
> > > > > >
> > > > > > Best,
> > > > > > Yang
> > > > > >
> > > > > > hjw <10...@qq.com.invalid> 于2021年12月23日周四 22:21写道:
> > > > > >
> > > > > > > Flink版本:1.13Flink基于Native K8s
> > > > > > >
> > > > >
> > >
> 部署模式下,因为有场景需要,jobmanager和taskmanager需要配置一些特定的hosts,查阅官方文档后发现可以支持自己指定一些pod-Template来指定jm和tm的一些K8s部署行为,但这些pod-Template需要打在提交客户端镜像里。
> > > > > > >
> > > > > > >
> > > > >
> > >
> 问题是jm和tm在不同环境下需要配置的Hosts并不相同。如开发环境,测试环境,生产环境。这意味着不同环境需维护不同的镜像。请问各位在使用上有什么好方法去解决呢。谢谢。
> > > > >
> > >
>

Re: Flink on Native K8s 部署模式下Tm和Jm容器配置Hosts问题

Posted by JianWen Huang <ji...@gmail.com>.
首先感谢您答复。我也想到了采用第二种JOB动态+ConfigMap挂到Flink Client Pod中,然后命令提交。
另外您和官方文档都提到kube config的配置。请问flink client在源码实现中是在哪个地方去解析读取kube config的?

Yang Wang <da...@gmail.com> 于2022年1月10日周一 15:17写道:
>
> 抱歉回复晚了
>
> 在实践中,Flink on Native K8s的部署方式需要一个机器同时拥有k8s和flink客户端才能很好的完成部署工作。
>
> Flink client并不依赖K8s客户端的,只要有对应的kube config就可以了
>
>
> 你说的两种方法都是可以的,而且也没有本质上的差异。都是把Flink client运行在集群内来完成提交,第一种是常驻的,第二种是动态起的 。
> 如果作业使用的pod template都是一样的,那就可以自己保存在ConfigMap中然后挂载给Flink client pod就可以了。
> 如果每个作业使用的都不同,就只能按照你说的方法了
>
>
> 另外,还有一个可行的思路是开发一个你们自己的K8s operator,然后通过CR的方式进行传递。可以参考这个简单的demo[1]
>
> [1]. https://github.com/wangyang0918/flink-native-k8s-operator
>
>
> Best,
> Yang
>
>
>
> JianWen Huang <ji...@gmail.com> 于2021年12月30日周四 00:01写道:
>
> > 明白了。感谢。
> > 在实践中,Flink on Native K8s的部署方式需要一个机器同时拥有k8s和flink客户端才能很好的完成部署工作。
> > 请问在工程实践上有什么比较好的持续集成提交方式。我目前想到两种。
> > 1.在k8s 启动一个带flink客户端的容器。在容器内部进行命令行提交。
> > 2.在k8s以带Flink客户端的镜像启动一个Job类型作业,然后在作业运行时进行命令提交。
> >
> > 第1种对于kubernetes.pod-template-file的提交需要把kubernetes.pod-template-file中的模板文件cp到容器中。
> > 第2种需要提前把kubernetes.pod-template-file文件打到带Flink客户端的镜像中。
> > 请问您有更好的方法吗。
> >
> > Yang Wang <da...@gmail.com> 于2021年12月26日周日 16:39写道:
> > >
> > > 拿如下提交命令举例,pod-temlate.yaml是在和运行run-application这个命令相同的机器上面。Flink
> > > client会自动把这个文件存放到ConfigMap,然后挂载给JM的
> > > user jar(StateMachineExample.jar)是需要在镜像里面
> > >
> > > 注意:一般需要在镜像里面的都会使用local://这个schema,本地文件则不需要
> > >
> > > bin/flink run-application -t kubernetes-application \
> > > -Dkubernetes.cluster-id=my-flink-cluster \
> > > -Dkubernetes.pod-template-file=/path/of/pod-template.yaml \
> > > local:///opt/flink/examples/streaming/StateMachineExample.jar
> > >
> > >
> > >
> > > 如果还是不明白,看一下这个测试的实现就清楚了[1]
> > >
> > > [1].
> > >
> > https://github.com/apache/flink/blob/master/flink-end-to-end-tests/test-scripts/test_kubernetes_application_ha.sh
> > >
> > >
> > > Best,
> > > Yang
> > >
> > > 黄剑文 <ji...@gmail.com> 于2021年12月24日周五 17:57写道:
> > >
> > > > client-local的文件,不是镜像里面的。这句话该怎么理解?因为run-application
> > > >
> > > >
> > 模式下是需要将用户jar包跟flink标准镜像打到一起形成自己镜像然后进行提交。那么这个文件该放在哪个地方?目前我指定路径发现读的是镜像包中的路径。如/opt/my-pod-template。读的是镜像中/opt/my-pod-template文件。
> > > >
> > > > 谢谢您的回复。
> > > >
> > > > Yang Wang <da...@gmail.com> 于2021年12月24日周五 11:18写道:
> > > > >
> > > > > 使用flink
> > > > >
> > run-application来提交任务时,kubernetes.pod-template-file需要指定的是一个client-local的文件
> > > > > 不是镜像里面的
> > > > >
> > > > > Best,
> > > > > Yang
> > > > >
> > > > > hjw <10...@qq.com.invalid> 于2021年12月23日周四 22:21写道:
> > > > >
> > > > > > Flink版本:1.13Flink基于Native K8s
> > > > > >
> > > >
> > 部署模式下,因为有场景需要,jobmanager和taskmanager需要配置一些特定的hosts,查阅官方文档后发现可以支持自己指定一些pod-Template来指定jm和tm的一些K8s部署行为,但这些pod-Template需要打在提交客户端镜像里。
> > > > > >
> > > > > >
> > > >
> > 问题是jm和tm在不同环境下需要配置的Hosts并不相同。如开发环境,测试环境,生产环境。这意味着不同环境需维护不同的镜像。请问各位在使用上有什么好方法去解决呢。谢谢。
> > > >
> >