跳转至

vmiController

vmiController

代码位于kubevirt/pkg/virt-controller/watch/vmi.go文件中。

  1. 监听VMI对象、Pod对象、DataVolume对象并添加对应的EventHandler。
  2. 收到Event事件之后加入到workQueue。
    • VMI对象的Event事件直接加入workQueue。
    • Pod对象的Event事件先判断是否由VM对象所控制,如果是则将该VM对象加入workQueue,否则不处理。
    • DataVolume对象的Event事件,根据DataVolume的Namespace和Name获取匹配的vmis,然后将vmis对象依次加入到workQueue。
  3. 通过Run()->runWorker()->Execute()->execute(),从workQueue中取出对象的key,然后在execute中处理。
  4. execute() 函数的处理逻辑
    • 根据key,从Informer的本地缓存中获取VM对象。
    • 获取和当前vmi对象匹配的Pod。
    • 根据vmi.Spec.Volumes,获取匹配的DataVolumes对象。
    • 同步sync,若Pod不存在,则创建lanucher所在的Pod。
    • 更新vmi对象的status。

最后更新: 2023-08-14
创建日期: 2023-08-14

评论