久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

k8s通過(guò)ceph

共計(jì) 4316 個(gè)字符,預(yù)計(jì)需要花費(fèi) 11 分鐘才能閱讀完成。

k8s 通過(guò) ceph-csi 接入存儲(chǔ)的實(shí)例分析,針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。

概述

下面的分析是 k8s 通過(guò) ceph-csi 接入 ceph 存儲(chǔ)(csi 相關(guān)組件的分析以 rbd 為例進(jìn)行分析),對(duì)所涉及的 k8s 對(duì)象與組件進(jìn)行了簡(jiǎn)單的介紹,以及對(duì)存儲(chǔ)進(jìn)行操作的流程分析,存儲(chǔ)相關(guān)操作包括了存儲(chǔ)創(chuàng)建、存儲(chǔ)擴(kuò)容、存儲(chǔ)掛載、解除存儲(chǔ)掛載以及存儲(chǔ)刪除操作。

關(guān)聯(lián)鏈接

ceph-csi 套件分析目錄導(dǎo)航

涉及 k8s 對(duì)象 1. PersistentVolume

持久存儲(chǔ)卷,集群級(jí)別資源,代表了存儲(chǔ)卷資源,記錄了該存儲(chǔ)卷資源的相關(guān)信息。

回收策略

(1)retain:保留策略,當(dāng)刪除 PVC 的時(shí)候,PV 與外部存儲(chǔ)資源仍然存在。

(2)delete:刪除策略,當(dāng)與 pv 綁定的 pvc 被刪除的時(shí)候,會(huì)從 k8s 集群中刪除 PV 對(duì)象,并執(zhí)行外部存儲(chǔ)資源的刪除操作。

(3)resycle(已廢棄)

pv 狀態(tài)遷移

available — bound — released

2. PersistentVolumeClaim

持久存儲(chǔ)卷聲明,namespace 級(jí)別資源,代表了用戶對(duì)于存儲(chǔ)卷的使用需求聲明。

pvc 狀態(tài)遷移

pending — bound

3. StorageClass

定義了創(chuàng)建 pv 的模板信息,集群級(jí)別資源,用于動(dòng)態(tài)創(chuàng)建 pv。

涉及組件與作用

下面先簡(jiǎn)單介紹下涉及的組件與作用,后面會(huì)有單獨(dú)詳細(xì)的介紹各個(gè)組件的作用。

1. controller manager

PV controller

負(fù)責(zé) pv、pvc 的綁定與生命周期管理,并根據(jù)需求進(jìn)行創(chuàng)建 / 刪除底層存儲(chǔ)的操作,并創(chuàng)建 / 刪除 pv 對(duì)象。

本次的分析為 k8s 通過(guò) ceph-csi 來(lái)使用 ceph 存儲(chǔ)。本次分析中,創(chuàng)建 / 刪除底層存儲(chǔ)、創(chuàng)建 / 刪除 pv 對(duì)象的操作由 external-provisioner 來(lái)觸發(fā)完成,所以本次分析中的 PV controller 只負(fù)責(zé) pv、pvc 的綁定與生命周期管理。

AD controller

主要負(fù)責(zé)存儲(chǔ)設(shè)備的 Attach/Detach 操作(如創(chuàng)建、刪除 VolumeAttachment 對(duì)象,將數(shù)據(jù)卷掛載到特定 node 節(jié)點(diǎn)上等);以及更新 node.Status.VolumesAttached。

本次的分析為 k8s 通過(guò) ceph-csi 來(lái)使用 ceph 存儲(chǔ)。本次分析中,AD controller 只創(chuàng)建 / 刪除 VolumeAttachment 對(duì)象,而不會(huì)真正的將數(shù)據(jù)卷掛載到節(jié)點(diǎn) / 從節(jié)點(diǎn)上解除掛載;csi-attacer 組件也不會(huì)做掛載 / 解除掛載操作,只是更新 VolumeAttachment 對(duì)象,真正的節(jié)點(diǎn)掛載 / 解除掛載操作由 kubelet 中的 volume manager 調(diào)用 ceph-csi 來(lái)完成。

2. kubelet

volume manager

主要是管理卷的 Attach/Detach(與 AD controller 作用相同,通過(guò) kubelet 啟動(dòng)參數(shù)控制哪個(gè)組件來(lái)做該操作,后續(xù)會(huì)詳細(xì)介紹)、mount/umount 等操作。

