相關概念
Kubernetes中的SC、PV和PVC是三個重要的概念,它們分別代表存儲類別、持久化卷和持久化卷聲明。它們之間的關系如下:
- 存儲類別(StorageClass,簡稱SC):存儲類別是一種抽象的概念,用于定義持久化存儲的類型。它定義了一組存儲特征,如訪問模式、可用性、復制策略、性能等,并將這些特征映射到一個或多個底層存儲系統。存儲類別是一個集群級別的資源,可以供多個命名空間使用。
- 持久化卷(PersistentVolume,簡稱PV):持久化卷是Kubernetes中的一種資源對象,用于表示持久化存儲的一塊獨立的存儲空間。它是由存儲管理員(或自動化系統)在集群中預分配并配置的,可以由多個Pod共享使用。持久化卷有一些特性,如大小、訪問模式、回收策略等。
- 持久化卷聲明(PersistentVolumeClaim,簡稱PVC):持久化卷聲明是Pod對存儲的需求描述,它申請一定的存儲資源,并且指定一些屬性,如訪問模式、大小、存儲類別等。PVC與Pod是一一對應的,一個Pod可能會聲明多個PVC。當PVC被創建時,Kubernetes會嘗試為其找到一個符合條件的PV,并將其綁定在一起,這個過程稱為PVC綁定。
在Kubernetes中,Pod通過聲明PVC來申請持久化存儲資源,PVC通過SC來選擇底層存儲系統,而PV是底層存儲系統中的一塊資源,由管理員預先創建和配置。因此,Kubernetes中的存儲系統可以被描述為:Pod → PVC → PV → 存儲系統。其中,存儲類別是可選的,如果沒有指定存儲類別,PVC將會使用默認的存儲類別。
SC
WaitForFirstConsumer機制
StorageClass中的WaitForFirstConsumer模式是用于在第一個Pod使用PVC之前,延遲創建底層PV的一種策略。這種策略的設計目的是節省資源和減少不必要的PV的創建,因為在某些情況下,可能會出現PVC被創建,但實際上沒有Pod使用它的情況,此時預先創建PV可能會浪費存儲資源。
WaitForFirstConsumer模式允許在PVC被綁定到PV之前,等待第一個Pod使用這個PVC。在等待期間,底層PV不會被創建,從而節省了存儲資源。只有當第一個Pod使用這個PVC時,PV才會被創建并綁定到PVC,后續Pod可以共享這個PV。如果等待期間沒有Pod使用這個PVC,那么PVC將一直處于綁定等待狀態,直到刪除為止。
使用WaitForFirstConsumer模式需要注意以下幾點:
- 如果Pod沒有正確掛載PVC,則PVC將一直處于綁定等待狀態。
- 如果等待時間過長,可能會影響Pod的啟動速度。
- 等待時間應該設置得合理,以避免PV和PVC資源的浪費。
- 通常用本地存儲作為持久存儲的時候,推薦使用
WaitForFirstConsumer
選項,避免存儲資源的浪費。