背景

随着业务的增长,部署在kubernetes内服务对应的pod数量也在持续增长。而我们发布使用的是滚动发布策略,同时使用了karpenter实现了集群node节点的自动扩缩容。每次发布过程中,karpenter都会重新申请机器来完成pod部署,单个node申请耗时约30s左右,这也导致了我们每次发布时间都在30min以上。 

发布时间过长,一方面影响线上服务稳定性,一方面造成研发需要长时间的等待发布完成,导致工作效率低下。


解决方案

通过调研,我们发现了可以结合kubernetes 特性之pod 优先级,来实现发布之前,提前让karpenter申请node节点,来实现节点的预热,让发布时,业务pod能快速抢占节点进行部署。 

具体方案如下:

1、准备一个低优先级deployment A ,cpu、mem和业务服务规格一致,配置PriorityClass 值为-1。

2、在业务服务发布之前,将A进行扩容到目标数量,从而触发karpenter集群的node扩容。

3、发布业务服务时,新创建的业务pod,会被调度器调度到 A服务的node上,强制抢占A服务的pod,让A服务pod 重建。

4、发布完成后,回收A 服务资源。 


至此,我们已经完成了发布预热。