[rook] rook的控制流

如下是rook爲一個pod準備可用塊存儲的過程:node

1. rook operator運行,而且在k8s每臺機器上運行一個rook agent的pod;app

2. 用戶建立一個pvc,並指定storageclass使用rook.io/block provisionor;函數

3. operator provisionor的Provision()函數被調用,用以在集羣中建立一個block image。此時,Provision階段已完成,pvc/pv被考慮綁定到一塊兒;同步

4. 當消費該pvc的pod被建立時,kubelet將會調用Rook Flexvolume的Mount()函數,用以消費預約的存儲;io

ps:kubelet調用的Mount()是一個阻塞型的函數,只有在driver的mapping/mounting操做完成且agent同步了該操做後,纔會繼續往下執行。class

5. 隨後,agent將會按照CRD的描述建立一個volume並attach到該物理機上;(?The agent then creates a volume attach CRD that represents the attachment of the cluster volume to the node. )集羣

6. 接着,agent將volume map到本地機器上,並更新CRD的狀態以及設備的路徑值(例如/dev/rbd0)配置

7. 控制權接着轉交給driver,若是mapping可以成功執行,則driver將把指定的設備mount到指定的路徑上。若在配置文件中還指明瞭文件系統的類型,則driver還會對該捲進行文件系統格式化操做。map

8. driver將反饋kubelet Mount()操做已成功 im

相關文章
相關標籤/搜索