主頁 >  其他 > 從零開始入門 K8s | 應用存盤和持久化資料卷:核心知識

從零開始入門 K8s | 應用存盤和持久化資料卷:核心知識

2020-09-17 03:43:18 其他

作者 | 至天 阿里巴巴高級研發工程師

一、Volumes 介紹

Pod Volumes

首先來看一下 Pod Volumes 的使用場景:

  • 場景一:如果 pod 中的某一個容器在運行時例外退出,被 kubelet 重新拉起之后,如何保證之前容器產生的重要資料沒有丟失?
  • 場景二:如果同一個 pod 中的多個容器想要共享資料,應該如何去做?

以上兩個場景,其實都可以借助 Volumes 來很好地解決,接下來首先看一下 Pod Volumes 的常見型別:

  1. 本地存盤,常用的有 emptydir/hostpath;
  2. 網路存盤:網路存盤當前的實作方式有兩種,一種是 in-tree,它的實作代碼是放在 K8s 代碼倉庫中的,隨著 K8s 對存盤型別支持的增多,這種方式會給 K8s 本身的維護和發展帶來很大的負擔;而第二種實作方式是 out-of-tree,它的實作其實是給 K8s 本身解耦的,通過抽象介面將不同存盤的 driver 實作從 K8s 代碼倉庫中剝離,因此 out-of-tree 是后面社區主推的一種實作網路存盤插件的方式;
  3. Projected Volumes:它其實是將一些配置資訊,如 secret/configmap 用卷的形式掛載在容器中,讓容器中的程式可以通過 POSIX 介面來訪問配置資料;
  4. PV 與 PVC 就是今天要重點介紹的內容,

Persistent Volumes

接下來看一下 PV(Persistent Volumes),既然已經有了 Pod Volumes,為什么又要引入 PV 呢?我們知道 pod 中宣告的 volume 生命周期與 pod 是相同的,以下有幾種常見的場景:

  • 場景一:pod 重建銷毀,如用 Deployment 管理的 pod,在做鏡像升級的程序中,會產生新的 pod并且洗掉舊的 pod ,那新舊 pod 之間如何復用資料?
  • 場景二:宿主機宕機的時候,要把上面的 pod 遷移,這個時候 StatefulSet 管理的 pod,其實已經實作了帶卷遷移的語意,這時通過 Pod Volumes 顯然是做不到的;
  • 場景三:多個 pod 之間,如果想要共享資料,應該如何去宣告呢?我們知道,同一個 pod 中多個容器想共享資料,可以借助 Pod Volumes 來解決;當多個 pod 想共享資料時,Pod Volumes 就很難去表達這種語意;
  • 場景四:如果要想對資料卷做一些功能擴展性,如:snapshot、resize 這些功能,又應該如何去做呢?

以上場景中,通過 Pod Volumes 很難準確地表達它的復用/共享語意,對它的擴展也比較困難,因此 K8s 中又引入了 **Persistent Volumes **概念,它可以將存盤和計算分離,通過不同的組件來管理存盤資源和計算資源,然后解耦 pod 和 Volume 之間生命周期的關聯,這樣,當把 pod 洗掉之后,它使用的 PV 仍然存在,還可以被新建的 pod 復用,

PVC 設計意圖

了解 PV 后,應該如何使用它呢?

用戶在使用 PV 時其實是通過 PVC,為什么有了 PV 又設計了 PVC 呢?主要原因是為了簡化 K8s 用戶對存盤的使用方式,做到職責分離,通常用戶在使用存盤的時候,只用宣告所需的存盤大小以及訪問模式,

訪問模式是什么?其實就是:我要使用的存盤是可以被多個 node 共享還是只能單 node 獨占訪問(注意是 node level 而不是 pod level)?只讀還是讀寫訪問?用戶只用關心這些東西,與存盤相關的實作細節是不需要關心的,

通過 PVC 和 PV 的概念,將用戶需求和實作細節解耦開,用戶只用通過 PVC 宣告自己的存盤需求,PV是有集群管理員和存盤相關團隊來統一運維和管控,這樣的話,就簡化了用戶使用存盤的方式,可以看到,PV 和 PVC 的設計其實有點像面向物件的介面與實作的關系,用戶在使用功能時,只需關心用戶介面,不需關心它內部復雜的實作細節,

既然 PV 是由集群管理員統一管控的,接下來就看一下 PV 這個物件是怎么產生的,

Static Volume Provisioning

第一種產生方式:靜態產生方式 - 靜態 Provisioning,

