iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 11
0
Kubernetes

Kubernetes~成為Devops工程師的必經試煉系列 第 11

Day 11 用來儲存資料的元件 ~ Volume

前言

Container 上的文件的生命週期相當短暫,使得在容器中運行重要應用時會出現一些問題。當Container 損壞時,kubelet會重啟它,但是容器中的文件將消失並以乾淨的最初狀態重新啟動。此外在Pod中同時運行多個容器時,這些容器之間通常需要共享文件。Kubernetes 透過Volume解決了這些問題。

以下將介紹幾個 Voulme 類型

EmptyDir

當Pod被分配給節點時,首先創建 EmptyDir volume,並且只要該Pod在該節點上運行,該 Volume 就會存在。正如其名字所述,它最初是空的。Pod中的容器可以讀取和寫入emptyDir卷中的相同文件,儘管該卷可以掛載到每個容器中的相同或不同路徑上。當出於任何原因從節點中刪除Pod時,emptyDir中的數據將被永久刪除。

注意:容器崩潰不會從節點中移除pod,因此emptyDir卷中的數據在容器崩潰時是安全的。

emptyDir 的用法有:

  • 暫存空間,例如用於基於磁盤的合併排序
  • 用作長時間計算崩潰恢復時的檢查點
  • Web服務器容器提供數據時,保存內容管理器容器提取的文件

實際操作

以下我們建立一個 Pod 裡面有兩個 Container

$ kubectl create -f https://raw.githubusercontent.com/mhausenblas/kbe/master/specs/volumes/pod.yaml
pod/sharevol created

並且我們在第一個 Container 塞進一些假資料

$ kubectl exec sharevol -c c1 -i -t -- bash
[root@sharevol /]# mount | grep xchange
/dev/sda1 on /tmp/xchange type ext4 (rw,relatime,data=ordered)
[root@sharevol /]# echo 'some data' > /tmp/xchange/data

接下來我們進入 c2, 並且將 c2 container 掛載剛剛塞資料進去的 /tmp/data 資料

$ kubectl exec sharevol -c c2 -i -t -- bash
[root@sharevol /]# mount | grep /tmp/data
/dev/sda1 on /tmp/data type ext4 (rw,relatime,data=ordered)
[root@sharevol /]# cat /tmp/data/data
some data

可以看到c2可以將c1的資料載入並且加以讀取

參考連結

  1. Kubernetes中的Volume介紹
  2. Kubernetes volumes by example

上一篇
Day 10 建立起你與 Pod的溝通橋樑 Service
下一篇
Day 12 用來協調Deployment的中介者 ReplicaSets
系列文
Kubernetes~成為Devops工程師的必經試煉17

尚未有邦友留言

立即登入留言