Kubernetes 數(shù)據(jù)持久化之Persistent 數(shù)據(jù)卷類型

PersistentVolume(PV存儲卷) 是集群中的一塊存儲空間,由集群管理員管理或者由Storage class(存儲類)自動管理,PV和Pod,deployment,service 一樣,都是一個資源對象
既然有了PV概念,PVC(PersistentVolumeClaim) 也說明下,PVC代表用戶使用存儲的請求,應用申請PV持久化空間的一個申請、聲明共啃。K8S集群可能會有多個PV,需要不停的為不同的應用創(chuàng)建多個PV。
比如: Pod是消耗node節(jié)點的計算資源,而PVC 存儲券聲明是消耗PV的存儲資源返帕。Pod可以請求的是特定數(shù)量的計算資源(CPU或內存等),而PVC 請求的是特定大小或特定訪問模式(只能被單節(jié)點讀寫/可被多節(jié)點只讀/可與被多節(jié)點讀寫)的存儲資源夫嗓。

PV和PVC 關系

PV(存儲卷)和PVC(存儲卷聲明)關系如下圖:


image.png
1. PV 是集群中的存儲資源,通常是由集群管理員創(chuàng)建和管理
2. StorageClass 用于對PV進行分類,如果配置正常迟螺,Storage也可以根據(jù)PVC的請求動態(tài)創(chuàng)建PV
3. PVC 是使用該資源的請求,通常由應用程序提出請求,并指定對應的StorageClass和需求空間大小
4. PVC 可以作為數(shù)據(jù)卷的一種,被掛載到Pod中使用

存儲卷(PVC)的管理過程

PV和PVC的管理過程如下:
1. 在主機上劃分一個單獨的目錄用于PV使用,并且定義其可用大小
2. 創(chuàng)建PVC資源對象,以便請求PV的存儲空間
3. Pod中添加數(shù)據(jù)卷,數(shù)據(jù)卷關聯(lián)PVC
4. PVC 中包含容器,容器掛載數(shù)據(jù)卷

PVC配置

底層存儲用NFS存儲,然后NFS 目錄互粉1G的容量提供PV 調度.然后通過創(chuàng)建PVC來申請PV的存儲資源空間舍咖,最后創(chuàng)建Pod 測試,使用PVC聲明的存儲資源來實現(xiàn)數(shù)據(jù)的持久化煮仇。

1、搭建nfs存儲

# yum -y install nfs-utils
[root@master ~]# systemctl enable rpcbind
[root@master ~]# vim /etc/exports
/nfsdata *(rw,sync,no_root_squash)
[root@master ~]# systemctl start nfs-server
[root@master ~]# systemctl enable nfs-server
[root@master ~]# showmount -e
Export list for master:
/nfsdata *

2谎仲、創(chuàng)建PV資源對象

# vim test-pv.yaml    #編輯PV的yaml文件

apiVersion: v1
kind: PersistentVolume
metadata:
  name: test-pv
spec:
  capacity:
    storage: 1Gi          #該PV可分配的容量為1G
  accessModes:
    - ReadWriteOnce              #訪問模式為只能以讀寫的方式掛載到單個節(jié)點
  persistentVolumeReclaimPolicy: Recycle   #回收策略為Recycle
  storageClassName: nfs            #定義存儲類名字
  nfs:                                #這里和上面定義的存儲類名字需要一致
    path: /nfsdata/test-pv       #指定nfs的目錄
    server: 192.168.20.6           #nfs服務器的IP
#關于上述的具體解釋
#capacity:指定PV的大小
#AccessModes:指定訪問模式
    #ReadWriteOnce:只能以讀寫的方式掛載到單個節(jié)點(單個節(jié)點意味著只能被單個PVC聲明使用)
    #ReadOnlyMany:能以只讀的方式掛載到多個節(jié)點
    #ReadWriteMany:能以讀寫的方式掛載到多個節(jié)點
#persistentVolumeReclaimPolicy:PV的回收策略
    #Recycle:清除PV中的數(shù)據(jù),然后自動回收刨仑。
    #Retain:需要手動回收郑诺。
    #Delete:刪除云存儲資源。(云存儲專用)
    #PS:注意這里的回收策略是指杉武,在PV被刪除后辙诞,在這個PV下所存儲的源文件是否刪除。
