iT邦幫忙

2022 iThome 鐵人賽

DAY 17
1
DevOps

30天準備CKA考試系列 第 17

Day 17:Volume

  • 分享至 

  • xImage
  •  

在之前的討論中,曾經出現過volumes和volumeMounts,因為Container內的資料如果不是本來就存放在image中,那當這個Container因為各種原因被刪除,就算事後重建,也無法找回那些資料,所以我們需要為Container配置額外的空間來儲存image外的資料。

Volumes

Volumes就是為了Pod配置額外的儲存空間資源,可以想像成我們為它加上外接硬碟。

它包含多種型態:

  • hostPath:將這個Pod所在的Node中,某個路徑映射到Pod的內部。這種方法有許多安全性的風險,最好避免使用,若是需要使用官方是建議要限定路徑或是檔案,並且設置ReadOnly。

    apiVersion: v1
    kind: Pod
    metadata:
      name: test-pd
    spec:
      containers:
      - image: registry.k8s.io/test-webserver
        name: test-container
        volumeMounts:
        - mountPath: /cache
          name: cache-volume
      volumes:
      - name: cache-volume
        hostPath:
          path: /data
    			type: Directory
    
    • path:這個Node的某個位置,可能是檔案或是資料夾。
    • type:告知系統這是個資料夾。
    • volumeMounts:把volumes映射到Pod。
    • mountPath:這個volume映射到Pod的位置。
  • 特殊類型:像是AWS的EBS,這部分比較算是AWS的範圍。

    volumes:
      - name: test-volume
        # 此 AWS EBS 卷必須已經存在
        awsElasticBlockStore:
          volumeID: "<volume id>"
          fsType: ext4
    
  • emptyDir:產生一個空的Volume,只要這個Pod沒被刪除,那這個Volume的資料就會保存下來。此外,Crash不會導致這個Volume的資料遺失。

    apiVersion: v1
    kind: Pod
    metadata:
      name: test-pd
    spec:
      containers:
      - image: registry.k8s.io/test-webserver
        name: test-container
        volumeMounts:
        - mountPath: /cache
          name: cache-volume
      volumes:
      - name: cache-volume
        emptyDir: {}
    

Type

前面在討論hostPath時有提到type,當時是使用Directory。type其實還有很多種應用方式,我們來看看常用的類型~

  • 無:不加入type,這樣使用hostPath時,系統不會去檢查volume是什麼類型。
  • DirectoryOrCreate:volume為資料夾,若是這個路徑不存在,那系統會自動建立空的資料夾來滿足條件,權限預設為0755。
  • Directory:volume為資料夾,且必須存在。
  • FileOrCreate:volume為檔案,若是檔案不存在則建立檔案。它不會自動建立父路徑,若是連這個檔案的路徑都不存在,那Pod就無法啟動。
  • File:volume為檔案,且必須存在。

還有其他的type,例如Socket,可以參考

ConfigMap

之前有提過ConfigMap,Volumes支援使用ConfigMap來記錄Volume的路徑,我們來看看怎麼做~

apiVersion: v1
kind: Pod
metadata:
  name: configmap-pod
spec:
  containers:
    - name: test
      image: busybox:1.28
      volumeMounts:
        - name: config-vol
          mountPath: /etc/config
  volumes:
    - name: config-vol
      configMap:
        name: log-config
        items:
          - key: log_level
            path: log_level

其實就是讀取ConfigMap中的某個變數,然後使用這個變數當作路徑。

Volumes還有支援很多種類型,我在這邊介紹的為Kubernetes本身比較常用的,其他類型如:AWS的EBS就比較像是AWS的領域,在CKA的考試上就較無關係。

我們今天提到了Volumes,明天會討論更為進階的PV、PVC等功能。

參考資料


上一篇
Day 16:ETCD與集群的備份與還原
下一篇
Day 18:Persistent Volumes
系列文
30天準備CKA考試30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言