Koordinator Descheduler的MigrationController插件:确保驱逐后Pod成功调度
由于调度器和descheduler是两个独立工作的组件,两个组件之间并没有任何通讯和协商机制,在descheduler执行pod驱逐后,由驱逐生成pod的调度和非驱逐原因生成的pod的调度(后面简称正常的pod)会存在资源抢占的问题。比如正常的pod和驱逐后生成的新pod需要相同的资源,且集群的剩余可以调度的资源紧张(或者资源碎片),且正常的pod在驱逐后生成的新pod之前调度,会出现pod驱逐后新生成的pod重新调度到原先的节点或无法调度的问题。
MigrationController插件通过Reservation资源跟koordinator scheduler进行通信,让koordinator scheduler进行资源预留,然后再执行驱逐pod,来解决上面这个问题。
仲裁机制是一种干预pod的驱逐过程的机制,它在 v1.4.0 版本中引入。它解决了应用变更维护过程中临时暂停应用pod的驱逐,比如deployment滚动更新的过程中同时descheduler执行pod的驱逐,会对这个应用的稳定性产生影响,甚至没有一个ready的pod。仲裁机制提供了一个方式,在驱逐pod时候增加一道审批的流程,能够进行批准、拒绝等操作。