iT邦幫忙

2022 iThome 鐵人賽

DAY 19
0
Software Development

30天漫遊雲端之旅系列 第 19

Day 19 Volume, PersistentVolume & PersistentVolumeClaim

  • 分享至 

  • xImage
  •  

不知道各位還記不記得,在前面介紹 Docker 時,我曾經講過一個超重要的東西,就是 Volume ,可以避免重要資料跟著 Container 一起消失的東西。

那麼 Kubernetes 有沒有同樣的機制呢?

有的,而且還不只一種。

首先說說第一種,就是跟 Docker 同樣的機制 Volume ,使用方式也大致相同,不過是改成 YAML 檔的方式而已。

apiVersion: v1
kind: Pod
metadata:
  name: ubuntu-pod
spec:
  containers:
    - name: ubuntu
      image: ubuntu:20.04
      args:
        [
          bash,
          -c,
          'for ((i = 0; ; i++)); do echo "$i: $(date)"; sleep 100; done',
        ]
      volumeMounts:
        - mountPath: /volume
          name: test-volume  # 這邊的名稱
  volumes:
    - name: test-volume  # 要跟這邊對上
      hostPath:
        path: /data
        type: DirectoryOrCreate

這樣就可以將 Volume 連接到 Worker Node 的儲存空間,我們可以進去看一下,我們可以透過以下指令進到 Pod 中。

$ kubectl exec -it <pod_name> -- bash

接著我們可以 cd 進 /volume 中,隨便新增一個檔案,然後就可以到我們 Worker Node 的 /data 中尋找(兩台都找找看吧),正常會找到同樣的檔案。

接著各位應該都有發現一個問題,因為是透過 kube-scheduler 決定 Pod 在哪一個 Worker Node 上運行,因此每次的 Node 都可能不同,儲存的東西就可能散布在不同的機器上,這樣 我們需要的時候就需要一台一台找,節點一多的話就非常耗時間,因此就有了另一個機制 PersistentVolume & PersistentVolumeClaim 。

PersistentVolume & PersistentVolumeClaim

PersistentVolume 中文意思就是持久儲存卷,一看就知道可以將資料持久的儲存;而 PersistentVolumeClaim 中文意思就是持久儲存卷申請,就是負責跟 PersistentVolume 申請空間放置重要資料。

而的 Pod 可以向下面一樣連接上 PersistentVolume & PersistentVolumeClaim ,但是我們這邊還是拿本地的儲存空間來示範。

apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
    - name: ubuntu
      image: ubuntu:20.04
      args:
        [
          bash,
          -c,
          'for ((i = 0; ; i++)); do echo "$i: $(date)"; sleep 100; done',
        ]
      volumeMounts:
        - mountPath: /volume
          name: test-volume
  volumes:
    - name: test-volume
      persistentVolumeClaim:
        claimName: local-pvc

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-pvc
spec:
  accessModes:
    - ReadWriteOnce
  volumeName: local-pv
  resources:
    requests:
      storage: 1Gi

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-pv
spec:
  accessModes:
    - ReadWriteOnce
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  hostPath:
    path: "/data"
    type: "DirectoryOrCreate"

這樣我們就可以成功透過 PersistentVolume & PersistentVolumeClaim 將資料儲存在 Worker Node 上了。

如果需要查看 PersistentVolume 或 PersistentVolumeClaim 的狀態可以透過以下指令。

$ kubectl get persistentvolume
$ kubectl get persistentvolumeclaim
# or
$ kubectl get pv
$ kubectl get pvc

PersistentVolume 跟 PersistentVolumeClaim 成功連結的話則會顯示 Binding 。

詳細設定可參考官方文件 VolumePersistentVolumePersistentVolumeClaim

那麼就先到這邊,我們下次再來講一下如何儲存在額外的空間中。

大家掰~掰~


上一篇
Day 18 Service
下一篇
Day 20 ReplicaSet & Deployment
系列文
30天漫遊雲端之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言