華為云云原生鉆石集訓營 第五課:Kubernetes存儲架構原理深度剖析(下)

      網友投稿 643 2022-05-30

      課程目標:

      1.了解Kubernetes容器存儲發展歷程

      2.了解StorageClass工作原理

      3.了解CSI容器存儲接口架構

      4.了解Kubernetes out-tree存儲兼容in-tree存儲的機制

      目錄:

      1. StorageClass工作原理分析

      2. CSI容器存儲接口架構解讀

      3.云原生存儲最佳實踐:從FlexVolume插件向CSI插件遷移

      K8S初期為存算分離所做的解耦設計Volume,米用強耦合、滅活性.左HII-Tee保T工上種t橐收數)徳于業務功能設計。但這類存儲卷的生命周期是跟隨pod的,只能用作存儲臨時數據,無法做為最終數據使用。

      隨著K8S的不斷成熟,為支持更多的應用場景,提供了一種脫離pod生命周期的、用戶可管理的存儲抽象設計低耦合、靈活性更強的PersistentVolume/PersistentVolumeClaim。

      PV/PVC如何與Flexvolume/CSI的插件一起工作呢?那就是我們接下來要學習的StorageClass。

      1. StorageClass工作原理分析

      StorageClass工作原理解讀

      StorageClass是存儲類,簡稱sc。 K8S平臺為存儲提供商提供存儲接入的一種聲明,通過sc和相應的存儲插件(csi/flexvolume)為容器應用提供動態分配存儲卷的能力。

      sc用以指定存儲池的:

      1.供應商的名字: everest-csi-provisioner

      2.分配PV卷的回收策略:Delete/Retain

      3.分配PV卷的綁定模式: lmmediate/WaitForFirstConsumer

      4.存儲是否支持擴容: true/false

      5.驅動名字: disk.csi.everest.io、.....

      6.驅動類型:塊存儲、文件存儲、對象存儲........

      StorageClass應用場景解讀

      無論在資源管控嚴格還是資源管控敏捷的場景,資源管理員都希望通過創建k8s的存儲接口來管理容器存儲資源。

      k8s通過存儲聲明(pvc)、存儲類(SC)和存儲抽件(ariver)從口L1P,滿足用戶一鍵式定義、創建存儲。

      1.用戶在StatefulSet模板中定義對存儲的需要

      2.StatefulSet控制器負責將claim模板轉換為pvc

      3.結合自定的sc和sc中指定的driver,創建應用所需要的pv卷。

      2.CSI容器存儲接口架構解讀

      什么是云原生存儲?

      云原生的理解:

      1.從技術視角看:一種還在不斷演進中的設計思想,它主要是為了充分利用云計算的優勢、促進云計算技術發展而構建和運行應用的設計思想;

      2.從用戶視角看:一種讓用戶從迭代慢、運維重、升級難的包袱中解脫出來,聚焦業務開展的設計思想。

      云原生應用的理解:基于云原生技術構建、運行的應用程序,它具有:

      1.行為可預測,快速彈性擴縮容;

      2.持續交付,使研發流程更敏捷;

      3.基于API構建,團隊協作更順暢;

      華為云云原生鉆石集訓營 第五課:Kubernetes存儲架構原理深度剖析(下)

      4.獨立性強,促進DevOps的開展;

      5.依賴少,輕量,故障恢復快速。

      云原生存儲的理解:

      1.從技術視角看:符合以應用為中心、可被聲明和組合實現、是API驅動和服務自治、具有敏捷等特性的存儲系統;

      2.從用戶視角看:最大的是使能云原生應用特性的存儲系統。

      CSI是容器存儲接口規范,被K8S選為存儲接入規范。

      以CSI存儲架構為例,解讀容器存儲架構,如下圖所示:

      1.控制接口A:K8S平臺通過控制接口調用存儲提供商發布的控制APl;

      2.控制接口B:K8S平臺通過sideCar (external-provisioner/attacher等)調用存儲提供商發布的控制APl;

      3.數據接口C:數據面,存儲通過文件系統、塊設備等方式為K8S平臺中運行的workload提供存儲讀寫等能力;

      CSI存儲接口解讀

      1.CSI接口可分為三類:identity、ControllerServer、nodeServer。

      CSI服務共分為2類:

      ①NodeServer: kubelet對已經綁定到節點上的存儲卷的操作,如mount/umount.格式化等;

      ②ControllerServer:對存儲服務管理的操作,如創建/刪除、快照、擴容等

      自研CSI插件的構建思路

      1.CSI接口調用流程,我們以塊存儲為例,圖示接口調用,如右圖所示;

      2.CSI插件的sideCar和node-driver之間的關系,如下圖所示:

      控制面的sideCar與driver通過Deployment/StatefulSet部署;

      數據面的sideCar與driver通過DaemonSet部署;

      sideCar容器和driver容器在pod中通過UDS(unix domain socket)調用,完成卷的生命周期管理;

      Kubelet與node-driver之間通過UDS調用,完成節點上卷的格式化、掛載給容器使用操作。

      CSI架構中sideCar與driver之間是采用UDS(Unix Domain Socket)通訊的。

      CSI插件注冊流程解讀:

      CSI插件在kubernetes中的注冊流程:

      1.Kubelet啟動后,plugin Manager不斷watch插件目錄:

      /var/lib/kubelet/plugin_registry/,主要方法是:kubelet.getPluginsRegistrationDir()

      2.通過DaemonSet部署的csi-driver,在節點啟動后:

      ①Drivers容器啟動后,創建gRPC server,并監聽csi.sock

      ②sideCar容器啟動后,也創建一個gRPC server,并監聽{driverName}.-reg.sock,node-driver-registrar通過UDS調用GetPluginInfo)向driver請求driver信息;

      3.Kubelet pluginManager發現{driverName}.-reg.sock后,會納入插件管理里;csi VolumePlugin會向{driverName}.-reg.sock通過gRPC client向node-driver-registrar發送GetInfo()請求;

      4.Kubelet csi VolumeManager向driver的csi.sock發送NodeGetlnfo()請求;

      5.Kubelet根據收集到的信息,創建CSINode信息

      6.Kubelet調用NotifyRegistrationStatus()通知node-driver-registrar注冊情況。

      3.云原生存儲最佳實踐:從FlexVolume插件向CSI插件遷移

      CSI存儲兼容in-tree插件存儲的方案解讀:

      k8s社區里通過CSIMigration來實現in-tree的存儲插件向CSI插件“遷移”,或稱之為兼容,這部分兼容會逐步“日落”并下線。

      CSIMigration,歸根到底就是起到一個轉換器作用,在保證北向API不改變的情況下進行轉換成CSI的持久卷,并能夠被CSI插件管理。

      主要涉及到的組件有:

      1. Kube-controller-manager:

      添加支持CSIMigration的插件——appendAttachableLegacyProviderVolumes;

      Dsw、AttachDetach控制器、expand控制器中添加CSIMigration的csiMigratedPluginManager和intreeToCSITranslator,負責將intree的volume配置信息轉換為CSI格式的配置信息,以供后續CSI插件調用;

      2. Kubelet:

      添加支持CSIMigration的插件———appendLegacyProviderVolumes

      volumeManger中添加CSIMigration的csiMigratedPluginManager和intreeToCSITranslator,負責將intree的volume配置信息轉換為CSI格式的配置信息,以供后續CSI插件調用;

      本課總結:

      StatefulSet:簡稱sts,有狀態應用,一種k8s為用戶提供一組具有有序、唯一、穩定的應用實例集合。

      Volume:卷,k8s為存算分離所做的解耦設計,讓用戶更加專注于業務功能設計。它在k8s中是依托于pod而使用的。

      PersistentVolume:簡稱pv,持久化存儲,是k8s為云原生應用提供一種擁有獨立生命周期的、用戶可管理的存儲抽象設計。

      PersistentVolumeClaim:簡稱pvc,持久化存儲聲明,是K8S為解耦云原生應用和數據存儲而設計的,通過pvc可以讓資源管控更細更靈活、團隊職責分離應用模板更通用,進一步解除了用戶被云平臺鎖定的顧慮。

      StorageClass:簡稱sc,存儲類,是K8S平臺為存儲提供商提供存儲接入的一種聲明,通過sc和相應的存儲插件(csi/flexvolume)為容器應用提供動態分配存儲卷的能力。

      參考鏈接:

      1.相關內容的華為云官網鏈接: https://support.huaweicloud.com/usermanual-cce/cce_01_0042.html

      2.CCE云容器引擎官方首頁: https://www.huaweicloud.com/product/cce.html

      3. Kubernetes CSI官方文檔: https://kubernetes-csi.github.io/docs/introduction.html

      4. Kubernetes官方文檔:

      StatefulSet: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/

      Storage: https://kubernetes.io/docs/concepts/storage/

      Kubernetes 云原生 容器

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:在120篇系列專欄中,才能學會 python beautifulsoup4 模塊,7000字博客+爬第九工場網
      下一篇:java入門學習(第二章)
      相關文章
      亚洲精品综合在线影院| 伊人久久精品亚洲午夜| 国产AV无码专区亚洲AVJULIA| 亚洲三级高清免费| 亚洲gv猛男gv无码男同短文| 亚洲午夜日韩高清一区 | 亚洲国产成人精品无码区花野真一| 亚洲人成电影在线观看青青| 亚洲美女视频一区| 亚洲免费二区三区| 亚洲另类视频在线观看| 亚洲精品国产手机| 亚洲av专区无码观看精品天堂 | 亚洲国产综合精品中文字幕| 亚洲高清免费视频| 亚洲免费视频一区二区三区| 在线观看亚洲精品福利片| 在线观看亚洲av每日更新| 亚洲美女又黄又爽在线观看| 久久精品国产精品亚洲精品 | 亚洲精品天堂成人片AV在线播放| 亚洲老熟女五十路老熟女bbw| 亚洲色大成网站www尤物| 亚洲精品GV天堂无码男同| 麻豆亚洲AV成人无码久久精品 | 国产亚洲成人久久| 亚洲成a人片在线观看日本| 午夜影视日本亚洲欧洲精品一区| 久久狠狠高潮亚洲精品| 亚洲人成影院77777| 亚洲一卡一卡二新区无人区| 久久久久亚洲AV无码去区首| av在线亚洲欧洲日产一区二区 | 亚洲熟妇无码av另类vr影视| 精品国产亚洲一区二区三区在线观看 | 亚洲日产无码中文字幕| 亚洲卡一卡2卡三卡4卡无卡三| 亚洲精品白色在线发布| 久久久久亚洲国产| 天天综合亚洲色在线精品| 久久亚洲AV无码西西人体|