靜態 Provisioning:由集群管理員事先去規劃這個集群中的用戶會怎樣使用存盤,它會先預分配一些存盤,也就是預先創建一些 PV;然后用戶在提交自己的存盤需求(也就是 PVC)的時候,K8s 內部相關組件會幫助它把 PVC 和 PV 做系結;之后用戶再通過 pod 去使用存盤的時候,就可以通過 PVC 找到相應的 PV,它就可以使用了,

靜態產生方式有什么不足呢?可以看到,首先需要集群管理員預分配,預分配其實是很難預測用戶真實需求的,舉一個最簡單的例子:如果用戶需要的是 20G,然而集群管理員在分配的時候可能有 80G 、100G 的,但沒有 20G 的,這樣就很難滿足用戶的真實需求,也會造成資源浪費,有沒有更好的方式呢?

Dynamic Volume Provisioning

第二種訪問方式:動態 Dynamic Provisioning,

動態供給是什么意思呢?就是說現在集群管理員不預分配 PV,他寫了一個模板檔案,這個模板檔案是用來表示創建某一型別存盤(塊存盤,檔案存盤等)所需的一些引數,這些引數是用戶不關心的,給存盤本身實作有關的引數,用戶只需要提交自身的存盤需求,也就是 PVC 檔案,并在 PVC 中指定使用的存盤模板(StorageClass),

K8s 集群中的管控組件,會結合 PVC 和 StorageClass 的資訊動態,生成用戶所需要的存盤(PV),將 PVC 和 PV 進行系結后,pod 就可以使用 PV 了,通過 StorageClass 配置生成存盤所需要的存盤模板,再結合用戶的需求動態創建 PV 物件,做到按需分配,在沒有增加用戶使用難度的同時也解放了集群管理員的運維作業,

二、用例解讀

接下來看一下 Pod Volumes、PV、PVC 及 StorageClass 具體是如何使用的,

Pod Volumes 的使用

首先來看一下 Pod Volumes 的使用,如上圖左側所示,我們可以在 pod yaml 檔案中的 Volumes 欄位中,宣告我們卷的名字以及卷的型別,宣告的兩個卷,一個是用的是 emptyDir,另外一個用的是 hostPath,這兩種都是本地卷,在容器中應該怎么去使用這個卷呢?它其實可以通過 volumeMounts 這個欄位,volumeMounts 欄位里面指定的 name 其實就是它使用的哪個卷,mountPath 就是容器中的掛載路徑,

這里還有個 subPath,subPath 是什么?

先看一下,這兩個容器都指定使用了同一個卷,就是這個 cache-volume,那么,在多個容器共享同一個卷的時候,為了隔離資料,我們可以通過 subPath 來完成這個操作,它會在卷里面建立兩個子目錄,然后容器 1 往 cache 下面寫的資料其實都寫在子目錄 cache1 了,容器 2 往 cache 寫的目錄,其資料最侄訓落在這個卷里子目錄下面的 cache2 下,

還有一個 readOnly 欄位,readOnly 的意思其實就是只讀掛載,這個掛載你往掛載點下面實際上是沒有辦法去寫資料的,

另外 emptyDir、hostPath 都是本地存盤,它們之間有什么細微的差別呢?emptyDir 其實是在 pod 創建的程序中會臨時創建的一個目錄,這個目錄隨著 pod 洗掉也會被洗掉,里面的資料會被清空掉;hostPath 顧名思義,其實就是宿主機上的一個路徑,在 pod 洗掉之后,這個目錄還是存在的,它的資料也不會被丟失,這就是它們兩者之間一個細微的差別,

靜態 PV 使用

接下來再看一下,PV 和 PVC 是怎么使用的,

先看一個靜態 PV 創建方式,靜態 PV 的話,首先是由管理員來創建的,管理員我們這里以 NAS,就是阿里云檔案存盤為例,我需要先在阿里云的檔案存盤控制臺上去創建 NAS 存盤,然后把 NAS 存盤的相關資訊要填到 PV 物件中,這個 PV 物件預創建出來后,用戶可以通過 PVC 來宣告自己的存盤需求,然后再去創建 pod,創建 pod 還是通過我們剛才講解的欄位把存盤掛載到某一個容器中的某一個掛載點下面,

那么接下來看一下 yaml 怎么寫,集群管理員首先是在云存盤廠商那邊先去把存盤創建出來,然后把相應的資訊填寫到 PV 物件中,

