容器化RDS:計(jì)算存儲(chǔ)分離架構(gòu)下的“Split-Brain”
成都創(chuàng)新互聯(lián)公司專(zhuān)注于長(zhǎng)春企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè),商城網(wǎng)站制作。長(zhǎng)春網(wǎng)站建設(shè)公司,為長(zhǎng)春等地區(qū)提供建站服務(wù)。全流程按需定制網(wǎng)站,專(zhuān)業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)公司專(zhuān)業(yè)和態(tài)度為您提供的服務(wù)容器化RDS:計(jì)算存儲(chǔ)分離還是本地存儲(chǔ)?
容器化RDS:你需要了解數(shù)據(jù)是如何被寫(xiě)"壞"的
容器化RDS:PersistentLocalVolumes和VolumeScheduling
現(xiàn)有 Kubernetes 存儲(chǔ)插件系統(tǒng)問(wèn)題
Container Storage Interface(CSI)
基于CSI 和分布式文件系統(tǒng)實(shí)現(xiàn)在 MySQL 的 Volume 動(dòng)態(tài)擴(kuò)展
對(duì) CSI 的展望
原名 | 簡(jiǎn)稱(chēng) |
容器編排系統(tǒng) | CO. |
存儲(chǔ)提供者 | SP. |
存儲(chǔ)插件接口 | Volume Plugin Interface |
存儲(chǔ)驅(qū)動(dòng) | Volume Driver |
容器存儲(chǔ)接口 Container Storage Interface | CSI |
可供選的容器編排系統(tǒng)(后面簡(jiǎn)稱(chēng) CO.)不少,除去 Kubernetes 還有 Mesos、Swarm、Cloud Foundry。以 Kubernetes 為例,其通過(guò) PersistentVolume 抽象對(duì)以下存儲(chǔ)的支持:
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 中給各個(gè) SP. 賦權(quán)以便他們能夠提交代碼到倉(cāng)庫(kù);
Volume Driver 由各個(gè) SP. 提供,Kubernetes 的開(kāi)發(fā)者并不了解每個(gè)細(xì)節(jié),導(dǎo)致這些代碼難于維護(hù)和測(cè)試;
Kubernetes 的發(fā)布節(jié)奏和各位 SP. Volume Driver 的節(jié)奏并不一致,隨著支持的 SP. 增多,溝通、維護(hù)、測(cè)試成本會(huì)越來(lái)越高;
這些 SP. Volume Driver 并不是 Kubernetes 本身需要的。
提交一個(gè)新特性或者修復(fù) bug,都需要提交代碼到 Kubernetes 倉(cāng)庫(kù),在本地編譯 Kubernetes 的都知道,這個(gè)過(guò)程是很痛苦的,這對(duì) SP. 而言是完全不必要的成本。
基于這些問(wèn)題和挑戰(zhàn),CO 廠商提出 Container Storage Interface 用來(lái)定義容器存儲(chǔ)標(biāo)準(zhǔn),它獨(dú)立于 Kubernetes Storage SIG,由 Kubernetes、Mesos、Cloud Foundry 三家一起推動(dòng)。個(gè)人理解它有如下2個(gè)核心目標(biāo):
提供統(tǒng)一的 CO. 和 SP. 都遵循的容器存儲(chǔ)接口。
一旦 SP. 基于 CSI 實(shí)現(xiàn)了自身的 Volume Driver,即可在所有支持 CSI 的 CO 中平滑遷移。
Controller Plane、Kubelet 不再直接與 Volume Driver 交互,引入 external-provisioner 和 external-attacher 完成該工作;
SP. Volume Driver 會(huì)由獨(dú)立的容器運(yùn)行;
為了實(shí)現(xiàn) external-provisioner、external-attacher 和 SP. Volume Driver 的交互引入 gRPC 協(xié)議(標(biāo)紅箭頭)。
在 Kubernetes 端 引入新的對(duì)象:
CSIPersistentVolumeSource:該類(lèi)型 PV 由 CSI Driver 提供
VolumeAttachment:同步 Attach 和 Dettach 信息
引入新的名稱(chēng):
mount/umount:NodePublishVolume/NodeUnpublishVolume
attach/dettach:ControllerPublishVolume/ControllerUnpublishVolume
擴(kuò)展 CSI Spec
擴(kuò)展 CSI Plugin
基于 CSI Spec 實(shí)現(xiàn) Storage Driver
演示
其他
基于 protobuf 定義強(qiáng)類(lèi)型結(jié)構(gòu),便于閱讀和理解
通過(guò) stub 實(shí)現(xiàn)遠(yuǎn)程調(diào)用,編程邏輯更清晰
支持雙工和流式,提供雙向交互和實(shí)時(shí)交互
CSI Driver 實(shí)現(xiàn)如下所有接口:
CreateVolume
DeleteVolume
ControllerPublishVolume
ControllerUnpublishVolume
ValidateVolumeCapabilities
ListVolumes
GetCapacity
ControllerGetCapabilities
RequiresFSResize
ControllerResizeVolume
定義 CSI 對(duì)應(yīng)的 StorageClass,并設(shè)置 allowVolumeExpansion 為 true
啟用 Feature Gates:ExpandPersistentVolumes
新增 Admission Control:PersistentVolumeClaimResize
……
通過(guò)鍵值更新和查詢(xún)
批量數(shù)據(jù)加載數(shù)據(jù)
讀數(shù)一:MySQL QPS 在正常波動(dòng)范圍內(nèi);
讀數(shù)二:持續(xù)批量加載數(shù)據(jù),MySQL 文件系統(tǒng)容量不斷變大;
讀數(shù)三:在20分鐘內(nèi),在線動(dòng)態(tài)擴(kuò)容 Volume 和 Filesystem 2 次, 過(guò)程高效平滑。
目前 CSI 已發(fā)展到 0.2.0,0.3.0 也發(fā)布在即。
0.3.0 中呼聲最高的特性是 Snapshot。借助該功能,可以實(shí)現(xiàn)備份和異地容災(zāi)。但是為了實(shí)現(xiàn)該功能,在 Kubernetes 現(xiàn)有的 Control-Plane 上還要添加新的 Controller,客觀上,復(fù)雜度會(huì)進(jìn)一步提高。
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
| 作者簡(jiǎn)介
熊中哲,沃趣科技產(chǎn)品及研發(fā)負(fù)責(zé)人
曾就職于阿里巴巴和百度,超過(guò)10年關(guān)系型數(shù)據(jù)庫(kù)工作經(jīng)驗(yàn),目前致力于將云原生技術(shù)引入到關(guān)系型數(shù)據(jù)庫(kù)服務(wù)中。