#storageClassName:PV和PVC關聯(lián)的依據(jù)轻抱。
[root@master ~]# kubectl apply -f test-pv.yaml     #執(zhí)行yaml文件
[root@master ~]# kubectl get pv test-pv    #既然PV是一個資源對象飞涂,那么自然可以通過此方式查看其狀態(tài)
NAME      CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
test-pv   1Gi        RWO            Recycle          Available           nfs                     38s
#查看PV的狀態(tài)必須為Available才可以正常使用

3、創(chuàng)建PVC資源對象

#cat test-pvc.yaml         #編寫yaml文件

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: test-pvc
spec:
  accessModes:          #定義訪問模式祈搜,必須和PV定義的訪問模式一致
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi          #直接請求使用最大的容量
  storageClassName: nfs      #這里的名字必須和PV定義的名字一致
[root@master ~]# kubectl apply -f test-pvc.yaml     #執(zhí)行yaml文件

#再次查看PV及PVC的狀態(tài)(狀態(tài)為bound较店,表示該PV正在被使用)
[root@master ~]# kubectl get pvc      #查看PVC的狀態(tài)
NAME       STATUS   VOLUME    CAPACITY   ACCESS MODES   STORAGECLASS   AGE
test-pvc   Bound    test-pv   1Gi        RWO            nfs            2m10s
[root@master ~]# kubectl get pv      #查看PV的狀態(tài)
NAME      CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM              STORAGECLASS   REASON   AGE
test-pv   1Gi        RWO            Recycle          Bound    default/test-pvc   nfs                     8m24s

4、 創(chuàng)建一個Pod

 test-pod.yaml       #編寫pod的yaml文件
apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
  - name: test-pod
    image: busybox
    args:
    - /bin/sh
    - -c
    - sleep 30000
    volumeMounts:
    - mountPath: /testdata
      name: volumedata     #這里自定義個名稱
  volumes:
    - name: volumedata      #這里的是上面定義的名稱解釋容燕,這兩個名稱必須一致
      persistentVolumeClaim:
        claimName: test-pvc
[root@master ~]# kubectl apply -f test-pod.yaml        #執(zhí)行yaml文件
[root@master ~]# kubectl get pod     #查看pod的狀態(tài)梁呈,發(fā)現(xiàn)其一直處于ContainerCreating狀態(tài)
#怎么回事呢?
NAME       READY   STATUS              RESTARTS   AGE
test-pod   0/1     ContainerCreating   0          23s
#當遇到pod狀態(tài)不正常時蘸秘,一般我們可以采用三種方式來排錯
#第一就是使用kubectl  describe命令來查看pod的詳細信息
#第二就是使用kubectl logs命令來查看pod的日志
#第三就是查看宿主機本機的message日志
#這里我采用第一種方法排錯
[root@master ~]# kubectl describe pod test-pod
#輸出的最后一條信息如下:
mount.nfs: mounting 192.168.20.6:/nfsdata/test-pv failed, reason given by server: No such file or directory
#原來是我們在掛載nfs存儲目錄時官卡,指定的目錄并不存在
#那就在nfs服務器上(這里是本機)進行創(chuàng)建相關目錄咯
[root@master ~]# mkdir -p /nfsdata/test-pv      #創(chuàng)建對應目錄
[root@master ~]# kubectl get pod test-pod   #然后再次查看pod的狀態(tài)
#如果pod的狀態(tài)還是正在創(chuàng)建,那么就是因為運行該pod的節(jié)點上的kubelet組件還沒有反應過來
#如果要追求pod的啟動速度醋虏,可以手動將pod所在節(jié)點的kubelet組件進行重啟即可寻咒。
[root@master ~]# kubectl get pod test-pod    #稍等片刻,再次查看颈嚼,發(fā)現(xiàn)其pod已經(jīng)running了
NAME       READY   STATUS    RESTARTS   AGE
test-pod   1/1     Running   0          8m

5毛秘、測試其數(shù)據(jù)持久化的效果