剛剛創建的阿里云 NAS 檔案存盤對應的 PV,有個比較重要的欄位:capacity,即創建的這個存盤的大小,accessModes,創建出來的這個存盤它的訪問方式,我們后面會講解總共有幾種訪問方式,

然后有個 ReclaimPolicy,ReclaimPolicy 的意思就是:這塊存盤在被使用后,等它的使用方 pod 以及 PVC 被洗掉之后,這個 PV 是應該被刪掉還是被保留呢?其實就是 PV 的回收策略,

接下來看看用戶怎么去使用該 PV 物件,用戶在使用存盤的時候,需要先創建一個 PVC 物件,PVC 物件里面,只需要指定存盤需求,不用關心存盤本身的具體實作細節,存盤需求包括哪些呢?首先是需要的大小,也就是 resources.requests.storage;然后是它的訪問方式,即需要這個存盤的訪問方式,這里宣告為 ReadWriteMany,也即支持多 node 讀寫訪問,這也是檔案存盤的典型特性,

上圖中左側,可以看到這個宣告:它的 size 和它的access mode,跟我們剛才靜態創建這塊 PV 其實是匹配的,這樣的話,當用戶在提交 PVC 的時候,K8s 集群相關的組件就會把 PV 的 PVC bound 到一起,之后,用戶在提交 pod yaml 的時候,可以在卷里面寫上 PVC 宣告,在 PVC 宣告里面可以通過 claimName 來宣告要用哪個 PVC,這時,掛載方式其實跟前面講的一樣,當提交完 yaml 的時候,它可以通過 PVC 找到 bound 著的那個 PV,然后就可以用那塊存盤了,這是靜態 Provisioning 到被 pod 使用的一個程序,

動態 PV 使用

然后再看一下動態 Provisioning,動態 Provisioning 上面提到過,系統管理員不再預分配 PV,而只是創建一個模板檔案,

這個模板檔案叫 StorageClass,在 StorageClass 里面,我們需要填的重要資訊:第一個是 provisioner,provisioner 是什么?它其實就是說我當時創建 PV 和對應的存盤的時候,應該用哪個存盤插件來去創建,

這些引數是通過 K8s 創建存盤的時候,需要指定的一些細節引數,對于這些引數,用戶是不需要關心的,像這里 regionld、zoneld、fsType 和它的型別,ReclaimPolicy 跟我們剛才講解的 PV 里的意思是一樣的,就是說動態創建出來的這塊 PV,當使用方使用結束、Pod 及 PVC 被洗掉后,這塊 PV 應該怎么處理,我們這個地方寫的是 delete,意思就是說當使用方 pod 和 PVC 被洗掉之后,這個 PV 也會被洗掉掉,

接下來看一下,集群管理員提交完 StorageClass,也就是提交創建 PV 的模板之后,用戶怎么用,首先還是需要寫一個 PVC 的檔案,

PVC 的檔案里存盤的大小、訪問模式是不變的,現在需要新加一個欄位,叫 StorageClassName,它的意思是指定動態創建 PV 的模板檔案的名字,這里 StorageClassName 填的就是上面宣告的 csi-disk,

在提交完 PVC之后,K8s 集群中的相關組件就會根據 PVC 以及對應的 StorageClass 動態生成這塊 PV 給這個 PVC 做一個系結,之后用戶在提交自己的 yaml 時,用法和接下來的流程和前面的靜態使用方式是一樣的,通過 PVC 找到我們動態創建的 PV,然后把它掛載到相應的容器中就可以使用了,

PV Spec 重要欄位決議

接下來,我們講解一下 PV 的一些重要欄位:

  • Capacity:這個很好理解,就是存盤物件的大小;
  • AccessModes:也是用戶需要關心的,就是說我使用這個 PV 的方式,它有三種使用方式,
    • 一種是單 node 讀寫訪問;
    • 第二種是多個 node 只讀訪問,是常見的一種資料的共享方式;
    • 第三種是多個 node 上讀寫訪問,

