iT邦幫忙

2024 iThome 鐵人賽

DAY 12
0
DevOps

今天不學遺傳學,跟著Kubernetes種豌豆系列 第 12

Day12. 資料不能亡,持久性儲存- PV與PVC(中)

  • 分享至 

  • xImage
  •  

🌅 接續上篇,需要持久化的資料以Volume處理,但是要一個個管理pod的volume甚是麻煩,試想若單純需要儲存空間,而不在意該空間如何提供,那能將其建造一個儲存池(storage pool),需要空間的pod就從池子要資源,就像是node向cluster索取資源般的關係

https://ithelp.ithome.com.tw/upload/images/20240816/20168178Ubml4tJUhn.png

大池 Persistent Volumes (PV)

PV 為cluster內的儲存,生命週期獨立於使用它的pod,並且能夠儲存不同類型的資料

訪問模式

  • ReadWriteOnce: 可以被一個node(多個pod)掛載為讀寫方式
  • ReadOnlyMany: 多個node掛載為讀取
  • ReadWriteMany: 多個node掛載為讀寫方式
  • ReadWriteOncePod: 單個pod掛載為讀寫方式

回收政策

  • retain: 預設,保存(不可複用), 直到被管理員刪除
  • recycle: 清除data後複用
  • delete: 自動跟著刪除

建立PV

# 取自官網
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv0003
spec:
  # 1. 容量
  capacity:
    storage: 5Gi
  # 2. 預設為檔案系統,掛載於目錄,另個為block,以block device掛載
  volumeMode: Filesystem
  # 3. 訪問模式
  accessModes:
    - ReadWriteOnce
  # 4. 回收政策
  persistentVolumeReclaimPolicy: Recycle
  # 5. 特定的種類`class`(下集待續), 未設定的話,只能分給沒指定種類的PVC
  storageClassName: slow
  # 6. 掛載選項: 需注意此項不做檢查,若有問題就會掛載失敗
  mountOptions:
    - hard
    - nfsvers=4.1
  nfs:
    path: /tmp
    server: 172.17.0.2

Persistent Volume Claims(PVC)

有了PV,接下來就可以依需求提取所需的資源,PVC由USER建立,PVC和PV做綁定根據,PVC和PV的設定類似,不過需要配對到PV,因此有selector欄位作配對根據之一

  • capacity
  • accessModes
  • volumeMode
  • storageClassName: 若沒有設定,則預設為"",會選取到PV的儲存類別也會是""
  • Selector
  1. 建立PVC
# 取自官方文件
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: myclaim
spec:
  accessModes:
    - ReadWriteOnce
  volumeMode: Filesystem
  resources:
    requests:
      storage: 8Gi
  storageClassName: slow
  # 兩項條件皆需符合
  selector:
    matchLabels:
      release: "stable"
    matchExpressions:
      - {key: environment, operator: In, values: [dev]}

PV && PVC 操作指令

# 取得pv
kubectl get pv
kubectl get persistenVolume
# 取得pvc
kubectl get pvc
kubectl get persistentvolumeclaim
kubectl describe pv <名稱>
# 刪除pvc
kubectl delete persistentvolumeclaim <名稱>

在pod當中使用PVC

apiVersion: v1
kind: Pod
metadata:
  name: itHome-pod
spec:
  containers:
    - name: myhome
      image: nginx
      volumeMounts:
      - mountPath: "/var/www/html"
        name: myVol
  # 指定volume用pvc, 取用的pvc為myclaim
  volumes:
    - name: myVol
      persistentVolumeClaim:
        claimName: myclaim

上一篇
Day11. 資料不能亡,持久性儲存- Volume(上)
下一篇
Day13. 資料不能亡,持久性儲存 Storage Class (下)
系列文
今天不學遺傳學,跟著Kubernetes種豌豆30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言