iT邦幫忙

2024 iThome 鐵人賽

DAY 14
0
Kubernetes

Kubernetes三十天就上手系列 第 14

Day 14- Storage Classes 動態設定儲存

  • 分享至 

  • xImage
  •  

Storage Classes: 動態設定儲存

在 Kubernetes 中,StorageClass 是用來描述儲存類型的對象,它定義了儲存提供者的類型和設定,使用戶可以動態地請求不同類型的儲存資源。這篇文章將深入介紹 Kubernetes 的 StorageClass 及其設定,幫助你理解如何動態管理和設定儲存。

什麼是 StorageClass?

StorageClass 是 Kubernetes 中的一種資源對象,提供了一個機制來描述不同儲存類型。它允許用戶在部署應用程式時,動態地申請不同的儲存類型,而不需要知道底層的儲存細節。這樣的抽象層讓儲存管理更靈活且易於管理。

為什麼需要 StorageClass?

  1. 動態儲存請求:用戶可以在創建 PersistentVolumeClaim (PVC) 時,自動動態創建 PersistentVolume (PV),不需要手動提前創建 PV。
  2. 靈活性:根據應用需求,可以選擇不同的儲存類型,如高性能 SSD 或大容量 HDD,讓資源使用更符合應用特性。
  3. 簡化管理:儲存管理員可以預先定義多種 StorageClass,供用戶選擇,減少了每次手動設定 PV 的繁瑣過程。

StorageClass儲存流程圖解

以下是 Kubernetes 中 Pod 與 PersistentVolume 之間的儲存經由StorageClass 的過程示意:

 StorageClass

這張圖展示了容器如何通過 PersistentVolumeClaim (PVC) 和 StorageClass,最終取得所需的持久化儲存資源。從圖中可以看到,Pod 內的容器將本地的 /var/dir 掛載到定義的 Volume,而這個 Volume 由 PVC 描述並由 StorageClass 管理,最終映射到具體的 PersistentVolume 上。

這樣的儲存設計讓 Kubernetes 的儲存資源管理變得靈活且動態化,大大提高了儲存管理的效率與應用程式的可用性。

StorageClass 的主要屬性

  • provisioner:指定儲存供應商,例如 kubernetes.io/aws-ebskubernetes.io/gce-pdkubernetes.io/nfs
  • parameters:設定特定儲存供應商的參數,如磁碟類型、區域等。
  • reclaimPolicy:指定當 PVC 被刪除時,PV 的回收策略(例如 Delete 或 Retain)。
  • volumeBindingMode:定義 PV 何時綁定到 PVC(Immediate 或 WaitForFirstConsumer)。

Default StorageClass

在 Kubernetes 中,Default StorageClass 是 Cluster 中用來為 PersistentVolumeClaim (PVC) 提供預設儲存的 StorageClass。當用戶創建 PVC 時,如果沒有指定 storageClassName,Kubernetes 會自動選擇被標記為 default 的 StorageClass 來滿足該 PVC 的儲存需求。這使得儲存設定更加簡便,特別是對於需要動態設定儲存的應用。

Default StorageClass 的工作原理

在 Cluster 中存在多個 StorageClass 時,Cluster管理員可以選擇一個作為預設的 StorageClass,在指定了預設之後,即使用戶沒有明確指定 storageClassName,Kubernetes 也會自動使用該預設的 StorageClass 來動態設定 PersistentVolume (PV)。

查看目前的 Default StorageClass

可以使用以下指令查看 Cluster 中的 StorageClass 並確認哪一個是預設的:

kubectl get storageclass

輸出結果中,帶有 (default) 標記的 StorageClass 就是目前 Cluster 中的預設 StorageClass。

設定或更改 Default StorageClass

如果你想設定某個 StorageClass 為預設,可以使用以下指令:

kubectl patch storageclass <storageclass-name> -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

關於 Default StorageClass 的注意事項

  1. Cluster中只能有一個 Default StorageClass:如果同時有多個 StorageClass 被設置為預設,可能會導致 PVC 創建時的儲存設定錯誤。

  2. 動態設定儲存:當 PVC 沒有指定 storageClassName 時,Kubernetes 會使用預設的 StorageClass 動態創建 PV 並綁定到該 PVC 上。

  3. Cluster管理員的角色:Cluster 管理員應該根據應用場景和需求選擇最合適的 StorageClass 作為預設,確保預設儲存符合大部分應用的需求。

如何定義一個 StorageClass?

以下是一個基於 NFS 的 StorageClass 設定範例:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs-csi
provisioner: nfs.csi.k8s.io
parameters:
  server: 192.168.1.99
  share: /
reclaimPolicy: Delete
volumeBindingMode: Immediate
mountOptions:
  - nfsvers=4.1

說明:

  • server:指向 NFS 伺服器的服務名稱或 IP 位址。
  • share:使用 NFS 伺服器的根目錄作為共享路徑。若有特定的導出目錄,則應該在此設置正確路徑。
  • reclaimPolicy: Delete:當 PVC 被刪除時,對應的 PV 也將被自動刪除。如果需要保留 PV,可以設置為 Retain
  • volumeBindingMode: Immediate:在 PVC 創建時立即綁定 PV。若希望延遲綁定至實際使用時,可設置為 WaitForFirstConsumer
  • mountOptions: nfsvers=4.1:指定 NFS 的版本為 4.1,根據你的 NFS 伺服器和需求可進行調整。

定義一個預設的 StorageClass

如果要將這個 StorageClass 設定為預設,可以使用以下標籤:

annotations:
  storageclass.kubernetes.io/is-default-class: "true"

以下是一個基於 NFS 的預設 StorageClass 設定範例:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs-csi
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"
provisioner: nfs.csi.k8s.io
parameters:
  server: 192.168.1.99
  share: /
reclaimPolicy: Delete
volumeBindingMode: Immediate

這樣一來,當用戶創建 PVC 而未指定 storageClassName 時,Kubernetes 會自動使用這個 NFS StorageClass 來創建 PV。

部署與使用 StorageClass

部署 NFS StorageClass

kubectl apply -f nfs-storageclass.yaml

成功部署後的訊息:

storageclass.storage.k8s.io/nfs-csi created

使用 StorageClass 的 PersistentVolumeClaim

以下是一個基於 NFS StorageClass 的 PersistentVolumeClaim 設定:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pvc
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Gi
  storageClassName: nfs-csi

創建 PersistentVolumeClaim:

kubectl apply -f pvc-example.yaml

創建成功的訊息:

persistentvolumeclaim/nfs-pvc created

檢查 PVC 狀態:

kubectl get pvc

當 PVC 狀態為 Bound 時,表示其已經成功綁定並可正常使用。

管理 StorageClass 和動態設定儲存

查看 StorageClass

以下指令可以查看目前的 Storageclass :

kubectl get storageclass

查看指定 StorageClass 的詳細資訊:

kubectl describe storageclass nfs-storage-class

更新 StorageClass

kubectl edit storageclass nfs-storage-class

總結

今天我們學習了如何使用 Kubernetes 的 StorageClass 來動態設定儲存,以及如何創建和使用 NFS StorageClass。這些知識將幫助你更靈活地管理 Kubernetes 中的動態儲存資源,從而提高應用程式的可靠性和可用性。

接下來,我們將探討更多 Kubernetes 的核心概念和實踐,如 ReplicaSet 和 StatefulSet,這將進一步深化你對 Kubernetes 的理解和應用。


上一篇
Day 13- Kubernetes 中的 Volume 與 PersistentVolume
下一篇
Day 15- ReplicaSet 確保 Pod 的正確數量
系列文
Kubernetes三十天就上手30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言