iT邦幫忙

2022 iThome 鐵人賽

DAY 25
0
DevOps

從認識Docker到精通系列 第 25

第25天 - Storage In K8s

  • 分享至 

  • xImage
  •  

第25天 - Storage In K8s

node 本機存放 volume

K8s 的 node 在本機存放 volume的方式如下列幾種

  • Empty Dir :與 pod 同週期的臨時性儲存
  • HostPath:存放於 Node 的本機目錄
  • Local:以projected volume 持久卷宗管理的目錄,這個也是明天的大主題

Empty Dir

這種類型的 volume 和 pod擁有相同的生命週期,當pod進入排程時 volume 也會跟著建立,當pod 銷毀時,volume 也會跟著一起被銷毀(node 上對應的目錄會被銷毀)
pod 使用empty dir 的YAML很簡單,在volume部分加一個emptyDir:{}即可

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: {}

HostPath

Hostpath 類型的 volume 用於將 node 的檔案目錄系統或檔案掛載到容器內部做使用,常用於下列幾個場景

  • 容器的關鍵資料需要被持久儲存在宿主機中
  • 需要使用宿主機檔案的資料
  • pod 的啟動依賴於宿主機上的檔案

hostpath主要需要設定的東西為path,即宿主機上的目錄或檔案路徑,另有一個參數 type ,可定義路徑類型 (以及遇到路徑不存在的處理方式、應對方式、還是直接視為失敗)

  • (空值):預設值,系統掛載path時不做任何驗證方式
  • DirectoryOrCreate:path 設定的路徑必須是目錄(directories),若路徑不存在,則系統會自動建立該目錄,並將權限設置為755,與kubectl 具相同的 owner 和 group
  • Directory:path設定的路徑必須是目錄,否則掛載不成功
  • FileOrCreate:檔案版本的DirectoryOrCreate,功能和 DirectoryOrCreate 一樣,但權限設為644
  • File:檔案版本的Directory
  • Socket/CharDevice/Block:path 指定的 UNIX Socket/ charater device/ block service必須存在,否則掛載失敗

因為 hostpath 的檔案是是獨立於pod存在node的檔案目錄中的,因此:

  • (因一個 cluster 中可能有多個 node)Node 上的檔案內容不同,則pod運行的結果也會不盡相同
  • 由 kubectl 建立的目錄或檔案的所有者是 root ,因此會有可能出線權限不足其他 user 無法操作的問題
  • HostPath中的資料不隨著pod的銷毀而消失,必須手動刪除
  • typeFileOrCreate且路徑包含上層目錄且目錄又不存在時,系統不會自己創建上層目錄而使pod創建失敗,此時可以先將上層目錄設定為DirectoryOrCreate,再加上FileOrCreate就可以避免掉這個問題了!

YAML的部分一樣很相似:記得設定path即可

apiVersion: v1
kind: Pod
metadata:
  name: test-webserver
spec:
  containers:
  - name: test-webserver
    image: registry.k8s.io/test-webserver:latest
    volumeMounts:
    - mountPath: /var/local/aaa
      name: mydir
    - mountPath: /var/local/aaa/1.txt
      name: myfile
  volumes:
  - name: mydir
    hostPath:
      # Ensure the file directory is created.
      path: /var/local/aaa
      type: DirectoryOrCreate
  - name: myfile
    hostPath:
      path: /var/local/aaa/1.txt
      type: FileOrCreate

明天就要進入PV囉!


上一篇
第二十四天 - Storage In K8s
下一篇
第二十六天 - PV & PVC
系列文
從認識Docker到精通30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言