Application Mode job on K8S集群,无法缩容问题

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

Application Mode job on K8S集群,无法缩容问题

lichunguang
Flink1.11.1版本job以Application
Mode在K8S集群上运行,TaskManager都是申请的单独pod,分配在不同的node上,导致资源使用较低时,K8S集群无法进行自动缩容操作,浪费资源。

1、TaskManager申请的单独pod逻辑
org.apache.flink.kubernetes.KubernetesResourceManager.requestKubernetesPod()

2、K8S集群自动缩容条件,如AWS集群
<http://apache-flink.147419.n8.nabble.com/file/t1176/22.jpg>

3、资源使用低的节点无法调度
<http://apache-flink.147419.n8.nabble.com/file/t1176/33.jpg>


大家有关注这个问题吗?可以讨论下



--
Sent from: http://apache-flink.147419.n8.nabble.com/
Reply | Threaded
Open this post in threaded view
|

Re: Application Mode job on K8S集群,无法缩容问题

lichunguang
现在这种模式,可以实现每个pod可以配置不同的配置,如CPU、MEM。
但是整体的资源配置是相同的,是否使用statefulset模式启动TM pod更合适呢?



--
Sent from: http://apache-flink.147419.n8.nabble.com/
Reply | Threaded
Open this post in threaded view
|

Re: Application Mode job on K8S集群,无法缩容问题

Yang Wang
没有特别理解清楚你的意思,你是希望让K8s来完成自动伸缩?

Native Flink on K8s的基本理念是由Flink的ResourceManager向K8s主动申请/释放TaskManager Pod,
如果一个TaskManager处于idle状态,那就会被自动释放。这样是更加灵活的,TaskManager的生命周期
交给Flink ResourceManager来进行控制。而且以后可能会有TaskManager是不同规格的情况,所以直接
用Pod会更加合适一些。

你如果是想要根据cpu、内存负载来调整TM数量,那可以使用Standalone Flink on K8s[2]的方式。这种情况
下TaskManager是用Deployment来管理,替换成StatefulSet也是可以的。

[1].
https://ci.apache.org/projects/flink/flink-docs-master/deployment/resource-providers/standalone/kubernetes.html

Best,
Yang


lichunguang <[hidden email]> 于2020年12月15日周二 下午9:44写道:

> 现在这种模式,可以实现每个pod可以配置不同的配置,如CPU、MEM。
> 但是整体的资源配置是相同的,是否使用statefulset模式启动TM pod更合适呢?
>
>
>
> --
> Sent from: http://apache-flink.147419.n8.nabble.com/
Reply | Threaded
Open this post in threaded view
|

Re: Application Mode job on K8S集群,无法缩容问题

lichunguang
Yang Wang你好:
我想表达的意思是:
  Native Flink on K8s采用单Pod的申请资源的方式,和K8s自动伸缩机制有些冲突。

原因:
比如job比较多时,各node负载都比较高;而剩余job比较少时,每个node只有少量pod,但因为【Pods that are not backed
by a controller object】,没法驱逐资源利用率最低的node,导致整体利用率较低。

What types of pods can prevent CA from removing a node?
https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/FAQ.md#what-types-of-pods-can-prevent-ca-from-removing-a-node



--
Sent from: http://apache-flink.147419.n8.nabble.com/
Reply | Threaded
Open this post in threaded view
|

Re: Application Mode job on K8S集群,无法缩容问题

Yang Wang
是的,如果CA不能直接释放Pod的话,那是会导致它没有办法被驱逐

Flink TaskManager Pod的生命周期都是交给JobManager管理的,并且不会重启,挂了之后就会申请新的
和CA结合起来,是会有你所说的限制。不过如果能够带上annotation标识pod可以被驱逐的话,不清楚CA是否可以work

Best,
Yang

lichunguang <[hidden email]> 于2020年12月21日周一 下午4:16写道:

> Yang Wang你好:
> 我想表达的意思是:
>   Native Flink on K8s采用单Pod的申请资源的方式,和K8s自动伸缩机制有些冲突。
>
> 原因:
> 比如job比较多时,各node负载都比较高;而剩余job比较少时,每个node只有少量pod,但因为【Pods that are not backed
> by a controller object】,没法驱逐资源利用率最低的node,导致整体利用率较低。
>
> What types of pods can prevent CA from removing a node?
>
> https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/FAQ.md#what-types-of-pods-can-prevent-ca-from-removing-a-node
>
>
>
> --
> Sent from: http://apache-flink.147419.n8.nabble.com/
>