主机挂载存储_备战CKA每日一题——第3天 | 对接CSI存储知识
本活動在微信公眾號【我的小碗湯】上舉行,這里參與答題無效哦!
昨日考題
在Kubernetes PVC+PV體系下通過CSI實(shí)現(xiàn)的volume plugins動態(tài)創(chuàng)建pv到pv可被pod使用有哪些組件需要參與?
A. PersistentVolumeController + CSI-Provisoner + CSI controller plugin B. AttachDetachController + CSI-Attacher + CSI controller plugin C. Kubelet + CSI node plugin昨日答案
ABC
昨日解析
k8s中,利用PVC 描述Pod 所希望使用的持久化存儲的大小,可讀寫權(quán)限等,一般由開發(fā)人員去創(chuàng)建;利用PV描述具體存儲類型,存儲地址,掛載目錄等,一般由運(yùn)維人員去提前創(chuàng)建。而不是直接在pod里寫上volume的信息。一來可以使得開發(fā)運(yùn)維職責(zé)分明,二來利用PVC、PV機(jī)制,可以很好擴(kuò)展支持市面上不同的存儲實(shí)現(xiàn),如k8s v1.10版本對Local Persistent Volume的支持。
我們試著理一下Pod創(chuàng)建到volume可用的整體流程。
用戶提交請求創(chuàng)建pod,PersistentVolumeController發(fā)現(xiàn)這個pod聲明使用了PVC,那就會幫它找一個PV配對。
沒有現(xiàn)成的PV,就去找對應(yīng)的StorageClass,幫它新創(chuàng)建一個PV,然后和PVC完成綁定。
新創(chuàng)建的PV,還只是一個API 對象,需要經(jīng)過“兩階段處理”,才能變成宿主機(jī)上的“持久化 Volume”真正被使用:
第一階段由運(yùn)行在master上的AttachDetachController負(fù)責(zé),為這個PV完成 Attach 操作,為宿主機(jī)掛載遠(yuǎn)程磁盤;
第二階段是運(yùn)行在每個節(jié)點(diǎn)上kubelet組件的內(nèi)部,把第一步attach的遠(yuǎn)程磁盤 mount 到宿主機(jī)目錄。這個控制循環(huán)叫VolumeManagerReconciler,運(yùn)行在獨(dú)立的Goroutine,不會阻塞kubelet主控制循環(huán)。
完成這兩步,PV對應(yīng)的“持久化 Volume”就準(zhǔn)備好了,POD可以正常啟動,將“持久化 Volume”掛載在容器內(nèi)指定的路徑。
k8s支持編寫自己的存儲插件FlexVolume 與 CSI。不管哪種方式,都需要經(jīng)過“兩階段處理”,FlexVolume相比CSI局限性大,一般我們采用CSI方式對接存儲。
CSI 插件體系的設(shè)計(jì)思想把這個Provision階段(動態(tài)創(chuàng)建PV),以及 Kubernetes 里的一部分存儲管理功能,從主干代碼里剝離出來,做成了幾個單獨(dú)的組件。這些組件會通過 Watch API 監(jiān)聽 Kubernetes 里與存儲相關(guān)的事件變化,比如 PVC 的創(chuàng)建,來執(zhí)行具體的存儲管理動作。
上圖中CSI這套存儲插件體系中三個獨(dú)立的外部組件(External Components),即:Driver Registrar、External Provisioner 和 External Attacher,對應(yīng)的是從 Kubernetes 項(xiàng)目里面剝離出來的部分存儲管理功能。我們需要實(shí)現(xiàn)Custom Components這一個二進(jìn)制,會以gRpc方式提供三個服務(wù):CSI Identity、CSI Controller、CSI Node。
Driver Registrar 組件,負(fù)責(zé)將插件注冊到 kubelet 里面;Driver Registrar調(diào)用CSI Identity 服務(wù)來獲取插件信息;External Provisioner 組件監(jiān)聽APIServer 里的 PVC 對象。當(dāng)一個 PVC 被創(chuàng)建時,它就會調(diào)用 CSI Controller 的 CreateVolume 方法,創(chuàng)建對應(yīng) PV;
External Attacher 組件負(fù)責(zé)Attach階段。Mount階段由kubelet里的VolumeManagerReconciler控制循環(huán)直接調(diào)用CSI Node服務(wù)完成。
兩階段完成后,kubelet將mount參數(shù)傳遞給docker,創(chuàng)建、啟動容器。
整體流程如下圖:
考試體驗(yàn)總結(jié)
https://www.kubernetes.org.cn/5168.htmlhttps://blog.csdn.net/deerjoe/article/details/86300826
今日考題
通過單個命令創(chuàng)建一個deployment并暴露Service。deployment和Service名稱為cka-1120,使用nginx鏡像, deployment擁有2個pod
作者簡潔
作者:小碗湯,一位熱愛、認(rèn)真寫作的小伙,目前維護(hù)原創(chuàng)公眾號:『我的小碗湯』,專注于寫golang、docker、kubernetes等知識等提升硬實(shí)力的文章,期待你的關(guān)注。 轉(zhuǎn)載說明:務(wù)必注明來源(注明:來源于公眾號:我的小碗湯, 作者:小碗湯)
作者簡潔
作者:小碗湯,一位熱愛、認(rèn)真寫作的小伙,目前維護(hù)原創(chuàng)公眾號:『我的小碗湯』,專注于寫go語言、docker、kubernetes、java等開發(fā)、運(yùn)維知識等提升硬實(shí)力的文章,期待你的關(guān)注。轉(zhuǎn)載說明:務(wù)必注明來源(注明:來源于公眾號:我的小碗湯,作者:小碗湯)
總結(jié)
以上是生活随笔為你收集整理的主机挂载存储_备战CKA每日一题——第3天 | 对接CSI存储知识的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 300 s7 置零指令_西门子1200与
- 下一篇: matlab浮点数求绝对值_MATLAB