容器化RDS:計算存儲分離架構下的“Split-Brain”
成都創(chuàng)新互聯(lián)公司企業(yè)建站,十余年網站建設經驗,專注于網站建設技術,精于網頁設計,有多年建站和網站代運營經驗,設計師為客戶打造網絡企業(yè)風格,提供周到的建站售前咨詢和貼心的售后服務。對于成都做網站、網站設計、外貿營銷網站建設中不同領域進行深入了解和探索,創(chuàng)新互聯(lián)在網站建設中充分了解客戶行業(yè)的需求,以靈動的思維在網頁中充分展現,通過對客戶行業(yè)精準市場調研,為客戶提供的解決方案。
容器化RDS:計算存儲分離還是本地存儲?
容器化RDS:你需要了解數據是如何被寫"壞"的
容器化RDS:PersistentLocalVolumes和VolumeScheduling
現有 Kubernetes 存儲插件系統(tǒng)問題
Container Storage Interface(CSI)
基于CSI 和分布式文件系統(tǒng)實現在 MySQL 的 Volume 動態(tài)擴展
對 CSI 的展望
原名 | 簡稱 |
容器編排系統(tǒng) | CO. |
存儲提供者 | SP. |
存儲插件接口 | Volume Plugin Interface |
存儲驅動 | Volume Driver |
容器存儲接口 Container Storage Interface | CSI |
可供選的容器編排系統(tǒng)(后面簡稱 CO.)不少,除去 Kubernetes 還有 Mesos、Swarm、Cloud Foundry。以 Kubernetes 為例,其通過 PersistentVolume 抽象對以下存儲的支持:
GCEPersistentDisk
AWSElasticBlockStore
AzureFile
Azuredisk
FC(Fibre Channel)**
FlexVolume
Flocker
NFS
iSCSI
RBD(Ceph Block Device)
CephFS
Cinder(OpenStack block storage)
GlusterFS
VsphereVolume
Quobyte Volumes
HostPath
VMware Photon
Portworx Volumes
ScaleIO Volumes
StorageOS
VolumePlugin
PersistentVolumePlugin
DeletableVolumePlugin
ProvisionableVolumePlugin
ExpandableVolumePlugin
Provisioner
Deleter
需要在 Kubernetes 中給各個 SP. 賦權以便他們能夠提交代碼到倉庫;
Volume Driver 由各個 SP. 提供,Kubernetes 的開發(fā)者并不了解每個細節(jié),導致這些代碼難于維護和測試;
Kubernetes 的發(fā)布節(jié)奏和各位 SP. Volume Driver 的節(jié)奏并不一致,隨著支持的 SP. 增多,溝通、維護、測試成本會越來越高;
這些 SP. Volume Driver 并不是 Kubernetes 本身需要的。
提交一個新特性或者修復 bug,都需要提交代碼到 Kubernetes 倉庫,在本地編譯 Kubernetes 的都知道,這個過程是很痛苦的,這對 SP. 而言是完全不必要的成本。
基于這些問題和挑戰(zhàn),CO 廠商提出 Container Storage Interface 用來定義容器存儲標準,它獨立于 Kubernetes Storage SIG,由 Kubernetes、Mesos、Cloud Foundry 三家一起推動。個人理解它有如下2個核心目標:
提供統(tǒng)一的 CO. 和 SP. 都遵循的容器存儲接口。
一旦 SP. 基于 CSI 實現了自身的 Volume Driver,即可在所有支持 CSI 的 CO 中平滑遷移。
Controller Plane、Kubelet 不再直接與 Volume Driver 交互,引入 external-provisioner 和 external-attacher 完成該工作;
SP. Volume Driver 會由獨立的容器運行;
為了實現 external-provisioner、external-attacher 和 SP. Volume Driver 的交互引入 gRPC 協(xié)議(標紅箭頭)。
在 Kubernetes 端 引入新的對象:
CSIPersistentVolumeSource:該類型 PV 由 CSI Driver 提供
VolumeAttachment:同步 Attach 和 Dettach 信息
引入新的名稱:
mount/umount:NodePublishVolume/NodeUnpublishVolume
attach/dettach:ControllerPublishVolume/ControllerUnpublishVolume
擴展 CSI Spec
擴展 CSI Plugin
基于 CSI Spec 實現 Storage Driver
演示
其他
基于 protobuf 定義強類型結構,便于閱讀和理解
通過 stub 實現遠程調用,編程邏輯更清晰
支持雙工和流式,提供雙向交互和實時交互
CSI Driver 實現如下所有接口:
CreateVolume
DeleteVolume
ControllerPublishVolume
ControllerUnpublishVolume
ValidateVolumeCapabilities
ListVolumes
GetCapacity
ControllerGetCapabilities
RequiresFSResize
ControllerResizeVolume
定義 CSI 對應的 StorageClass,并設置 allowVolumeExpansion 為 true
啟用 Feature Gates:ExpandPersistentVolumes
新增 Admission Control:PersistentVolumeClaimResize
……
通過鍵值更新和查詢
批量數據加載數據
讀數一:MySQL QPS 在正常波動范圍內;
讀數二:持續(xù)批量加載數據,MySQL 文件系統(tǒng)容量不斷變大;
讀數三:在20分鐘內,在線動態(tài)擴容 Volume 和 Filesystem 2 次, 過程高效平滑。
目前 CSI 已發(fā)展到 0.2.0,0.3.0 也發(fā)布在即。
0.3.0 中呼聲最高的特性是 Snapshot。借助該功能,可以實現備份和異地容災。但是為了實現該功能,在 Kubernetes 現有的 Control-Plane 上還要添加新的 Controller,客觀上,復雜度會進一步提高。https://github.com/kubernetes/kubernetes/blob/afa68cc28749c09f8655941b111e46d85689daf8/pkg/volume/plugins.go#L95
https://github.com/container-storage-interface/spec/blob/master/spec.md
https://github.com/kubernetes/community/blob/master/contributors/design-proposals/storage/container-storage-interface.md
https://github.com/container-storage-interface/spec/blob/master/csi.proto
https://docs.google.com/document/d/1kVrNwA2f4ite8_9QvCy-JQA_00hxGGMdER3I84dUDqQ/edit?usp=sharing
| 作者簡介
熊中哲,沃趣科技產品及研發(fā)負責人
曾就職于阿里巴巴和百度,超過10年關系型數據庫工作經驗,目前致力于將云原生技術引入到關系型數據庫服務中。
本文題目:容器化RDS:借助CSI擴展Kubernetes存儲能力
URL地址:http://bm7419.com/article44/jjdjhe.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供用戶體驗、靜態(tài)網站、虛擬主機、微信小程序、、全網營銷推廣
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)