大型Kubernetes集群的资源编排优化

2023-06-08 0 1,092

大背景

云原生植物这个词总之我们如果不孤单了,罐子是云原生植物的重要终极目标,而Kubernetes历经这一两年的加速插值发展早已成为罐子选曲的基克维泽区了。愈来愈多的子公司无论是大子公司却是中小型子公司早已在他们的生产自然环境中开始采用Kubernetes, 原生植物Kubernetes虽然早已提供了两套十分完备的天然资源运维及管理计划但在前述采用操作过程中却是会碰到许多难题:

软件产业结点阻抗不平衡的难题销售业务建立Pod天然资源提出申请片面的难题业务如何更加速的提速难题多租客天然资源抢占市场难题

那些难题可能是我们在采用Kubernetes的操作过程中如果会时常碰到的几个较为众所周知的天然资源难题,接下去他们将分别如是说在百度外部是如果化解和强化那些难题的。

软件产业结点负载不平衡的难题

他们知道Kubernetes原生植物的运维器多是如前所述Pod Request的天然资源来展开运维的,没有依照Node现阶段和往后一两年的真实世界阻抗情形展开有关运维的重大决策。这样就会引致两个难题在软件产业内有些结点的余下可运维天然资源较为多但真实世界阻抗却较为高,而另一些结点的余下可运维天然资源较为少但真实世界阻抗却较为低, 但这时Kube-scheduler会优先优先选择将Pod运维到余下天然资源较为多的结点上(依照LeastRequestedPriority思路)。

大型Kubernetes集群的资源编排优化

示意图,很或许运维到Node1是两个更佳的优先选择。为的是将Node的真实世界阻抗情形加到运维思路里,防止将Pod运维到高阻抗的Node上,同时保证软件产业中各Node的真实世界阻抗尽可能平衡,他们扩充了Kube-scheduler实现了两个如前所述Node真实世界阻抗展开初选和混合型的静态运维器(Dynamic-scheduler)。

大型Kubernetes集群的资源编排优化

Dynamic-scheduler在运维的时候须要各Node上的阻抗统计数据,为的是不堵塞静态运维器的运维那些阻抗统计数据,须要有组件不定期去搜集和历史记录。如下表所示图右图node-annotator会不定期搜集各结点往后5两分钟,1半小时,24半小时等有关阻抗统计数据并历史记录

大型Kubernetes集群的资源编排优化

为的是防止Pod运维到高阻抗的Node上,须要先通过初选把一些高阻抗的Node过滤掉,如下表所示图右图(其中的过滤思路和比例是可以静态配置的,可以依照软件产业的前述情形展开调整)Node2往后5两分钟的阻抗,Node3往后1半小时的阻抗多超过了对应的域值所以不会参与接下去的混合型阶段。

大型Kubernetes集群的资源编排优化

同时为的是使软件产业各结点的阻抗尽可能平衡,Dynamic-scheduler会依照Node阻抗统计数据展开打分, 阻抗越低打分越高。如下表所示图右图Node1的打分最高将会被优先优先选择运维(那些打分思路和权重也是可以静态配置的)。

大型Kubernetes集群的资源编排优化

Dynamic-scheduler只能保证在运维的那个时刻会将Pod运维到低阻抗的Node上,但随着销售业务的高峰期不同Pod在运维之后这个Node可能会出现高阻抗。为的是防止由于Node的高阻抗对销售业务产生影响他们在Dynamic-scheduler之外还实现了两个Descheduler,它会监控Node的高阻抗情形将一些配置了高阻抗迁移的Pod迁移到阻抗较为低的Node上。

大型Kubernetes集群的资源编排优化

销售业务如何更加速的提速难题

销售业务上云的两个重要优势就是在云上能实现更好的弹性伸缩,Kubernetes原生植物也提供了这种横向提速的弹性伸缩能力(HPA)。但官方的这个HPA Controller在实现的时候用的是两个Gorountine来处理整个软件产业的所有HPA的计算和同步难题,在软件产业配置的HPA较为多的时候可能会引致销售业务提速不及时的难题,其次官方HPA Controller不支持为每个HPA展开单独的个性化配置。

大型Kubernetes集群的资源编排优化

