Kubernetes 數(shù)據(jù)持久化之 EmtpyDir

kubernetes數(shù)據(jù)卷主要解決了兩方面問

1、 數(shù)據(jù)持久性: 通常情況,容器運行起來后,寫入到其文件系統(tǒng)的文件是暫時性的处渣。當容器崩潰后,kubelet 將容器kill掉后,然后生成一個新的容器,此時,新容器將沒有原來容器的文件,因容器是重新從鏡像創(chuàng)建的
2、數(shù)據(jù)共享: 同一個pod中運行的容器之間,經(jīng)常會存在共享文件或者文件夾需求

kubernetes中咱旱,Volume(數(shù)據(jù)卷)存在明確的生命周期(與包含數(shù)據(jù)卷的容器組(pod)相同)确丢。因此Volume的生命周期比同一容器組(POD)中任意容器的生命周期更長,不管容器重啟了多少次吐限,數(shù)據(jù)都會被保留;如果POD 不存在,數(shù)據(jù)卷自然退出鲜侥。此時根據(jù)POD 所使用的數(shù)據(jù)卷類型不同,數(shù)據(jù)可能隨著數(shù)據(jù)的退出而刪除,也可能被真正持久化,并在下次容器組重啟時仍然可以使用。
從根本上來說,一個數(shù)據(jù)卷僅僅是一個可以被pod訪問的目錄或者文件,這個目錄取決于數(shù)據(jù)卷的類型(不同類型的數(shù)據(jù)卷使用不同的存儲介質(zhì))诸典。同一個pod中的兩個容器可以將一個數(shù)據(jù)卷掛載到不同的目錄下描函。

Emptydir

   emptyDir 類型的數(shù)據(jù)卷在創(chuàng)建POD時分配給該pod,并且直到pod 被移除,該數(shù)據(jù)卷才被釋放。該數(shù)據(jù)卷初始分配是,始終是一個空目錄狐粱。同一個pod中的不同容器都可以對該目錄執(zhí)行讀寫操作,并且共享其中的數(shù)據(jù)(盡管不同容器可能將該數(shù)據(jù)卷掛載到容器中的不同路徑)舀寓。當pod被刪除后,Emptydir 數(shù)據(jù)中的數(shù)據(jù)將永久刪除

(PS: 容器崩潰是,kubelet并不會刪除pod脑奠,而僅僅是將容器重啟,因此emptydir中的數(shù)據(jù)在容器崩潰并重啟后,然后存在)

emptydir 使用場景

1. 空白的初始空間,例如合并/排序算法中,臨時將數(shù)據(jù)保存在磁盤上
2. 長時間計算中存儲檢查點(中間結(jié)果),以便容器崩潰是基公,可以從上一次存儲的檢查點(中間結(jié)果)繼續(xù)進行,而不是從頭開始
3. 作為兩個容器的共享存儲,使得第一個內(nèi)容管理的容器可以將生產(chǎn)的數(shù)據(jù)存入其中,同事一個webserver容器對外提供這些頁面
4. 默認情況, emptydir數(shù)據(jù)存儲在node節(jié)點的存儲介質(zhì)上

Emptydir使用示例

[apps@k8s-node-001 ~]cat  emtydir.yaml   
apiVersion: v1
kind: Pod
metadata:
  name: read-write
spec:
  containers:
  - name: write         #定義一個名為write的容器
    image: busybox
    volumeMounts:
    - mountPath: /write    #當數(shù)據(jù)持久化類型為emtydir時幅慌,這里的路徑指的是容器內(nèi)的路徑
      name: share-volume     #指定本地的目錄名
    args:        #容器運行后宋欺,進行寫操作
    - /bin/sh
    - -c
    - echo "emtydir test" > /write/hello;sleep 30000

  - name: read           #定義一個名為read的容器
    image: busybox
    volumeMounts:
    - mountPath: /read
      name: share-volume      #指定本地的目錄名
    args:                #容器運行后,進行讀操作
    - /bin/sh
    - -c
    - cat /read/hello; sleep 30000
  volumes:               #這里的volumes是指對上面掛載的進行解釋
  - name: share-volume    #這里的名字必須和上面pod的mountPath下的name值對應(yīng)
    emptyDir: {}            #這里表示是個空目錄胰伍,主要是定義了一個數(shù)據(jù)持久化的類型
[apps@k8s-node-001 ~]# kubectl apply -f emtydir.yaml    #執(zhí)行yaml文件
[apps@k8s-node-001 ~]# kubectl exec -it read-write -c write /bin/sh  #進入第一個pod
# cat /write/hello        #確認yaml文件執(zhí)行的命令是否生效
emtydir test

