特性
動態(tài)卷供給是kubernetes獨有的功能,這一功能允許按需創(chuàng)建存儲建搓扯。在此之前介劫,集群管理員需要事先在集群外由存儲提供者或者云提供商創(chuàng)建存儲卷,
成功之后再創(chuàng)建PersistentVolume對象痢艺,才能夠在kubernetes中使用仓洼。動態(tài)卷供給能讓集群管理員不必進行預先創(chuàng)建存儲卷,而是隨著用戶需求進行創(chuàng)建
堤舒。在1.5版本提高了動態(tài)卷的彈性和可用性色建。
在此前1.4版本中加入了一個 新的 API 對象 StorageClass,可以定義多個 StorageClass 對象舌缤,并可以分別指定存儲插件箕戳、設置參數(shù),用于提供不同的
存儲卷国撵。這樣的設計讓集群管理員能夠在同一個集群內陵吸,定義和提供不同類型的、不同參數(shù)的卷(相同或者不同的存儲系統(tǒng))介牙。這樣的設計還確保了最終
用戶在無需了解太多的情況下壮虫,有能力選擇不同的存儲選項。
aws ebs使用示例
需要滿足以下條件方可使用EBS作為存儲提供者:
- Pod運行的節(jié)點必須為AWS EC2實例
- 這些示例需要和EBS在同一個區(qū)域和可用區(qū)域
- EBS只支持一個EC2掛載一個卷
- Node節(jié)點需要有EBS掛載/卸載權限环础。
1. 定義1個StorageClass對象(SSD盤)
vim fast-storage-class.yaml
kind: StorageClass
apiVersion: storage.k8s.io/v1beta1
metadata:
name: fast
provisioner: kubernetes.io/aws-ebs
parameters:
type: io1
zone: cn-north-1a
iopsPerGB: "10"
這里我們創(chuàng)建了一個名為"fast"的StorageClass囚似。用于提供類似SSD的持久存儲剩拢。
- type: EBS卷類型。io1, gp2, sc1, st1. See AWS docs for details. Default: gp2
- zone: Aws區(qū)域谆构,如果未指定裸扶,則選擇與kubernetes集群節(jié)點相同的隨機區(qū)框都。
- iopsPerGB: 僅適用于io1類型的卷搬素。IOPS/GB。
- encrypted: EBS卷是否應該被加密魏保。有效值為"true" or "false"
- kmsKeyId: 可選.加密卷時要使用的秘鑰的完整Amazon資源名稱熬尺。如果沒有提供秘鑰,AWS將生成秘鑰谓罗。
2.用戶請求,定義1個pvc
用戶在pvc中可以包含一個StorageClass申請動態(tài)提供存儲粱哼。需要額外使用annotations注解來指定特定的ClassStorage:volume.beta.kubernetes.io/storage-class.其值必須符合之前配置StorageClass名稱(比如fast)。
vim fast-pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: myclaim
annotations:
volume.beta.kubernetes.io/storage-class: "fast"
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 8Gi
selector:
matchLabels:
release: "stable"
matchExpressions:
- {key: environment, operator: In, values: [dev]}
accessModes:
當pvc請求特定訪問模式的存儲時檩咱,聲明使用與pv卷相同的約定揭措。Resources:
類型Pod,可以請求特定數(shù)額的資源刻蚯。-
Selector:
支持標簽選擇器進一步篩選卷的集合绊含,只有與標簽選擇器匹配的卷才能綁定到pvc,選擇器由如下2個字段組成: - metchLabels 卷必須帶有匹配的標簽炊汹,才能被綁定 - matchExpressions 支持標簽篩選擴展屬性,通過指定鍵躬充、值以及與鍵值相關的運算符所得結果的匹配列表。
通過我們pvc的描述讨便,名為fast的StorageClass會提供一個等效于SSD的持久盤充甚,當這個PVC被刪除,這個卷也隨之銷毀霸褒。
缺省StorageClass(DefaultStorageClass)
所有的 PVC 都可以在不使用 StorageClass 注解的情況下伴找,直接使用某個動態(tài)存儲。把一個StorageClass 對象標記為 “default” 就可以了废菱。StorageClass 用注解storageclass.beta.kubernetes.io/is-default-class: "true" 就可以成為缺省存儲技矮。
有了缺省的 StorageClass,用戶創(chuàng)建 PVC 就不用 storage-class 的注解了昙啄,1.4 起新加入的DefaultStorageClass 準入控制器會自動把這個標注指向缺省存儲類穆役。需要在準入控制插件添加缺省存儲插件:
--admission-control=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota
測試:
動態(tài)卷:
1. 創(chuàng)建pvc,掛載到單個Pod梳凛,遷移Pod耿币,日志會提示卷已被掛載到運行pod之前的ec2上,但幾分鐘依然會遷移成功韧拒,并且掛載卷成功.
2. 創(chuàng)建pvc淹接,掛載到多個個Pod. 僅支持單個副本集十性。
3. 正常使用下,刪除Pod塑悼,掛載pvc到新的Pod. 功能正常
4.正常使用下劲适,刪除pvc,pv 回收策略為Delete(EBS的回收策略只支持Delete)厢蒜,狀態(tài)為Released霞势,Pod掛載的卷功能依然不受影響。然后斑鸦,刪除PV愕贡,Pod掛載的卷功能依然不受影響,此時AWS ebs卷改為available.此時若要繼續(xù)使用此卷,需要靜態(tài)PV指定EBS 卷ID巷屿。
5. 創(chuàng)建pvc之后固以。刪除pv卷,此時pvc狀態(tài)為Lost,同時aws ebs卷依然為In-use嘱巾,未被卸載憨琳。
6. 當刪除pvc時,pv reclaim 策略默認為delete。所以這個卷也隨之銷毀(自動刪除pv,自動刪除EBS這個卷),這個得注意.
PV自動擴容旬昭,目前不支持篙螟。
刪除說明
ebs->pv->pvc->pod
- 刪除pod,ebs->pv->pvc依然存活
- 刪除pod,刪除pvc,將直接自動刪除pv及ebs存儲卷
- 刪除pv或者刪除pvc稳懒,pod未刪除,ebs狀態(tài):in-use且不會被刪除闲擦,功能正常。其次刪除pod场梆,ebs狀態(tài):available墅冷。