用戶在提交 PVC 的時候,最重要的兩個欄位 —— Capacity 和 AccessModes,在提交 PVC后,K8s 集群中的相關組件是如何去找到合適的 PV 呢?首先它是通過為 PV 建立的 AccessModes 索引找到所有能夠滿足用戶的 PVC 里面的 AccessModes 要求的 PV list,然后根據 PVC 的 Capacity,StorageClassName, Label Selector 進一步篩選 PV,如果滿足條件的 PV 有多個,選擇 PV 的 size 最小的,accessmodes 串列最短的 PV,也即最小適合原則,

  • ReclaimPolicy:這個就是剛才提到的,我的用戶方 PV 的 PVC 在洗掉之后,我的 PV 應該做如何處理?常見的有三種方式,
    • 第一種方式我們就不說了,現在 K8s 中已經不推薦使用了;
    • 第二種方式 delete,也就是說 PVC 被洗掉之后,PV 也會被洗掉;
    • 第三種方式 Retain,就是保留,保留之后,后面這個 PV 需要管理員來手動處理;
  • StorageClassName:StorageClassName 這個我們剛才說了,我們動態 Provisioning 時必須指定的一個欄位,就是說我們要指定到呼叫哪一個模板檔案來生成 PV ;
  • NodeAffinity:就是說我創建出來的 PV,它能被哪些 node 去掛載使用,其實是有限制的,然后通過 NodeAffinity 來宣告對node的限制,這樣其實對 使用該 PV 的 pod 調度也有限制,就是說 pod 必須要調度到這些能訪問 PV 的 node 上,才能使用這塊 PV,這個欄位在我們下一講講解存盤拓撲調度時在細說,

PV 狀態流轉

接下來我們看一下 PV 的狀態流轉,首先在創建 PV 物件后,它會處在短暫的pending 狀態;等真正的 PV 創建好之后,它就處在 available 狀態,

available 狀態意思就是可以使用的狀態,用戶在提交 PVC 之后,被 K8s 相關組件做完 bound(即:找到相應的 PV),這個時候 PV 和 PVC 就結合到一起了,此時兩者都處在 bound 狀態,當用戶在使用完 PVC,將其洗掉后,這個 PV 就處在 released 狀態,之后它應該被洗掉還是被保留呢?這個就會依賴我們剛才說的 ReclaimPolicy,

這里有一個點需要特別說明一下:當 PV 已經處在 released 狀態下,它是沒有辦法直接回到 available 狀態,也就是說接下來無法被一個新的 PVC 去做系結,如果我們想把已經 released 的 PV 復用,我們這個時候通常應該怎么去做呢?

第一種方式:我們可以新建一個 PV 物件,然后把之前的 released 的 PV 的相關欄位的資訊填到新的 PV 物件里面,這樣的話,這個 PV 就可以結合新的 PVC 了;第二種是我們在洗掉 pod 之后,不要去洗掉 PVC 物件,這樣給 PV 系結的 PVC 還是存在的,下次 pod 使用的時候,就可以直接通過 PVC 去復用,K8s 中的 StatefulSet 管理的 Pod 帶存盤的遷移就是通過這種方式,

三、操作演示

接下來,我會在實際的環境中給大家演示一下,靜態 Provisioning 以及動態 Provisioning 具體操作方式,

靜態 Provisioning 例子

靜態 Provisioning 主要用的是阿里云的 NAS 檔案存盤;動態 Provisioning 主要用了阿里云的云盤,它們需要相應存盤插件,插件我已經提前部署在我的 K8s 集群中了(csi-nasplugin* 是為了在 K8s 中使用阿里云 NAS 所需的插件,csi-disk *是為了在 K8s 中使用阿里云云盤所需要的插件),

我們接下來先看一下靜態 Provisioning 的 PV 的 yaml 檔案,

volumeAttributes 是我在阿里云 nas 控制臺預先創建的 NAS 檔案系統的相關資訊,我們主要需要關心的有 capacity 為 5Gi; accessModes 為多 node 讀寫訪問; reclaimPolicy:Retain,也就是當我使用方的 PVC 被洗掉之后,我這個 PV 是要保留下來的;以及在使用這個卷的程序中使用的 driver,

然后我們把對應的 PV 創建出來:

我們看一下上圖 PV 的狀態,已經處在 Available,也就是說它已經可以被使用了,

再創建出來 nas-pvc:

我們看這個時候 PVC 已經新創建出來了,而且也已經和我們上面創建的 PV 系結到一起了,我們看一下 PVC 的 yaml 里面寫的什么,

其實很簡單 ,就是我需要的大小以及我需要的 accessModes,提交完之后,它就與我們集群中已經存在的 PV 做匹配,匹配成功之后,它就會做 bound,

接下來我們去創建使用 nas-fs 的 pod:

上圖看到,這兩個 Pod 都已經處在 running 狀態了,

我們先看一下這個 pod yaml:

pod yaml 里面宣告了剛才我們創建出來的 PVC 物件,然后把它掛載到 nas-container 容器中的 /data 下面,我們這個 pod 是通過 deployment 創建兩個副本,通過反親和性,將兩個副本調度在不同的 node 上面,

上圖我們可以看一下,兩個 Pod 所在的宿主機是不一樣的,

如下圖所示:我們登陸到第一個上面,findmnt 看一下它的掛載資訊,這個其實就掛載在我宣告的 nas-fs 上,那我們再在下面 touch 個 test.test.test 檔案,我們也會登陸到另外一個容器,看一下它有沒有被共享,

我們退出再登陸另外一個 pod(剛才登陸的是第一個,現在登陸第二個),

如下圖所示:我們也 findmnt 一下,可以看到,這兩個 pod 的遠程掛載路徑一樣,也就是說我們用的是同一個 NAS PV,我們再看一下剛才創建出來的那個是否存在,

可以看到,這個也是存在的,就說明這兩個運行在不同node上的 pod 共享了同一個 nas 存盤,

接下來我們看一下把兩個 pod 刪掉之后的情況,先刪 Pod,接著再刪一下對應的 PVC(K8s 內部對 pvc 物件由保護機制,在洗掉 pvc 物件時如果發現有 pod 在使用 pvc,pvc 是洗掉不掉的),這個可能要稍等一下,

看一下下圖對應的 PVC 是不是已經被刪掉了,

上圖顯示,它已經被刪掉了,再看一下,剛才的 nas PV 還是在的,它的狀態是處在 Released 狀態,也就是說剛才使用它的 PVC 已經被刪掉了,然后它被 released 了,又因為我們 RECLAIN POLICY 是 Retain,所以它這個 PV 是被保留下來的,

動態 Provisioning 例子

接下來我們來看第二個例子,動態 Provisioning 的例子,我們先把保留下來的 PV 手動刪掉,可以看到集群中沒有 PV了,接下來演示一下動態 Provisioning,

首先,先去創建一個生成 PV 的模板檔案,也就是 storageclass,看一下 storageclass 里面的內容,其實很簡單,

如上圖所示,我事先指定的是我要創建存盤的卷插件(阿里云云盤插件,由阿里云團隊開發),這個我們已經提前部署好了;我們可以看到,parameters部分是創建存盤所需要的一些引數,但是用戶不需要關心這些資訊;然后是 reclaimPolicy,也就是說通過這個 storageclass 創建出來的 PV 在給系結到一起的 PVC 洗掉之后,它是要保留還是要洗掉,

如上圖所示:現在這個集群中是沒有 PV 的,我們動態提交一個 PVC 檔案,先看一下它的 PVC 檔案,它的 accessModes-ReadWriteOnce (因為阿里云云盤其實只能是單 node 讀寫的,所以我們宣告這樣的方式),它的存盤大小需求是 30G,它的 storageClassName 是 csi-disk,就是我們剛才創建的 storageclass,也就是說它指定要通過這個模板去生成 PV,

這個 PVC 此時正處在 pending 狀態,這就說明它對應的 PV 還在創建程序中,

稍過一會,我們看到已經有一個新的 PV 生成,這個 PV 其實就是根據我們提交的 PVC 以及 PVC 里面指定的storageclass 動態生成的,之后 K8s 會將生成的 PV 以及我們提交的 PVC,就是這個 disk PVC 做系結,之后我們就可以通過創建 pod 來使用了,

再看一下 pod yaml:

pod yaml 很簡單,也是通過 PVC 宣告,表明使用這個 PVC,然后是掛載點,下面我們可以創建看一下,

如下圖所示:我們可以大概看一下 Events,首先被調度器調度,調度完之后,接下來會有個 attachdetach controller,它會去做 disk 的 attach 操作,就是把我們對應的 PV 掛載到調度器調度的 node 上,然后Pod對應的容器才能啟動,啟動容器才能使用對應的盤,

接下來我會把 PVC 刪掉,看一下 PV 會不會根據我們的 reclaimPolicy 隨之刪掉呢?我們先看一下,這個時候 PVC 還是存在的,對應的 PV 也是存在的,

然后刪一下 PVC,刪完之后再看一下:我們的 PV 也被刪了,也就是說根據 reclaimPolicy,我們在洗掉 PVC 的同時,PV 也會被洗掉掉,

我們的演示部分就到這里了,

四、架構設計

PV 和 PVC 的處理流程

我們接下來看一下 K8s 中的 PV 和 PVC 體系的完整處理流程,我首先看一下這張圖的右下部分里面提到的 csi,

