深究Kubernetes源碼-存儲- 4 AttachDetachController機制流程分析
分析基于kubernetes v1.26?
2.2.2 AttachDetachController
AttachDetachController運用在kube-controller-manager中,關鍵啟動流程如下,主要流程在reconciler.Run/pvcWorker/desiredStateOfWorldPopulator.Run三個協(xié)程中:

關鍵類圖如下,包括核心Reconciler/ActualStateOfWorld/DesiredStateOfWorld/DesiredStateOfWorldPopuldator/OperationExecutor

其核心邏輯是調諧Pod和Volume以及Node之間的掛載關系,并執(zhí)行調用VolumePlugin執(zhí)行Attach/Detach

pvcWorker主要通過pvc informer調諧pvc,調諧pvc的條件是1)已綁定的pvc 2)使用pvc的pod已經調度到節(jié)點,ProcessVolume是其核心邏輯,將需要調諧的pod pvc加入到DesiredStateOfWorld volumesToAttach中,或從volumesToAttach中移除。

desiredStateOfWorldPopulator.Run主要是根據pod informer和DesriedStateOfWorld情況,通過AddPod/DeletePod,判斷DesiredStateOfWorld中需要處理的volumesToAttach。
Reconciler.Run是ADController核心邏輯,主要是根據DesiredStateOfWorld和ActualStateOfWorld情況,執(zhí)行Attach/Detach操作。

AttachVolume核心為《Volume Plugin機制》章節(jié)中描述,通過VolumePlugin執(zhí)行Attach操作,不同Volume Plugin業(yè)務邏輯不同,例如CSI Volume Plugin會創(chuàng)建一個VolumeAttachment

DetachVolume與AttachVolume機制一致,最終會調用VolumePlugin執(zhí)行Detach操作,不同VolumePlugin邏輯不同,CSI Plugin會刪除Attach操作生成的VolumeAttachment