# kubectl exec -it test-pod /bin/sh   #進入pod
/ # echo "test pv pvc" > /testdata/test.txt       #向數(shù)據(jù)持久化的目錄寫入測試信息
#回到nfs服務器,查看共享的目錄下是否有容器中寫入的信息
[root@master ~]# cat /nfsdata/test-pv/test.txt   #確定是有的
test pv pvc
#現(xiàn)在查看到pod容器的所在節(jié)點粘舟,然后到對應節(jié)點將其刪除
[root@master ~]# kubectl get pod -o wide       #我這里是運行在node02節(jié)點
NAME       READY   STATUS    RESTARTS   AGE   IP           NODE     NOMINATED NODE   READINESS GATES
test-pod   1/1     Running   0          11m   10.244.2.2   node02   <none>           <none>
#在node02節(jié)點查看到其pod容器的ID號熔脂,然后將其刪除
[root@node02 ~]# docker ps      #獲取容器的ID號
[root@node02 ~]# docker rm -f dd445dce9530   #刪除剛剛創(chuàng)建的容器
#回到nfs服務器佩研,發(fā)現(xiàn)其本地目錄下的數(shù)據(jù)還是在的
[root@master ~]# cat /nfsdata/test-pv/test.txt 
test pv pvc
#那么現(xiàn)在測試,將這個pod刪除霞揉,nfs本地的數(shù)據(jù)是否還在旬薯?
[root@master ~]# kubectl delete -f test-pod.yaml 
[root@master ~]# cat /nfsdata/test-pv/test.txt      #哦吼,數(shù)據(jù)還在
test pv pvc
#那現(xiàn)在要是將PVC刪除呢适秩?
[root@master ~]# kubectl delete -f test-pvc.yaml 
[root@master ~]# cat /nfsdata/test-pv/test.txt       #哦吼绊序,數(shù)據(jù)不在了。
cat: /nfsdata/test-pv/test.txt: 沒有那個文件或目錄

總結

由于我們在創(chuàng)建pv這個資源對象時秽荞,采用的回收策略是清除PV中的數(shù)據(jù)骤公,然后自動回收,而PV這個資源對象是由PVC來申請使用的扬跋,所以不管是容器也好阶捆,pod也好,它們的銷毀并不會影響用于實現(xiàn)數(shù)據(jù)持久化的nfs本地目錄下的數(shù)據(jù)钦听,但是洒试,一旦這個PVC被刪除,那么本地的數(shù)據(jù)就會隨著PVC的銷毀而不復存在朴上,也就是說垒棋,采用PV這種數(shù)據(jù)卷來實現(xiàn)數(shù)據(jù)的持久化,它這個數(shù)據(jù)持久化的生命周期是和PVC的生命周期是一致的痪宰。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末叼架,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子衣撬,更是在濱河造成了極大的恐慌乖订,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件淮韭,死亡現(xiàn)場離奇詭異垢粮,居然都是意外死亡,警方通過查閱死者的電腦和手機靠粪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門蜡吧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人占键,你說我怎么就攤上這事昔善。” “怎么了畔乙?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵君仆,是天一觀的道長。 經(jīng)常有香客問我,道長返咱,這世上最難降的妖魔是什么钥庇? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮咖摹,結果婚禮上评姨,老公的妹妹穿的比我還像新娘。我一直安慰自己萤晴,他們只是感情好吐句,可當我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著店读,像睡著了一般嗦枢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上屯断,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天文虏,我揣著相機與錄音,去河邊找鬼殖演。 笑死择葡,一個胖子當著我的面吹牛,可吹牛的內容都是我干的剃氧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼阻星,長吁一口氣:“原來是場噩夢啊……” “哼朋鞍!你這毒婦竟也來了?” 一聲冷哼從身側響起妥箕,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤滥酥,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后畦幢,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坎吻,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年宇葱,在試婚紗的時候發(fā)現(xiàn)自己被綠了瘦真。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡黍瞧,死狀恐怖诸尽,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情印颤,我是刑警寧澤您机,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響际看,放射性物質發(fā)生泄漏咸产。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一仲闽、第九天 我趴在偏房一處隱蔽的房頂上張望脑溢。 院中可真熱鬧,春花似錦蔼囊、人聲如沸焚志。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽酱酬。三九已至,卻和暖如春云矫,著一層夾襖步出監(jiān)牢的瞬間膳沽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工让禀, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留挑社,地道東北人。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓巡揍,卻偏偏與公主長得像痛阻,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子腮敌,可洞房花燭夜當晚...
    茶點故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內容