iT邦幫忙

2023 iThome 鐵人賽

DAY 28
0
Cloud Native

docker系列 第 28

Day 28 Volume, PersistentVolume & PersistentVolumeClaim

  • 分享至 

  • xImage
  •  

在 Kubernetes 中,和 Docker 一樣,有一個重要的機制叫做 Volume,可以避免資料隨著 Container 消失。Kubernetes 提供了多種不同的機制來處理 Volume。

首先,我們可以使用類似 Docker 的 Volume 機制,只是在 Kubernetes 中是透過 YAML 檔案的方式來定義。

# volume-example.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 ubuntu-pod -- bash

接著你可以進到 /volume 中,隨便新增一個檔案,然後就可以在 Worker Node 的 /data 中找到相同的檔案。

不過,上述方式有一個問題,因為 Pod 在哪一個 Worker Node 上運行是由 kube-scheduler 決定的,所以每次的 Node 可能不同。這樣儲存的資料就可能散布在不同的機器上,需要一台一台找,因此,有了另一個更彈性的機制,即 PersistentVolume & PersistentVolumeClaim。
PersistentVolume 中文意思就是持久儲存卷,而 PersistentVolumeClaim 中文意思就是持久儲存卷申請,就是負責跟 PersistentVolume 申請空間放置重要資料。

# pv-pvc-example.yaml

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 上。如果需要查看它們的狀態,可以使用以下指令:

kubectl get persistentvolume
kubectl get persistentvolumeclaim
# 或
kubectl get pv
kubectl get pvc

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


上一篇
Day27 Service
下一篇
Day29 ReplicaSet & Deployment
系列文
docker30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言