1. EKS 弹性伸缩支持大Pod算法
1.1. 基本思想:
对大Pod和小Pod进行区分,大pod运行在有“欢迎大Pod运行”的标签的主机上,小pod运行在“欢迎小Pod运行”的主机上。
弹性自动添加的机器最开始没有标签。通过一个定时任务来进行“欢迎大Pod运行”和“欢迎小Pod运行”标签的管理。
标签添加规则:
每分钟检测一次,如果发现主机上没有标签,在这个情况下,检查主机上的pod,如果发现大pod,打上“欢迎大Pod运行”标签。
如果发现的都是小pod,打上“欢迎小Pod运行”运行的标签。
标签去除规则:
每分钟扫描“欢迎小Pod运行”的主机,如果全部资源可以释放3个主机,进行碎片整理。
碎片整理步骤: 去掉主机标签,进行驱逐操作。 【5分钟一次或者10分钟。】
同时扫描“欢迎大pod运行”的主机,如果主机上没有pod,把标签删除【T1】
注: 大Pod是使用资源多的,如当前的PHP服务, 小Pod是使用资源少的。
这里说的pod只包括应用的pod,k8s系统默认的pod忽略。
大pod从request获取
1.2. 使用需要的操作:
1.在大pod 上配置软亲和性“尽量到有欢迎大Pod运行”的主机上执行,同时尽量不在“欢迎小pod运行”的主机上执行。
2.在小pod上配置软亲和性“尽量到有欢迎小Pod运行”的主机上执行,同时尽量不在“欢迎大pod运行”的主机上执行。
3.保持原来的两个lambda的弹性伸缩逻辑。
4.运行上述的算法。
1.3. 几个场景描述算法的运作逻辑:
1. 刚启动时:
刚启动时,所有主机都没有标签,pod和主机的关系有四种,A: 主机上只执行了大pod,B: 主机上只执行了小pod,
C:主机上执行了大pod和小pod,D:主机空闲。
通过上述算法执行后,会给A和C类型的主机打上“欢迎大Pod运行”标签,会给B类型主机打上“欢迎小Pod运行”标签,
D类主机不打标签。
在pod滚动更新的过程中,C类主机会慢慢消失,只剩下A、B、D种类型的情况。
2.弹性扩展主机的情况下:
主机扩展是因为要运行更多的pod,主机刚开机的时候是不知道是因为小pod资源不足还是大pod资源不足而引起的扩展。
大pod变多导致的扩展:
因为小pod还可以在原来的打有“ 欢迎小Pod运行”的主机上还足够运行,新开的机器,小pod不会运行到上面,也就不会
因为小pod占用了新机器的部分资源而使得新开的机器运行不了大pod。
大pod将能够正常的运行在新开的机器上,同时本算法会在一分钟后给他打上“欢迎大Pod运行”标签。
小pod变多导致的扩展:
小pod在“ 欢迎小Pod运行”的主机上没有足够的资源,小pod的数量变多的情况下,会自动的使用新开的机器,因为上面没有任何标签。
本算法随后会给小pod新占用的机器打上“欢迎小Pod运行”标签。
小pod随后会涌入被第一个小pod占领的主机。不会无限的污染新开的空闲主机。
3.弹性收缩的情况
如果是大pod数量变少导致的收缩,原来的lambda算法能正常的进行回收。【T1】
如果是小pod数量变少导致的搜索,这种情况下。原来的lambda有部分可能可以正常回收,
另一种可能是,“欢迎小Pod运行”的主机的资源利用率变低,但是不会触发回收。着时候需要进行标签去除的算法,
进行算法中的驱逐,驱逐后“欢迎小Pod运行”主机变少等待原来的lambda正常回收。