Sidecar-詳解 JuiceFS CSI Driver 新模式

近期發(fā)布的 JuiceFS CSI Driver v0.18 版本中,我們提供了一種全新的方式訪問文件系統(tǒng),即 JuiceFS 客戶端以 Sidecar 方式運(yùn)行于應(yīng)用 Pod 中,且客戶端與應(yīng)用同生命周期

這個(gè)全新的功能將幫助用戶在 Serverless Kubernetes 環(huán)境中使用 JuiceFS;與傳統(tǒng)的 Mount Pod 模式相比,問題排查更方便、客戶端管理更簡(jiǎn)單。

今天在這篇文章中,將為大家介紹 Sidecar 模式的工作原理以及應(yīng)用場(chǎng)景, 另外在文末還附上了用戶關(guān)心的問題與解答。

What is a sidecar in cloud?
Sidecar 是一種常見的設(shè)計(jì)模式,這個(gè)概念在容器和微服務(wù)的領(lǐng)域中非常流行。回到 sidecar 的字面意思,如下圖所示,就是指摩托車邊上安裝的這個(gè)小車,以增加摩托車的承載能力,它非常形象地表達(dá)了Sidecar 容器和應(yīng)用容器的關(guān)系。在云環(huán)境中,他們成為一體,共享 Kubernetes pod 的環(huán)境,并且同一 pod 內(nèi)的所有容器生命周期一致。

基礎(chǔ)介紹

一些名詞解釋

? Pod:可以在 Kubernetes 中創(chuàng)建和管理的、最小的可部署的計(jì)算單元
? Deployment / DaemonSet / StatefulSet / Job:聲明式資源,對(duì) Pod 的不同管理方式
? PV(PersistentVolume):集群中的一塊存儲(chǔ)
? PVC(PersistentVolumeClaim):表達(dá)的是用戶對(duì)存儲(chǔ)的請(qǐng)求
? StorageClass:為管理員提供了描述存儲(chǔ) "類" 的方法
? CSI(Container Storage Interface):容器存儲(chǔ)接口

如何使用

存儲(chǔ)的管理是一個(gè)與計(jì)算實(shí)例的管理完全不同的問題。PV 表示的是集群中的一塊存儲(chǔ),可以由管理員事先創(chuàng)建;或者使用 StorageClass 來(lái)動(dòng)態(tài)創(chuàng)建,然后用戶在 Pod 中通過(guò)指定 PVC 來(lái)使用。根據(jù) PV 的創(chuàng)建方式,可以分為靜態(tài)配置和動(dòng)態(tài)配置兩種使用方式,下面一一介紹。

靜態(tài)配置
由系統(tǒng)管理員創(chuàng)建若干 PV,在 PV 中聲明包含了 JuiceFS 系統(tǒng)參數(shù)的 Secret,以備用戶使用。用戶創(chuàng)建 PVC,聲明使用具體的 PV,在應(yīng)用 Pod 中配置使用 PVC 即可。

資源間的關(guān)系如下圖所示:

靜態(tài)配置每一個(gè)應(yīng)用使用都需要系統(tǒng)管理員對(duì)應(yīng)創(chuàng)建一個(gè) PV,在簡(jiǎn)單測(cè)試場(chǎng)景或者應(yīng)用間數(shù)據(jù)共享時(shí)使用比較廣泛。

動(dòng)態(tài)配置
由系統(tǒng)管理員創(chuàng)建 StorageClass,在 StorageClass 中聲明包含了 JuiceFS 系統(tǒng)參數(shù)的 Secret;然后用戶創(chuàng)建 PVC,聲明使用具體的 StorageClass,PVC 創(chuàng)建之后,Kubernetes 會(huì)根據(jù) StorageClass 自動(dòng)創(chuàng)建出一個(gè) PV 與 PVC 進(jìn)行綁定,最后用戶在應(yīng)用 Pod 中配置使用 PVC。

資源間的關(guān)系如下圖所示:


JuiceFS CSI Driver 的工作原理

用戶通過(guò)在 PV / StorageClass 中指定 JuiceFS 的參數(shù),進(jìn)而在集群中使用 JuiceFS。JuiceFS CSI Driver 則負(fù)責(zé)掛載 JuiceFS 文件系統(tǒng)。

JuiceFS CSI Driver 提供了兩種方式掛載文件系統(tǒng),一種是現(xiàn)有的 Mount Pod 模式,另一種則是本次發(fā)布的版本中提供的 Sidecar 容器的方式。下面一一介紹兩種模式以及二者的對(duì)比。

Mount Pod 模式

組件
Mount Pod 模式涉及到的組件包括 CSI Controller Service 和 CSI Node Service,職責(zé)分別為:

? Controller Service:以 PV id 為名,在 JuiceFS 文件系統(tǒng)中創(chuàng)建子目錄。
? Node Service:創(chuàng)建 Mount Pod(JuiceFS 客戶端),并掛載應(yīng)用 Pod。下文會(huì)詳細(xì)介紹其工作機(jī)制。