本次的分析為 k8s 通過(guò) ceph-csi 來(lái)使用 ceph 存儲(chǔ)。本次分析中,volume manager 的 Attach/Detach 操作只創(chuàng)建 / 刪除 VolumeAttachment 對(duì)象,而不會(huì)真正的將數(shù)據(jù)卷掛載到節(jié)點(diǎn) / 從節(jié)點(diǎn)上解除掛載;csi-attacer 組件也不會(huì)做掛載 / 解除掛載操作,只是更新 VolumeAttachment 對(duì)象,真正的節(jié)點(diǎn)掛載 / 解除掛載操作由 kubelet 中 volume manager 調(diào)用 rc.operationExecutor.MountVolume/rc.operationExecutor.UnmountDevice 方法時(shí),調(diào)用 ceph-csi 來(lái)完成。

3. volume plugin

擴(kuò)展各種存儲(chǔ)類型的卷的管理能力,實(shí)現(xiàn)第三方存儲(chǔ)的各種操作能力與 k8s 存儲(chǔ)系統(tǒng)的結(jié)合。調(diào)用第三方存儲(chǔ)的接口或命令,從而提供數(shù)據(jù)卷的創(chuàng)建 / 刪除、attach/detach、mount/umount 的具體操作實(shí)現(xiàn),可以認(rèn)為是第三方存儲(chǔ)的代理人。前面分析組件中的對(duì)于數(shù)據(jù)卷的創(chuàng)建 / 刪除、attach/detach、mount/umount 操作,全是調(diào)用 volume plugin 來(lái)完成。

后續(xù)對(duì) volume plugin 的詳細(xì)分析,以通過(guò) ceph-csi 操作 rbd 為例進(jìn)行分析。

根據(jù)源碼所在位置,volume plugin 分為 in-tree 與 out-of-tree。

in-tree

在 k8s 源碼內(nèi)部實(shí)現(xiàn),和 k8s 一起發(fā)布、管理,更新迭代慢、靈活性差。

out-of-tree

代碼獨(dú)立于 k8s,由存儲(chǔ)廠商實(shí)現(xiàn),有 csi、flexvolume 兩種實(shí)現(xiàn)。

本次的分析為 k8s 通過(guò) ceph-csi 來(lái)使用 ceph 存儲(chǔ)。本次分析中的 volume plugin 是指 ceph-csi 及其相關(guān)組件,包括 ceph-csi、external-provisioner、external-attacher、external-resizer 等。

存儲(chǔ)相關(guān)操作流程分析

下面對(duì)每個(gè)操作的整體流程進(jìn)行分析,后面會(huì)對(duì)涉及的每個(gè)組件進(jìn)行源碼分析。

1. 存儲(chǔ)創(chuàng)建

流程圖

流程分析

(1)用戶創(chuàng)建 pvc 對(duì)象;

(2)external-provisioner 組件監(jiān)聽到 pvc 的新增事件,調(diào)用 csi 組件進(jìn)行存儲(chǔ)的創(chuàng)建;

(3)csi 組件調(diào)用 ceph 創(chuàng)建底層存儲(chǔ);

(4)底層存儲(chǔ)創(chuàng)建完成后,external-provisioner 根據(jù)存儲(chǔ)信息,拼接 pv 對(duì)象,創(chuàng)建 pv 對(duì)象;

(5)pv controller 監(jiān)聽 pvc 對(duì)象,尋找合適的 pv 對(duì)象,與 pvc 對(duì)象綁定。

2. 存儲(chǔ)擴(kuò)容

流程圖

流程分析

(1)修改 pvc 對(duì)象,修改申請(qǐng)存儲(chǔ)大小;

(2)修改成功后,external-resizer 監(jiān)聽到該 pvc 的 update 事件,發(fā)現(xiàn) pvc.Spec.Resources.Requests.storgage 比 pvc.Status.Capacity.storgage 大,于是調(diào) csi controller 端擴(kuò)容,進(jìn)行底層存儲(chǔ)擴(kuò)容,擴(kuò)容完畢后更新 pv 對(duì)象的.Spec.Capacity.storgage;

(3)kubelet 的 volume manager 在 reconcile() 調(diào)諧過(guò)程中發(fā)現(xiàn) pv.Spec.Capacity.storage 大于 pvc.Status.Capacity.storage,于是調(diào) csi node 端擴(kuò)容,對(duì) dnode 上存儲(chǔ)對(duì)應(yīng)的文件系統(tǒng)擴(kuò)容,成功后 kubelet 更新 pvc.Status.Capacity.storage。

3. 存儲(chǔ)掛載

流程圖