为的是强化HPA Controller的性能和个性化配置难题,他们把HPA Controller单独抽离出来单独部署。同时为每两个HPA单独配置两个Gorountine,并且每一个HPA多可以依照销售业务的须要展开单独的配置。

大型Kubernetes集群的资源编排优化

其实仅仅强化HPA Controller却是不能满足一些销售业务在销售业务高峰时候的一些需求,比如在销售业务做活动的时候希望在流量高峰期之前就能够把销售业务提速好。这个时候他们就须要两个定时HPA的功能,为此他们定义了两个CronHPA的CRD和CronHPA Operator。CronHPA会在销售业务定义的时间展开提速和缩容,同时还能和HPA一起配合工作。

大型Kubernetes集群的资源编排优化

销售业务建立Pod天然资源提出申请片面的难题

通过Dynamic-scheduler和Descheduler来保证软件产业各结点的阻抗平衡难题。但我可能会面临另两个较为头疼的难题就是软件产业的整体阻抗较为低但可运维天然资源早已没有了,从而引致Pod Pending。这个往往是由于Pod 天然资源提出申请片面或者销售业务高峰时段不同所引致的,那他们是否可以依照Node阻抗情形对Node天然资源展开一定比例的超卖呢。于是他们通过Kubernetes的MutatingWebhook来截获并修改Node的可运维天然资源量的方式来对Node天然资源展开超卖。

大型Kubernetes集群的资源编排优化

这里须要注意的是结点的超卖控制须要较为灵活不能一概而论,比如阻抗高的Node超卖比例如果要设置较为小或者不能设置超卖。

多租客天然资源抢占市场难题

当平台用户增多的时候,如果对天然资源不做任何控制那么各租客之间天然资源抢占市场是不可防止的。Kubernetes原生植物提供的ResourceQuota可以提供Namespace级别对天然资源配额限制。但百度外部天然资源预算管理通常是按产品维度,而两个产品可能会包括许多Namespace的或许ResourceQuota不太适合这种场景。其次ResourceQuota只有天然资源限制功能不能做天然资源预留,当销售业务要做活动的时候不能保证活动期间有足够的天然资源可以采用。

大型Kubernetes集群的资源编排优化

为的是实现两个产品维度且有天然资源预留功能的配额管理功能,他们设计了两个DynamicQuota的CRD来管理产品在各软件产业的配额。如下表所示图右图产品2在各软件产业所占的配额天然资源其它产品多无法采用。

大型Kubernetes集群的资源编排优化

如果两个产品占用配额一直不采用就可能会引致平台天然资源的浪费,因此他们在产品配额预留的基础上提供了在不同产品间配额借调的功能。如下表所示图右图产品1暂时不用的配额可以借调给产品2临时采用。

大型Kubernetes集群的资源编排优化

当平台有多软件产业的时候,产品配额须要如何分配。为的是简化配下发操作,如下表所示图右图管理员在下发产品配额的时候只需配置两个该产品的配额总量,配额下发组件会依照产品目前在各软件产业的采用情形按比例分配到各个软件产业。

大型Kubernetes集群的资源编排优化

产品在各软件产业的天然资源采用情形是会时刻变化的,所以产品在各软件产业配额也须要依照销售业务的采用情形展开静态的调整。如下表所示图右图产品在软件产业2中的配额早已快用完的时候,配额调整组件会静态的把配额从采用不多的软件产业1和软件产业3调到软件产业2。

大型Kubernetes集群的资源编排优化

在线销售业务和离线销售业务混合部署是云平台的发展趋势,所以他们在设计配额管理的时候也把在离线配额控制考虑进去了。如下表所示图右图他们在软件产业维度加了两个离线配额控制,两个软件产业的离线销售业务天然资源采用不能超过该软件产业总天然资源的30%(这个比例可以依照前述情形展开调整)。其次两个产品的在线销售业务和离线销售业务配额之和又不能超过产品在该软件产业的总配额。

大型Kubernetes集群的资源编排优化

总结

上面提到的计划只是简单说了一下他们的一些解决难题的思路,其实在真正运作的操作过程中还有许多细节须要考虑和强化。比如:上面提到的产品配额管理如果两个产品的配额不足了,这时销售业务有高峰须要展开HPA提速,这时配额管理组件须要对这种提速强化并放行。

本文作者:百度云

原文地址:https://segmentfault.com/a/1190000023690280

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务