Cpu 分配器和锁,基于 etcd 实现,示例参考 example.go
单机分配算法如下
- 计算多少个碎片核和整数核组合的时候,可能部署的 Containers 数最大。
- 这里进行了一次剪枝,随着整数核和碎片核的此消彼长两者针对整数位的小数位分别能分配的容器数是逐步接近的,最接近的时候即可终止循环。
- 同时如果暂时没有碎片核,或者允许最多全部整数核变为碎片核,那么可以针对整数部分得出一个碎片核上限。
- 对于最佳的组合开始计算碎片核和整数核的组合并且返回。
Pod 计算策略如下
- 拿到 Pod 下所有 Host 的 CpuInfo。
- 考虑集中部署,一次拿取设置 N 台机器可部署容器数组合。
- 如果这 N 台不够需求量,则再来一次 N 台计算,直到满足,如果全量都不满足则直接拒绝请求释放锁位。
- 考虑分布式部署,假设需求容器量为 P,每台期望部署 Q 个,那么先并发的拿 P/Q 台机器组合,看是否满足每台部署 Q 个的需求。假设只有 C 台满足,那么在 Pod 池中取出 P/Q-C 台继续计算,直到 Pod 中再无余量机器则拒绝请求释放锁位。