kubelet 啟動(dòng)參數(shù) –enable-controller-attach-detach,該啟動(dòng)參數(shù)設(shè)置為 true 表示啟用 Attach/Detach controller 進(jìn)行 Attach/Detach 操作,同時(shí)禁用 kubelet 執(zhí)行 Attach/Detach 操作(默認(rèn)值為 true)。實(shí)際上 Attach/Detach 操作就是創(chuàng)建 / 刪除 VolumeAttachment 對(duì)象。

(1)kubelet 啟動(dòng)參數(shù) –enable-controller-attach-detach=true,Attach/Detach controller 進(jìn)行 Attach/Detach 操作

(2)kubelet 啟動(dòng)參數(shù) –enable-controller-attach-detach=false,kubelet 端 volume manager 進(jìn)行 Attach/Detach 操作

流程分析

(1)用戶創(chuàng)建一個(gè)掛載了 pvc 的 pod;

(2)AD controller 或 volume manager 中的 reconcile() 發(fā)現(xiàn)有 volume 未執(zhí)行 attach 操作,于是進(jìn)行 attach 操作,即創(chuàng)建 VolumeAttachment 對(duì)象;

(3)external-attacher 組件 list/watch VolumeAttachement 對(duì)象,更新 VolumeAttachment.status.attached=true;

(4)AD controller 更新 node 對(duì)象的.Status.VolumesAttached 屬性值,將該 volume 記為 attached;

(5)kubelet 中的 volume manager 獲取 node.Status.VolumesAttached 屬性值,發(fā)現(xiàn) volume 已被標(biāo)記為 attached;

(6)于是 volume manager 中的 reconcile() 調(diào)用 ceph-csi 組件的 NodeStageVolume 與 NodePublishVolume 完成掛載。

4. 解除存儲(chǔ)掛載

流程圖

(1)AD controller

(2)volume manager

流程分析

(1)用戶刪除聲明了 pvc 的 pod;

(2)AD controller 或 volume manager 中的 reconcile() 發(fā)現(xiàn)有 volume 未執(zhí)行 dettach 操作,于是進(jìn)行 dettach 操作,即刪除 VolumeAttachment 對(duì)象;

(3)AD controller 或 volume manager 等待 VolumeAttachment 對(duì)象刪除成功;

(4)AD controller 更新新 node 對(duì)象的.Status.VolumesAttached 屬性值,將標(biāo)記為 attached 的該 volume 從屬性值中去除;

(5)kubelet 中的 volume manager 獲取 node.Status.VolumesAttached 屬性值,找不到相關(guān)的 volume 信息;

(6)于是 volume manager 中的 reconcile() 調(diào)用 ceph-csi 組件的 NodeUnpublishVolume 與 NodeUnstageVolume 完成解除掛載。

5. 刪除存儲(chǔ)

流程圖

流程分析

(1)用戶刪除 pvc 對(duì)象;

(2)pv controller 發(fā)現(xiàn)與 pv 綁定的 pvc 對(duì)象被刪除,于是更新 pv 的狀態(tài)為 released;

(3)external-provisioner watch 到 pv 更新事件,并檢查 pv 的狀態(tài)是否為 released,以及回收策略是否為 delete;

(4)接下來(lái) external-provisioner 組件會(huì)調(diào)用 ceph-csi 的 DeleteVolume 來(lái)刪除存儲(chǔ);

(5)ceph-csi 組件的 DeleteVolume 方法,調(diào)用 ceph 集群命令,刪除底層存儲(chǔ);

(6)external-provisioner 組件刪除 pv 對(duì)象。

關(guān)于 k8s 通過(guò) ceph-csi 接入存儲(chǔ)的實(shí)例分析問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開,可以關(guān)注丸趣 TV 行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-08-16發(fā)表,共計(jì)4316字。
轉(zhuǎn)載說(shuō)明:除特殊說(shuō)明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請(qǐng)注明出處。
評(píng)論(沒(méi)有評(píng)論)
主站蜘蛛池模板: 正蓝旗| 千阳县| 波密县| 固始县| 建始县| 廉江市| 宜章县| 陇川县| 康保县| 缙云县| 甘泉县| 大冶市| 合川市| 贡山| 永善县| 鄂州市| 怀来县| 连州市| 象州县| 徐水县| 芜湖县| 长寿区| 新密市| 桐梓县| 高阳县| 商南县| 五大连池市| 桂平市| 股票| 邳州市| 西平县| 安溪县| 定陶县| 鲜城| 龙胜| 衡山县| 应城市| 玛多县| 长沙县| 芜湖市| 荔波县|