csi 是什么?csi 的全稱是 container storage interface,它是 K8s 社區后面對存盤插件實作 ( out of tree ) 的官方推薦方式,csi 的實作大體可以分為兩部分:

  • 第一部分是由 k8s 社區驅動實作的通用的部分,像我們這張圖中的 csi-provisioner和 csi-attacher controller;
  • 另外一種是由云存盤廠商實踐的,對接云存盤廠商的 OpenApi,主要是實作真正的 create/delete/mount/unmount 存盤的相關操作,對應到上圖中的 csi-controller-server 和 csi-node-server,

接下來看一下,當用戶提交 yaml 之后,k8s 內部的處理流程,用戶在提交 PVCyaml 的時候,首先會在集群中生成一個 PVC 物件,然后 PVC 物件會被 csi-provisioner controller watch 到,csi-provisioner 會結合 PVC 物件以及 PVC 物件中宣告的 storageClass,通過 GRPC 呼叫 csi-controller-server,然后,到云存盤服務這邊去創建真正的存盤,并最終創建出來 PV 物件,最后,由集群中的 PV controller 將 PVC 和 PV 物件做 bound 之后,這個 PV 就可以被使用了,

用戶在提交 pod 之后,首先會被調度器調度選中某一個合適的node,之后該 node 上面的 kubelet 在創建 pod 流程中會通過首先 csi-node-server 將我們之前創建的 PV 掛載到我們 pod 可以使用的路徑,然后 kubelet 開始 create && start pod 中的所有 container,

PV、PVC 以及通過 csi 使用存盤流程

我們接下來通過另一張圖來更加詳細看一下我們 PV、PVC 以及通過 CSI 使用存盤的完整流程,

主要分為三個階段:

  • 第一個階段(Create 階段)是用戶提交完 PVC,由 csi-provisioner 創建存盤,并生成 PV 物件,之后 PV controller 將 PVC 及生成的 PV 物件做 bound,bound 之后,create 階段就完成了;
  • 之后用戶在提交 pod yaml 的時候,首先會被調度選中某一個合適的 node,等 pod 的運行 node 被選出來之后,會被 AD Controller watch 到 pod 選中的 node,它會去查找 pod 中使用了哪些 PV,然后它會生成一個內部的物件叫 VolumeAttachment 物件,從而去觸發 csi-attacher去呼叫 csi-controller-server 去做真正的 attache 操作,attach 操作調到云存盤廠商 OpenAPI,這個 attach 操作就是將存盤 attach到 pod 將會運行的 node 上面,第二個階段 —— attach 階段完成;
  • 然后我們接下來看第三個階段,第三個階段發生在 kubelet 創建 pod 的程序中,它在創建 pod 的程序中,首先要去做一個 mount,這里的 mount 操作是為了將已經 attach 到這個 node 上面那塊盤,進一步 mount 到 pod 可以使用的一個具體路徑,之后 kubelet 才開始創建并啟動容器,這就是 PV 加 PVC 創建存盤以及使用存盤的第三個階段 —— mount 階段,

總的來說,有三個階段:第一個 create 階段,主要是創建存盤;第二個 attach 階段,就是將那塊存盤掛載到 node 上面(通常為將存盤 load 到 node 的 /dev 下面);第三個 mount 階段,將對應的存盤進一步掛載到 pod 可以使用的路徑,這就是我們的 PVC、PV、已經通過 CSI 實作的卷從創建到使用的完整流程,

本文總結

本文內容就到此為止了,這里為大家簡單總結一下:

  • 介紹了 K8s Volume 的使用場景,以及本身局限性;
  • 通過介紹 K8s 的 PVC 和 PV 體系,說明 K8s 通過 PVC 和 PV 體系增強了 K8s Volumes 在多 Pod 共享/遷移/存盤擴展等場景下的能力的必要性以及設計思想;
  • 通過介紹 PV(存盤)的不同供給模式 (static and dynamic),學習了如何通過不同方式為集群中的 Pod 供給所需的存盤;
  • 通過 PVC&PV 在 K8s 中完整的處理流程,深入理解 PVC&PV 的作業原理 ,

阿里巴巴云原生微信公眾號(ID:Alicloudnative)關注微服務、Serverless、容器、Service Mesh等技術領域、聚焦云原生流行技術趨勢、云原生大規模的落地實踐,做最懂云原生開發者的技術公眾號,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/62099.html

標籤:其他

上一篇:創建KVM虛擬機

下一篇:MapReduce案例-好友推薦

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more