[apps@k8s-node-001 ~]# kubectl exec -it read-write -c read /bin/sh  #進入第二個容器名為read的容器查看
# cat /read/hello        #查看指定掛載的目錄下是否和write容器中的內(nèi)容一致
emtydir test
#至此齿诞,起碼可以確認這兩個pod是掛載了同一個本地目錄,文件內(nèi)容都一致骂租。
#那么祷杈,現(xiàn)在看看具體掛載的是本地哪個目錄?
[root@k8s-master-001 ~]# kubectl get pod -o wide    #先通過此命令查看pod是運行在哪個節(jié)點上的
#我這里是運行在node01節(jié)點的渗饮,所以接下來需要到node01節(jié)點上進行查看


#node01節(jié)點操作如下:
[apps@k8s-node-001 ~]# docker ps             #通過此命令查看出運行的容器ID號
CONTAINER ID        IMAGE              #省略部分內(nèi)容
6186a08c6d5f        busybox              
5f19986f0879        busybox             
[apps@k8s-node-001 ~]# docker inspect 6186a08c6d5f      #查看第一個容器的詳細信息
 "Mounts": [          #找到mount字段
            {
                "Type": "bind",
                "Source": "/var/lib/kubelet/pods/86b67ff4-9ca0-4f40-86d8-6778cfe949ec/volumes/kubernetes.io~empty-dir/share-volume",
#上面的source就是指定的本地目錄
                "Destination": "/read",
                "Mode": "Z",
                "RW": true,
                "Propagation": "rprivate"
                                
[apps@k8s-node-001 ~]# docker inspect 5f19986f0879    #查看第二個容器的詳細信息

        "Mounts": [    #同樣定位到mount字段
            {
                "Type": "bind",
                "Source": "/var/lib/kubelet/pods/86b67ff4-9ca0-4f40-86d8-6778cfe949ec/volumes/kubernetes.io~empty-dir/share-volume",
#可以看到但汞,上面指定的本地目錄和第一個容器指定的是同一個目錄
                "Destination": "/write",
                "Mode": "Z",
                "RW": true,
                "Propagation": "rprivate"
            },
#至此,已經(jīng)可以確定這兩個容器的掛載目錄共享的是同一個本地目錄
[apps@k8s-node-001 ~]# cat /var/lib/kubelet/pods/86b67ff4-9ca0-4f40-86d8-6778cfe949ec/volumes/kubernetes.io~empty-dir/share-volume/hello 
#查看本地該目錄下的內(nèi)容互站,和pod中的一致
emtydir test

驗證k8s-node-001上刪除一個POD 并再次查看本地目錄:

[apps@k8s-node-001 ~]docker rm -f 6186a08c6d5f    #刪除一個pod
6186a08c6d5f
[apps@k8s-node-001 ~]# cat /var/lib/kubelet/pods/86b67ff4-9ca0-4f40-86d8-6778cfe949ec/volumes/kubernetes.io~empty-dir/share-volume/hello 
#查看本地目錄私蕾,發(fā)現(xiàn)文件還在
emtydir test

在k8S master 端刪除pod,再次k8s-node-001 上驗證查看本地目錄是否存在

[apps@k8s-master-001 ~]# kubectl delete -f emtydir.yaml 
#在node01上再次查看本地目錄,會提示不存在這個目錄
[apps@k8s-master-001 ~]## cat /var/lib/kubelet/pods/86b67ff4-9ca0-4f40-86d8-6778cfe949ec/volumes/kubernetes.io~empty-dir/share-volume/hello 
cat: /var/lib/kubelet/pods/86b67ff4-9ca0-4f40-86d8-6778cfe949ec/volumes/kubernetes.io~empty-dir/share-volume/hello: 沒有那個文件或目錄

emptyDir 總結(jié)

在同一個POD里不同的容器中胡桃,共享同一個持久化目錄踩叭,當pod 節(jié)點刪除時,volume 的內(nèi)容也會被刪除。但如果僅僅是容器被銷毀翠胰,pod還在,則volume 不會受到任何影響.emptydir的數(shù)據(jù)持久化的生命周期和使用的pod一致,一般是作為臨時存儲使用容贝。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(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
  • 正文 為了忘掉前任互妓,我火速辦了婚禮溪窒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘冯勉。我一直安慰自己澈蚌,他們只是感情好,可當我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布灼狰。 她就那樣靜靜地躺著宛瞄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪交胚。 梳的紋絲不亂的頭發(fā)上份汗,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天,我揣著相機與錄音蝴簇,去河邊找鬼杯活。 笑死,一個胖子當著我的面吹牛军熏,可吹牛的內(nèi)容都是我干的轩猩。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼荡澎,長吁一口氣:“原來是場噩夢啊……” “哼均践!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起摩幔,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤彤委,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后或衡,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體焦影,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡车遂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了斯辰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片舶担。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖彬呻,靈堂內(nèi)的尸體忽然破棺而出衣陶,到底是詐尸還是另有隱情,我是刑警寧澤闸氮,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布剪况,位于F島的核電站,受9級特大地震影響蒲跨,放射性物質(zhì)發(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

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