這種模式對(duì)環(huán)境的要求:
? 可以使用 FUSE 設(shè)備,在容器中體現(xiàn)為需要特權(quán)(Privilege);
? 可以運(yùn)行 DaemonSet ,默認(rèn)每臺(tái)機(jī)器上都需要運(yùn)行一個(gè) CSI Node pod。

工作原理
CSI Node Service 的工作機(jī)制如下圖所示:

  1. 用戶創(chuàng)建應(yīng)用 Pod,Pod 中聲明使用 JuiceFS 的 PVC;
  2. CSI Node 負(fù)責(zé)在應(yīng)用 Pod 所在節(jié)點(diǎn)創(chuàng)建 Mount Pod;
  3. Mount Pod 啟動(dòng),執(zhí)行 JuiceFS 客戶端掛載,運(yùn)行 JuiceFS 客戶端,掛載路徑暴露在宿主機(jī)上;
  4. CSI Node 等待 Mount Pod 啟動(dòng)成功后,將 PV 對(duì)應(yīng)的 JuiceFS 子目錄 bind 到容器內(nèi),路徑為其聲明的 VolumeMount 路徑;
  5. Kubelet 創(chuàng)建應(yīng)用 Pod。

PVC 與 Mount Pod 的關(guān)系
PVC、PV 和 Pod 的關(guān)系可以用下圖表示,即在同一個(gè)節(jié)點(diǎn)上,一個(gè) PVC 會(huì)對(duì)應(yīng)一個(gè) Mount Pod。

Sidecar 模式

組件
JuiceFS FUSE 客戶端以 sidecar 容器的方式與應(yīng)用容器一起運(yùn)行在同一個(gè) Pod 中。

CSI Driver 組件只有 CSI Controller Service。其職責(zé)為:

  1. 以 PV id 為名在 JuiceFS 文件系統(tǒng)中創(chuàng)建子目錄;
  2. 向 ApiServer 注冊(cè) webhook,在 pod 中注入 JuiceFS 客戶端的 sidecar 容器。

工作原理
工作機(jī)制如下圖所示:

  1. CSI Controller 啟動(dòng)時(shí)向 ApiServer 注冊(cè) webhook;
  2. 應(yīng)用 Pod 指定使用 JuiceFS 的 PVC;
  3. ApiServer 在創(chuàng)建應(yīng)用 Pod 前調(diào)用 CSI Controller 的 webhook 接口;
  4. CSI Controller 向應(yīng)用 Pod 中注入 JuiceFS 客戶端容器(sidecar);
  5. ApiServer 創(chuàng)建 Pod,sidecar 容器啟動(dòng)后執(zhí)行掛載,并運(yùn)行 JuiceFS 客戶端,客戶端則按需訪問元數(shù)據(jù)引擎和對(duì)象存儲(chǔ);應(yīng)用容器啟動(dòng)后可直接訪問文件系統(tǒng)。

PVC 與 Sidecar 的關(guān)系
PVC、PV 和 Pod 的關(guān)系可以用下圖表示,即每個(gè)應(yīng)用 pod 單獨(dú)擁有自己的 JuiceFS 客戶端,應(yīng)用的掛載點(diǎn)相互隔離。

這種模式下,對(duì)環(huán)境的要求是可以使用 FUSE 設(shè)備,在容器中體現(xiàn)為需要特權(quán)(Privilege)容器。

Sidecar 容器的資源請(qǐng)求默認(rèn)為 1 CPU 和 1GiB 內(nèi)存,資源約束默認(rèn)為 2 CPU 和 5GiB 內(nèi)存。當(dāng)集群資源緊俏時(shí),我們還可以在 PV/StorageClass 中對(duì) Sidecar 容器的使用資源進(jìn)行配置。

另外,Sidecar 容器和應(yīng)用容器的掛載點(diǎn)共享是通過(guò) HostPath 實(shí)現(xiàn)的,不是直接共享,所以當(dāng) Sidecar 容器發(fā)生意外重啟后,應(yīng)用容器中的掛載點(diǎn)不會(huì)自行恢復(fù),需要整個(gè) Pod 重新創(chuàng)建。

兩種模式的優(yōu)缺點(diǎn)及使用場(chǎng)景

Sidecar 模式:

? 優(yōu)勢(shì):故障排查簡(jiǎn)單;所有環(huán)境都可用;
? 缺點(diǎn):資源開銷大,每個(gè)應(yīng)用 Pod 獨(dú)享 JuiceFS 客戶端;
? 使用場(chǎng)景:Serverless Kubernetes 環(huán)境(可以使用 FUSE);應(yīng)用任務(wù)量不大的標(biāo)準(zhǔn) Kubernetes 環(huán)境。

Mount Pod 模式:

? 優(yōu)勢(shì):資源開銷小,使用相同 PVC 的所用應(yīng)用 Pod 共享同一個(gè) JuiceFS 客戶端;
? 缺點(diǎn):故障排查復(fù)雜;Serverless 環(huán)境不可用。
? 使用場(chǎng)景:應(yīng)用任務(wù)較多、標(biāo)準(zhǔn)的 Kubernetes 環(huán)境。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容