Kubernetes 對(duì)于有狀態(tài)的容器應(yīng)用或者對(duì)數(shù)據(jù)需要持久化的應(yīng)用,不僅需要將容器內(nèi)的目錄掛載到宿主機(jī)的目錄或者 emptyDir 臨時(shí)存儲(chǔ)卷拟烫,而且需要更加可靠的存儲(chǔ)來保護(hù)應(yīng)用產(chǎn)生的重要數(shù)據(jù)该编,以便容器應(yīng)用在重建之后,仍然可以使用之前的數(shù)據(jù)硕淑。不過课竣,存儲(chǔ)資源和計(jì)算資源(GPU/內(nèi)存)的管理方式完全不同。為了能夠屏蔽底層存儲(chǔ)實(shí)現(xiàn)的細(xì)節(jié)喜颁,讓用戶方便使用稠氮,同時(shí)能讓管理員方便管理曹阔,Kubernetes從v1.0版本就引入了 PersistentVolume
和PersistentVolumeClaim
兩個(gè)資源對(duì)象來實(shí)現(xiàn)對(duì)存儲(chǔ)的管理子系統(tǒng)半开。
PersistentVolume(PV)
是對(duì)底層網(wǎng)絡(luò)共享存儲(chǔ)的對(duì)象,將共享存儲(chǔ)定義為一種”資源“赃份,比如節(jié)點(diǎn)(Node)也是一種容器應(yīng)用可以”消費(fèi)“的資源寂拆。PV由管理員進(jìn)行創(chuàng)建和配置奢米,它與共享存儲(chǔ)的具體實(shí)現(xiàn)直接相關(guān),例如 GlusterFS纠永、iSCSI鬓长、RBD或GCE/AWS 公有云提供的共享存儲(chǔ),通過插件式的機(jī)制完成與共享存儲(chǔ)的對(duì)接尝江,以供應(yīng)用訪問和使用涉波。
PersistentVolumeClaim(PVC)
則是用戶對(duì)于存儲(chǔ)資源的一個(gè)”申請(qǐng)“。就像 Pod ”消費(fèi)“ Node 的資源一樣炭序,PVC 會(huì)”消費(fèi)“ PV資源啤覆。PVC 可以申請(qǐng)?zhí)囟ǖ拇鎯?chǔ)空間和訪問模式。
使用 PVC ”申請(qǐng)“到一定的存儲(chǔ)空間仍然不足以滿足應(yīng)用對(duì)于存儲(chǔ)設(shè)備的各種需求惭聂。通常應(yīng)用程序都會(huì)對(duì)存儲(chǔ)設(shè)備的特性和性能有不同的要求窗声,包括讀寫速度、并發(fā)性能辜纲、數(shù)據(jù)冗余等更高的要求笨觅,Kubernetes 從 v1.4 版本開始引入了一個(gè)新的資源對(duì)象StorageClass
,用于標(biāo)記存儲(chǔ)資源的特性和性能耕腾。到v1.6版本時(shí)见剩,StorageClass 和動(dòng)態(tài)資源供應(yīng)的機(jī)制得到了完善,實(shí)現(xiàn)了存儲(chǔ)卷的按需創(chuàng)建幽邓,在共享存儲(chǔ)的自動(dòng)化管理進(jìn)程中實(shí)現(xiàn)了重要的一步炮温。
通過 StorageClass 的定義,管理員可以將存儲(chǔ)資源定義為某種類別(Class)牵舵,正如存儲(chǔ)設(shè)備對(duì)于自身的配置描述(Profile),例如"快速存儲(chǔ)"柒啤、”慢速存儲(chǔ)“、”有數(shù)據(jù)冗余“畸颅、”無數(shù)據(jù)冗余“等担巩。用戶依據(jù) StorageClass 的描述就能夠直觀得知各種存儲(chǔ)資源的特性,就可以根據(jù)應(yīng)用對(duì)存儲(chǔ)資源的需求去申請(qǐng)存儲(chǔ)資源了没炒。
下面對(duì)Kubernetes的PV涛癌、PVC、StorageClass和動(dòng)態(tài)資源供應(yīng)等共享存儲(chǔ)管理機(jī)制進(jìn)行詳細(xì)說明送火。
PV詳解
PV作為存儲(chǔ)資源拳话,主要包括存儲(chǔ)能力、訪問模式种吸、存儲(chǔ)類型弃衍、回收策略、后端存儲(chǔ)類型
等關(guān)鍵信息的設(shè)置坚俗。下面的例子聲明的PV具有如下屬性:5Gi 存儲(chǔ)空間镜盯、訪問模式為 “ReadWriteOnce”岸裙,存儲(chǔ)類型為 “slow” (要求系統(tǒng)中已存在名為 slow 的 StorageClass),回收策略為 “Recycle”速缆,并且后端存儲(chǔ)類型為 “nfs” (設(shè)置了 NFS Server 的IP地址和路徑):
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv1
spec:
capacity:
storage: 5Gi
accessMode:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
storageClassName: slow
nfs:
path: /tmp
server: 172.17.0.2
Kubernetes支持的PV類型如下:
- gcePersistentDisk:GCE公共云提供的 PersistentDisk降允。
- AWSElasticBlockStore:AWS公共云提供的 ElasticBlockStore。
- AzureFile:Azure公共云提供的File艺糜。
- AzureDisk:Azure公共云提供的Disk剧董。
- FC(Fibre Channel)
- Flocker
- NFS:網(wǎng)絡(luò)文件系統(tǒng)。
- iSCSI
- RBD(Rados Block Device):Ceph塊存儲(chǔ)破停。
- CephFS
- GlusterFS
- Cinder:OpenStack Cinder塊存儲(chǔ)送滞。
- VsphereVolume
- Quobyte Volumes
- VMware Photon
- Portworx Volumes
- ScaleIO Volumes
- HostPath:宿主機(jī)目錄,僅用于單機(jī)測(cè)試辱挥。
每種存儲(chǔ)類型都有各自的特定犁嗅,在使用時(shí)需要根據(jù)它們各自的參數(shù)進(jìn)行設(shè)置。
1. PV的關(guān)鍵配置參數(shù)
1)存儲(chǔ)能力(Capacity)
描述存儲(chǔ)設(shè)備的能力晤碘,目前僅支持對(duì)存儲(chǔ)空間的設(shè)置(storage=xx)褂微,未來可能加入IOPS、吞吐率等指標(biāo)的設(shè)置园爷。
2)訪問模式(Access Modes)
對(duì)PV進(jìn)行訪問模式的設(shè)置宠蚂,用于描述用戶應(yīng)用對(duì)存儲(chǔ)資源的訪問權(quán)限。訪問模式如下:
-
ReadWriteOnce
(簡(jiǎn)寫為RWO
):讀寫權(quán)限童社,并且只能被單個(gè)Node掛載求厕。 -
ReadOnlyMany
(簡(jiǎn)寫為ROX
):只讀權(quán)限,允許被多個(gè)Node掛載扰楼。 -
ReadWriteMany
(簡(jiǎn)寫為RWX
):讀寫權(quán)限呀癣,允許被多個(gè)Node掛載。
某些PV可能支持多種訪問模式弦赖,但PV在掛載時(shí)只能使用一種訪問模式项栏,多種訪問模式不能同時(shí)生效。
下表描述了不同的存儲(chǔ)提供者支持的訪問模式蹬竖,在PV的定義時(shí)需要與它們匹配:
3)存儲(chǔ)類別(Class)
PV可以設(shè)定其存儲(chǔ)的類型(Class)沼沈,通過 storageClassName
參數(shù)指定一個(gè) StorageClass 資源對(duì)象的名稱。具有特定“類別”的 PV 只能與請(qǐng)求了該“類別”的 PVC 進(jìn)行綁定币厕。未設(shè)定 “類別” 的 PV 則只能與不請(qǐng)求任何 “類別” 的 PVC 進(jìn)行綁定列另。
4)回收策略
目前支持如下三種回收策略:
- 保留(Retain):保留數(shù)據(jù),需要手工處理旦装。
- 回收空間(Recycle):簡(jiǎn)單清除文件的操作(例如執(zhí)行 rm -rf /thevolume/* 命令)页衙。
- 刪除(Delete):與 PV 向量的后端存儲(chǔ)完成 volume 的刪除操作;如 AWS EBS同辣、 GCE PD拷姿、Azure Disk 和 Cinder volumes 支持 “Delete” 策略。
目前旱函,只有 NFS 和 HostPath 兩種類型的存儲(chǔ)設(shè)備支持 “Recycle” 策略响巢; AWS EBS、 GCE PD棒妨、Azure Disk 和 Cinder volumes 支持 “Delete” 策略踪古。
2. PV 生命周期的各個(gè)階段(Phase)
某個(gè) PV 在生命周期中,可以處于以下4個(gè)階段之一:
- Available:可用狀態(tài)券腔,還未與某個(gè) PVC 綁定伏穆。
- Bound:已與某個(gè) PVC 綁定。
- Released:綁定的 PVC 已經(jīng)刪除纷纫,資源已釋放枕扫,但沒有被集群回收。
- Failed:自動(dòng)資源回收失敗辱魁。
3. PV 的掛載參數(shù)(Mount Options)
在將PV掛載到一個(gè) Node 上時(shí),根據(jù)后端存儲(chǔ)的特點(diǎn),可能需要設(shè)置額外的掛載參數(shù),目前可以通過在PV的定義中烟瞧,設(shè)置一個(gè)名為“volume.beta.kubernetes.io/mount-options”的 annotation 來實(shí)現(xiàn)。下面的例子對(duì)一個(gè)類型的 gcePersistentDisk 的 PV 設(shè)置了掛載參數(shù) “discard”:
apiVersion: v1
kind: PersistentVolume
metadata:
name: gce-disk-1
annotations:
volume.beta.kubernetes.io/mount-options: discard
spec:
capacity:
storage: 10Gi
accessMode:
- ReadWriteOnce
gcePersistentDisk:
fsType: ext4
pdName: gce-disk-1
并非所有類型的存儲(chǔ)都支持設(shè)置掛載參數(shù)染簇。從 Kubernetes v1.6 版本開始参滴,以下存儲(chǔ)類型支持設(shè)置掛載參數(shù):
- gcePersistentDisk
- AWSElasticBlockStore
- AzureFile
- AzureDisk
- NFS
- iSCSI
- RBD(Rados Block Device)
- CephFS
- GlusterFS
- Cinder
- VsphereVolume
- Quobyte Volumes
- VMware Photon
定義了 PV 以后如何使用呢?這是就需要用到 PVC 了锻弓。
PVC詳解
PVC 作為用戶對(duì)存儲(chǔ)資源的需求申請(qǐng)砾赔,主要包括存儲(chǔ)空間請(qǐng)求、訪問模式青灼、PV 選擇條件和存儲(chǔ)類別等信息的設(shè)置暴心。
下面的例子聲明的 PVC 具有如下屬性:申請(qǐng)8Gi存儲(chǔ)空間,訪問模式為 “ReadWriteOnce”杂拨, PV 選擇條件為包含標(biāo)簽 “release=stable” 并且包含條件為 “environment In [dev]”的標(biāo)簽酷勺,存儲(chǔ)類別為 “slow” (要求系統(tǒng)中已存在名為 slow 的 StorageClass):
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: myclaim
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 8Gi
storageClassName: slow
selector:
matchLabels:
release: stable
matchExpressions:
- {key: environment, operator: In, values: [dev]}
PVC的關(guān)鍵配置參數(shù)說明如下:
-
資源請(qǐng)求(Resources)
:描述對(duì)存儲(chǔ)資源的請(qǐng)求,目前僅支持request.storage
的設(shè)置扳躬,即存儲(chǔ)空間大小脆诉。 -
訪問模式(Access Modes)
:PVC 也可以設(shè)置訪問模式,用于描述用戶應(yīng)用對(duì)存儲(chǔ)資源的訪問權(quán)限贷币』魇ぃ可以設(shè)置的三種訪問模式與 PV 的設(shè)置相同。 -
PV選擇條件(Selector)
:通過 Label Selector 的設(shè)置役纹,可使 PVC 對(duì)應(yīng)系統(tǒng)中已存在的各種 PV 進(jìn)行篩選偶摔。系統(tǒng)將根據(jù)標(biāo)簽選擇出合適的 PV 與該 PVC 進(jìn)行綁定。選擇條件可以使用matchLabels
和matchExpressions
進(jìn)行設(shè)置促脉,如果兩個(gè)字段都設(shè)置了辰斋,則 Selector 的邏輯將是兩組條件同時(shí)滿足才能完成匹配策州。 -
存儲(chǔ)類別(Class)
:PVC 在定義時(shí)可以設(shè)定需要的后端存儲(chǔ)的“類別”(通過 storageClassName 字段指定),以降低對(duì)后端存儲(chǔ)特性的詳細(xì)信息的依賴宫仗。只有設(shè)置了該 Class 的 PV 才能被系統(tǒng)選出够挂,并與該 PVC 進(jìn)行綁定。
PVC 也可以不設(shè)置 Class 需求藕夫。如果 storageClassName 字段的值被設(shè)置為空(storageClassName=“”)孽糖,則表示該 PVC 不要求特定的 Class,系統(tǒng)將只選擇未設(shè)定 Class 的 PV 與之匹配和綁定毅贮。 PVC 也可以完全不設(shè)置 storageClassName 字段办悟,此時(shí)系統(tǒng)將根據(jù)系統(tǒng)是否啟用了名為 “DefaultStorageClass” 的 admission controller 進(jìn)行相應(yīng)的操作。
- 未啟用 DefaultStorageClass:等效于 PVC 設(shè)置 storageClassName 的值為空(storageClassName=“”)滩褥,即只能選擇未設(shè)定 Class 的 PV 與之匹配和綁定病蛉。
-
啟用DefaultStorageClass:要求極其管理員已定義默認(rèn)的 StorageClass。如果系統(tǒng)中不存在默認(rèn)的 StorageClass瑰煎, 則等效于不啟用 DefaultStorageClass 的情況铡恕。如果存在默認(rèn)的 StorageClass,則系統(tǒng)將自動(dòng)為 PVC 創(chuàng)建一個(gè) PV(使用默認(rèn) StorageClass 的后端存儲(chǔ))丢间,并將它們進(jìn)行綁定探熔。
集群管理員設(shè)置默認(rèn) StorageClass 的方法為,在 StorageClass 的定義中加上一個(gè) annotation “storageclass.kubernetes.io/is-default-class=true”烘挫,如果管理員將多個(gè) StorageClass 都定義為default诀艰,則由于不唯一,系統(tǒng)將無法為 PVC 創(chuàng)建相應(yīng)的 PV饮六。
注意其垄,PVC 和 PV 都受限于 namespace,PVC 在選擇 PV 時(shí)受到 namespace 的限制卤橄,只有相同 namespace 中的 PV 才可能與 PVC 綁定绿满。 Pod 在應(yīng)用 PVC 時(shí)同樣受到 namespace 的限制,只有相同 namespace 中的 PVC 才能掛載到 Pod 內(nèi)窟扑。
當(dāng) Selector 中的 Class 都進(jìn)行設(shè)置時(shí)喇颁,系統(tǒng)將選擇兩個(gè)條件同時(shí)滿足的 PV 與之匹配。
另外嚎货,如果資源供應(yīng)使用的是動(dòng)態(tài)模式橘霎,即管理員沒有預(yù)先定義 PV,僅通過 StorageClass 交給系統(tǒng)自動(dòng)完成 PV 的動(dòng)態(tài)創(chuàng)建殖属,那么 PVC 再設(shè)定 Selector 時(shí)姐叁,系統(tǒng)將無法為其供應(yīng)任何存儲(chǔ)資源了。
在啟用動(dòng)態(tài)供應(yīng)模式的情況下,一旦用戶刪除了 PVC外潜, 與之綁定的 PV 將根據(jù)其默認(rèn)的回收策略 “Delete” 也會(huì)被刪除原环。如果需要保留 PV (用戶數(shù)據(jù)),則在動(dòng)態(tài)綁定成功后处窥,用戶需要將系統(tǒng)自動(dòng)生成 PV 的回收策略從“Delete” 改成 “Retain”嘱吗。
PV 和 PVC 的生命周期
PV 可以看做可用的存儲(chǔ)資源, PVC則是對(duì)存儲(chǔ)資源的需求碧库,PV 和 PVC 的相互關(guān)系遵循如下圖所示的聲明周期:
1.資源供應(yīng)(Provisioning)
Kubernetes 支持兩種資源的供應(yīng)模式:靜態(tài)模式(Static)和動(dòng)態(tài)模式(Dynamic)。資源供應(yīng)的結(jié)果就是創(chuàng)建好的 PV巧勤。
- 靜態(tài)模式:集群管理員手工創(chuàng)建許多 PV嵌灰,在定義 PV 時(shí)需要將后端存儲(chǔ)的特性進(jìn)行設(shè)置。
- 動(dòng)態(tài)模式:集群管理員無需手工創(chuàng)建 PV颅悉,而是通過 StorageClass 的設(shè)置對(duì)后端存儲(chǔ)進(jìn)行描述沽瞭,標(biāo)記為某種“類型(Class)”。此時(shí)要求 PVC 對(duì)存儲(chǔ)的類型進(jìn)行聲明剩瓶,系統(tǒng)將自動(dòng)完成 PV 的創(chuàng)建及與 PVC 的綁定驹溃。PVC 可以聲明 Class 為 "",說明該 PVC 禁止使用動(dòng)態(tài)模式延曙。
2.資源綁定(Binding)
在用戶定義好 PVC 之后豌鹤,系統(tǒng)將根據(jù) PVC 對(duì)存儲(chǔ)資源的請(qǐng)求(存儲(chǔ)空間和訪問模式)在已存在的 PV 中選擇一個(gè)滿足 PVC 要求的 PV,一旦找到枝缔,就將該 PV 與用戶定義的 PVC 進(jìn)行綁定布疙,然后用戶的應(yīng)用就可以使用這個(gè) PVC 了。如果系統(tǒng)中沒有滿足 PVC 要求的 PV愿卸, PVC則會(huì)無限期處于 Pending 狀態(tài),知道等到系統(tǒng)管理員創(chuàng)建了一個(gè)符合其要求的 PV灵临。PV 一旦綁定到某個(gè) PVC 上,就被這個(gè) PVC 獨(dú)占趴荸,不能再與其他 PVC 進(jìn)行綁定了儒溉。
在這種情況下,當(dāng) PVC 申請(qǐng)的存儲(chǔ)空間比 PV 少時(shí)发钝,整個(gè) PV 的空間都能夠?yàn)?PVC 所用顿涣,可能會(huì)造成資源的浪費(fèi),如果資源供應(yīng)使用的是動(dòng)態(tài)模式酝豪,則系統(tǒng)在為 PVC 找到合適的 StorageClass 后园骆,將自動(dòng)創(chuàng)建一個(gè) PV 并完成與 PVC 的綁定。
3.資源使用(Using)
Pod 使用 volume 的定義寓调,將 PVC 掛載到容器內(nèi)的某個(gè)路徑進(jìn)行使用锌唾。volume 的類型為 “persistentVolumeClaim”,在后面的示例中再進(jìn)行詳細(xì)說明。在容器應(yīng)用掛載了一個(gè) PVC 后晌涕,就能被持續(xù)獨(dú)占使用滋捶。不過,多個(gè) Pod 可以掛載同一個(gè) PVC
余黎,應(yīng)用程序需要考慮多個(gè)實(shí)例共同訪問一塊存儲(chǔ)空間的問題重窟。
4.資源釋放(Releasing)
當(dāng)用戶對(duì)存儲(chǔ)資源使用完畢后,用戶可以刪除 PVC惧财,與該 PVC 綁定的 PV 將會(huì)被標(biāo)記為“已釋放”巡扇,但還不能立刻與其他 PVC 進(jìn)行綁定。通過之前 PVC 寫入的數(shù)據(jù)可能還留在存儲(chǔ)設(shè)備上垮衷,只有在清除之后該 PV 才能再次使用厅翔。
5.資源回收(Reclaiming)
對(duì)于 PV,管理員可以設(shè)定回收策略(Reclaim Policy)搀突,用于設(shè)置與之綁定的 PVC 釋放資源之后刀闷,對(duì)于遺留數(shù)據(jù)如何處理。只有 PV 的存儲(chǔ)空間完成回收仰迁,才能供新的 PVC 綁定和使用甸昏。回收策略詳見下節(jié)的說明徐许。
下面通過兩張圖分別對(duì)在靜態(tài)資源供應(yīng)模式和動(dòng)態(tài)資源供應(yīng)模式下施蜜,PV、PVC雌隅、StorageClass 及 Pod 使用 PVC 的原理進(jìn)行說明花墩。
下圖描述了在靜態(tài)資源供應(yīng)模式下,通過 PV 和 PVC 完成綁定澄步,并供 Pod 使用的存儲(chǔ)管理機(jī)制冰蘑。
下圖描述了在動(dòng)態(tài)資源供應(yīng)模式下,通過 StorageClass 和 PVC 完成資源動(dòng)態(tài)綁定(系統(tǒng)自動(dòng)生成 PV)村缸,并供 Pod 使用的存儲(chǔ)管理機(jī)制祠肥。
接下來梯皿,我們?cè)倏纯?StorageClass 的概念和用法仇箱。
StorageClass 詳解
StorageClass 作為對(duì)存儲(chǔ)資源的抽象定義,對(duì)用戶設(shè)置的 PVC 申請(qǐng)屏蔽后端資源存儲(chǔ)的細(xì)節(jié)东羹,一方面減輕用戶對(duì)存儲(chǔ)資源細(xì)節(jié)的關(guān)注剂桥,另一方面也減輕了管理員手工管理 PV 的工作,由系統(tǒng)自動(dòng)完成 PV 的創(chuàng)建和綁定属提,實(shí)現(xiàn)了動(dòng)態(tài)的資源供應(yīng)权逗。使用基于 StorageClass 的動(dòng)態(tài)資源供應(yīng)模式將逐步成為云平臺(tái)的標(biāo)準(zhǔn)存儲(chǔ)配置模式美尸。
StorageClass 的定義主要包括名稱、后端存儲(chǔ)的提供者(Provisioner)和后端存儲(chǔ)的相關(guān)參數(shù)配置斟薇。StorageClass 一旦被創(chuàng)建出來师坎,將無法修改。
如果需要更改堪滨,則只能刪除原 StorageClass 的定義重建胯陋。下面的例子定義了一個(gè)名為 “standard” 的 StorageClass,提供者為 aws-ebs袱箱,其參數(shù)設(shè)置了一個(gè) type=gp2遏乔。
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: standard
provisioner: kubernetes.io/aws-ebs
parameters:
1.StorageClass 的關(guān)鍵配置參數(shù)
1) 提供者(Provisioner)
描述存儲(chǔ)資源的提供者,也可以看做后端存儲(chǔ)驅(qū)動(dòng)发笔。目前 Kubernetes 支持的 Provisioner 都以 “kubernetes.io/” 為開頭盟萨,用戶也可以使用自定義的后端存儲(chǔ)提供者。為了符合 StorageClass 的用法筐咧,自定義 Provisioner 需要符合存儲(chǔ)卷的開發(fā)規(guī)范鸯旁。
2)參數(shù)(Parameters)
后端存儲(chǔ)資源提供者的參數(shù)設(shè)置噪矛,不同的 Provisioner 包括不同的參數(shù)設(shè)置量蕊。某些參數(shù)可以不顯示設(shè)定, Provisioner 將使用其默認(rèn)值艇挨。
接下來通過幾種常見的 Provisioner 對(duì) StorageClass 的定義進(jìn)行詳細(xì)說明:
AWS EBS 存儲(chǔ)卷
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: slow
provisioner: kubernetes.io/aws-ebs
parameters:
type: io1
zone: us-east-1d
iopsPerGB: "10"
參數(shù)說明如下(詳細(xì)說明請(qǐng)參數(shù) AWS EBS文檔):
- type:可選項(xiàng)為io1,gp2,sc1,st1,默認(rèn)值為gp2
- zone:AWS zone的名稱
- iopsPerGB:及用于io1類型的volume残炮,意為每秒GiB的I/O操作數(shù)量
- encrypted:是否加密
- kmsKeyId:加密時(shí)的 Amazon Resource Name
GCE PD 存儲(chǔ)卷
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: slow
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-standard
zone: us-centrall-a
參數(shù)說明如下(詳細(xì)說明請(qǐng)參考GCE文檔):
- type:可選項(xiàng)為pd-standard、pd-ssd缩滨,默認(rèn)值為pd-standard
- zone:GCE zone名稱
GlusterFS 存儲(chǔ)卷
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: slow
provisioner: kubernetes.io/glusterfs
parameters:
resturl: "http://127.0.0.1:8081"
clusterid: "2bce7ww8rwruisfdfuuy67wer"
restauthenabled: "true"
restuser: "admin"
restuserkey: "My Secret"
secretNamespace: "default"
secretName: "heketi-secret"
gidMin: "40000"
gidMax: "50000"
volumetype: "replicate:3"
參數(shù)說明如下(詳細(xì)說明請(qǐng)參數(shù) GlusterFS 和 Heketi 的文檔):
-resturl:Gluster REST服務(wù)(Heketi)的URL地址势就,用于自動(dòng)完成 GlusterFSvolume的設(shè)置。
-restauthenabled:是否對(duì) Gluster REST服務(wù)啟用安全機(jī)制脉漏。
-restuser:訪問Gluster REST服務(wù)的用戶名苞冯。
-secretNamespace 和 secretName:保存訪問 Gluster REST服務(wù)密碼的 Secret 資源對(duì)象名。
-clusterid:GlusterFS 的 Cluster ID侧巨。
-gidMin 和 gidMax:StorageClass 的 GID 范圍舅锄,用于動(dòng)態(tài)資源供應(yīng)時(shí)為 PV 設(shè)置的 GID。
-volumetype:GlusterFS 的 volume 類型設(shè)置司忱,例如 replicate:3 (Replicate類型皇忿,3份副本);disperse:4:2(Disperse類型坦仍,數(shù)據(jù)4份鳍烁,冗余2份);“none”(Distribute類型)繁扎。
OpenStack Cinder存儲(chǔ)卷
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: gold
provisioner: kubernetes.io/cinder
parameters:
type: fast
availability: nova
參數(shù)說明如下:
- type:Cinder 的 VolumeType幔荒,默認(rèn)值為空。
- availability:Availability Zone,默認(rèn)值為空铺峭。
其他 Provisioner 的 StorageClass 相關(guān)參數(shù)設(shè)置請(qǐng)參考它們各自的配置手冊(cè)墓怀。
2.設(shè)置默認(rèn)的(Default)StorageClass
要在系統(tǒng)中設(shè)置一個(gè)默認(rèn)的 StorageClass,首先需要啟用名為“DefaultStorageClass”的 admission controller卫键,即在 kube-apiserver 的命令行參數(shù) --admission-control 中增加:
--admission-control=...,DefaultStorageClass
然后傀履,在 StorageClass 的定義中設(shè)置一個(gè) annotation:
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: gold
annotations:
storageclass.beta.kubernetes.io/is-default-class="true"
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-ssd
通過 kubectl create命令創(chuàng)建成功后,查看 StorageClass 列表莉炉,可以看到名為 gold 的 StorageClass 被標(biāo)記為“default”:
# kubectl get sc
NAME TYPE
gold(default) kubernetes.io/gce-pd