为什么POD是原子调度单位
例:
两个容器需要进行协作
- 容器1:App业务容器,会记录日志,内存要求1G
- 容器2:LogController日志容器,会进行日志读取转存到ElS上,内存要求0.5G
目前可用的内存:
- Node1:1.25G
- Node2:2G
当任务调度先将App调度到Node1上时候,那么LogController无法被再次调度到Node1(因为两个容器间存在协作,必须在一起)所以会导致“Task co-scheduling资源协作调度问题”。
解决方法:- Messos:使用资源囤积进行调度(resource hoarding)当资源全部到达的时候才进行资源分配,但是在调度过程中效率会降低,并且有可能出现调度死锁,又需要解决死锁问题。
- Google Omega:采用乐观锁调度处理冲突,不管实际冲突内容,先进行分配,之后通过一系列回滚算法进行回滚,但是过程过于复杂不利于实际实现。
- Kubernetes POD:其将资源作为一揽子进行分配,避免了这个问题
亲密关系:
- 两个应用在一个宿主机上
超亲密关系:
- 直接文件交换
- 使用localhost或者socket进行本地通讯
- 发生频繁的RPC调用
- 共享某些Linux的NameSpace空间
因此POD中的容器一定是“超亲密关系”。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Bai's Blog!