新聞中心
介紹
StorageClass 為管理員提供了描述存儲(chǔ) "類(lèi)" 的方法。 不同的類(lèi)型可能會(huì)映射到不同的服務(wù)質(zhì)量等級(jí)或備份策略,或是由集群管理員制定的任意策略。 Kubernetes 本身并不清楚各種類(lèi)代表的什么。這個(gè)類(lèi)的概念在其他存儲(chǔ)系統(tǒng)中有時(shí)被稱(chēng)為 "配置文件"。

StorageClass 資源
每個(gè) StorageClass 都包含 ?provisioner?、?parameters ?和 ?reclaimPolicy ?字段, 這些字段會(huì)在 StorageClass 需要?jiǎng)討B(tài)分配 PersistentVolume 時(shí)會(huì)使用到。
StorageClass 對(duì)象的命名很重要,用戶使用這個(gè)命名來(lái)請(qǐng)求生成一個(gè)特定的類(lèi)。 當(dāng)創(chuàng)建 StorageClass 對(duì)象時(shí),管理員設(shè)置 StorageClass 對(duì)象的命名和其他參數(shù),一旦創(chuàng)建了對(duì)象就不能再對(duì)其更新。
管理員可以為沒(méi)有申請(qǐng)綁定到特定 StorageClass 的 PVC 指定一個(gè)默認(rèn)的存儲(chǔ)類(lèi)。
apiVersion: storage.K8S.io/v1
kind: StorageClass
metadata:
name: standard
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
reclaimPolicy: Retain
allowVolumeExpansion: true
mountOptions:
- debug
volumeBindingMode: Immediate存儲(chǔ)制備器
每個(gè) StorageClass 都有一個(gè)制備器(Provisioner),用來(lái)決定使用哪個(gè)卷插件制備 PV。 該字段必須指定。
| 卷插件 | 內(nèi)置制備器 | 配置例子 |
|---|---|---|
| AWSElasticBlockStore | AWS EBS | |
| AzureFile | Azure File | |
| AzureDisk | Azure Disk | |
| CephFS | - | - |
| Cinder | OpenStack Cinder | |
| FC | - | - |
| FlexVolume | - | - |
| Flocker | - | |
| GCEPersistentDisk | GCE PD | |
| Glusterfs | Glusterfs | |
| iSCSI | - | - |
| Quobyte | Quobyte | |
| NFS | - | NFS |
| RBD | Ceph RBD | |
| VsphereVolume | vSphere | |
| PortworxVolume | Portworx Volume | |
| ScaleIO | ScaleIO | |
| StorageOS | StorageOS | |
| Local | - | Local |
你不限于指定此處列出的 "內(nèi)置" 制備器(其名稱(chēng)前綴為 "kubernetes.io" 并打包在 Kubernetes 中)。 你還可以運(yùn)行和指定外部制備器,這些獨(dú)立的程序遵循由 Kubernetes 定義的 規(guī)范。 外部供應(yīng)商的作者完全可以自由決定他們的代碼保存于何處、打包方式、運(yùn)行方式、使用的插件(包括 Flex)等。 代碼倉(cāng)庫(kù) kubernetes-sigs/sig-storage-lib-external-provisioner 包含一個(gè)用于為外部制備器編寫(xiě)功能實(shí)現(xiàn)的類(lèi)庫(kù)。你可以訪問(wèn)代碼倉(cāng)庫(kù) kubernetes-sigs/sig-storage-lib-external-provisioner 了解外部驅(qū)動(dòng)列表。
例如,NFS 沒(méi)有內(nèi)部制備器,但可以使用外部制備器。 也有第三方存儲(chǔ)供應(yīng)商提供自己的外部制備器。
回收策略
由 StorageClass 動(dòng)態(tài)創(chuàng)建的 PersistentVolume 會(huì)在類(lèi)的 ?reclaimPolicy ?字段中指定回收策略,可以是 ?Delete ?或者 ?Retain?。如果 StorageClass 對(duì)象被創(chuàng)建時(shí)沒(méi)有指定 ?reclaimPolicy?,它將默認(rèn)為 ?Delete?。
通過(guò) StorageClass 手動(dòng)創(chuàng)建并管理的 PersistentVolume 會(huì)使用它們被創(chuàng)建時(shí)指定的回收政策。
允許卷擴(kuò)展
FEATURE STATE: Kubernetes v1.11 [beta]
PersistentVolume 可以配置為可擴(kuò)展。將此功能設(shè)置為 ?true ?時(shí),允許用戶通過(guò)編輯相應(yīng)的 PVC 對(duì)象來(lái)調(diào)整卷大小。
當(dāng)下層 StorageClass 的 ?allowVolumeExpansion ?字段設(shè)置為 true 時(shí),以下類(lèi)型的卷支持卷擴(kuò)展。
| 卷類(lèi)型 | Kubernetes 版本要求 |
|---|---|
| gcePersistentDisk | 1.11 |
| awsElasticBlockStore | 1.11 |
| Cinder | 1.11 |
| glusterfs | 1.11 |
| rbd | 1.11 |
| Azure File | 1.11 |
| Azure Disk | 1.11 |
| Portworx | 1.11 |
| FlexVolume | 1.13 |
| CSI | 1.14 (alpha), 1.16 (beta) |
此功能僅可用于擴(kuò)容卷,不能用于縮小卷。
掛載選項(xiàng)
由 StorageClass 動(dòng)態(tài)創(chuàng)建的 PersistentVolume 將使用類(lèi)中 ?mountOptions ?字段指定的掛載選項(xiàng)。
如果卷插件不支持掛載選項(xiàng),卻指定了掛載選項(xiàng),則制備操作會(huì)失敗。 掛載選項(xiàng)在 StorageClass 和 PV 上都不會(huì)做驗(yàn)證,如果其中一個(gè)掛載選項(xiàng)無(wú)效,那么這個(gè) PV 掛載操作就會(huì)失敗。
卷綁定模式
?volumeBindingMode ?字段控制了卷綁定和動(dòng)態(tài)制備 應(yīng)該發(fā)生在什么時(shí)候。
默認(rèn)情況下,?Immediate ?模式表示一旦創(chuàng)建了 PersistentVolumeClaim 也就完成了卷綁定和動(dòng)態(tài)制備。 對(duì)于由于拓?fù)湎拗贫羌核泄?jié)點(diǎn)可達(dá)的存儲(chǔ)后端,PersistentVolume 會(huì)在不知道 Pod 調(diào)度要求的情況下綁定或者制備。
集群管理員可以通過(guò)指定 ?WaitForFirstConsumer ?模式來(lái)解決此問(wèn)題。 該模式將延遲 PersistentVolume 的綁定和制備,直到使用該 PersistentVolumeClaim 的 Pod 被創(chuàng)建。 PersistentVolume 會(huì)根據(jù) Pod 調(diào)度約束指定的拓?fù)鋪?lái)選擇或制備。這些包括但不限于 資源需求、 節(jié)點(diǎn)篩選器、 pod 親和性和互斥性、 以及污點(diǎn)和容忍度。
以下插件支持動(dòng)態(tài)供應(yīng)的 ?WaitForFirstConsumer ?模式:
- AWSElasticBlockStore
- GCEPersistentDisk
- AzureDisk
以下插件支持預(yù)創(chuàng)建綁定 PersistentVolume 的 ?WaitForFirstConsumer ?模式:
- 上述全部
- Local
FEATURE STATE: Kubernetes v1.17 [stable]
動(dòng)態(tài)配置和預(yù)先創(chuàng)建的 PV 也支持 CSI卷, 但是你需要查看特定 CSI 驅(qū)動(dòng)程序的文檔以查看其支持的拓?fù)滏I名和例子。
如果你選擇使用 ?
WaitForFirstConsumer?,請(qǐng)不要在 Pod 規(guī)約中使用 ?
nodeName?來(lái)指定節(jié)點(diǎn)親和性。 如果在這種情況下使用 ?
nodeName?,Pod 將會(huì)繞過(guò)調(diào)度程序,PVC 將停留在 ?
pending?狀態(tài)。
相反,在這種情況下,你可以使用節(jié)點(diǎn)選擇器作為主機(jī)名,如下所示
apiVersion: v1
kind: Pod
metadata:
name: task-pv-pod
spec:
nodeSelector:
kubernetes.io/hostname: kube-01
volumes:
- name: task-pv-storage
persistentVolumeClaim:
claimName: task-pv-claim
containers:
- name: task-pv-container
image: nginx
ports:
- containerPort: 80
name: "http-server"
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: task-pv-storage允許的拓?fù)浣Y(jié)構(gòu)
FEATURE STATE: Kubernetes v1.12 [beta]
當(dāng)集群操作人員使用了 ?WaitForFirstConsumer ?的卷綁定模式, 在大部分情況下就沒(méi)有必要將制備限制為特定的拓?fù)浣Y(jié)構(gòu)。 然而,如果還有需要的話,可以使用 ?allowedTopologies?。
這個(gè)例子描述了如何將供應(yīng)卷的拓?fù)湎拗圃谔囟ǖ膮^(qū)域,在使用時(shí)應(yīng)該根據(jù)插件 支持情況替換 ?zone ?和 ?zones ?參數(shù)。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: standard
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-standard
volumeBindingMode: WaitForFirstConsumer
allowedTopologies:
- matchLabelExpressions:
- key: failure-domain.beta.kubernetes.io/zone
values:
- us-central-1a
- us-central-1b參數(shù)
Storage Classes 的參數(shù)描述了存儲(chǔ)類(lèi)的卷。取決于制備器,可以接受不同的參數(shù)。 例如,參數(shù) type 的值 io1 和參數(shù) iopsPerGB 特定于 EBS PV。 當(dāng)參數(shù)被省略時(shí),會(huì)使用默認(rèn)值。
一個(gè) StorageClass 最多可以定義 512 個(gè)參數(shù)。這些參數(shù)對(duì)象的總長(zhǎng)度不能 超過(guò) 256 KiB, 包括參數(shù)的鍵和值。
AWS EBS
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: slow
provisioner: kubernetes.io/aws-ebs
parameters:
type: io1
iopsPerGB: "10"
fsType: ext4- ?
type?:?io1?,?gp2?,?sc1?,?st1?。詳細(xì)信息參見(jiàn) AWS 文檔。默認(rèn)值:?gp2?。 - ?
zone?(棄用):AWS 區(qū)域。如果沒(méi)有指定 ?zone?和 ?zones?, 通常卷會(huì)在 Kubernetes 集群節(jié)點(diǎn)所在的活動(dòng)區(qū)域中輪詢(xún)調(diào)度分配。 ?zone?和 ?zones?參數(shù)不能同時(shí)使用。 - ?
zones?(棄用):以逗號(hào)分隔的 AWS 區(qū)域列表。 如果沒(méi)有指定 ?zone?和 ?zones?,通常卷會(huì)在 Kubernetes 集群節(jié)點(diǎn)所在的 活動(dòng)區(qū)域中輪詢(xún)調(diào)度分配。?zone?和?zones?參數(shù)不能同時(shí)使用。 - ?
iopsPerGB?:只適用于 ?io1?卷。每 GiB 每秒 I/O 操作。 AWS 卷插件將其與請(qǐng)求卷的大小相乘以計(jì)算 IOPS 的容量, 并將其限制在 20000 IOPS(AWS 支持的最高值,請(qǐng)參閱 AWS 文檔。 這里需要輸入一個(gè)字符串,即 ?"10"?,而不是 ?10?。 - ?
fsType?:受 Kubernetes 支持的文件類(lèi)型。默認(rèn)值:?"ext4"?。 - ?
encrypted?:指定 EBS 卷是否應(yīng)該被加密。合法值為 ?"true"? 或者 ?"false"?。 這里需要輸入字符串,即 ?"true"?, 而非 ?true?。 - ?
kmsKeyId?:可選。加密卷時(shí)使用密鑰的完整 Amazon 資源名稱(chēng)。 如果沒(méi)有提供,但 ?encrypted?值為 true,AWS 生成一個(gè)密鑰。關(guān)于有效的 ARN 值,請(qǐng)參閱 AWS 文檔。
?
zone?和 ?zones?已被棄用并被 允許的拓?fù)浣Y(jié)構(gòu) 取代。
GCE PD
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: slow
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-standard
fstype: ext4
replication-type: none- ?
type?:?pd-standard? 或者 ?pd-ssd?。默認(rèn):?pd-standard? - ?
zone?(棄用):GCE 區(qū)域。如果沒(méi)有指定 ?zone?和 ?zones?,通常 卷會(huì)在 Kubernetes 集群節(jié)點(diǎn)所在的活動(dòng)區(qū)域中輪詢(xún)調(diào)度分配。 ?zone?和 ?zones?參數(shù)不能同時(shí)使用。 - ?
zones?(棄用):逗號(hào)分隔的 GCE 區(qū)域列表。如果沒(méi)有指定 ?zone?和 ?zones?, 通常卷會(huì)在 Kubernetes 集群節(jié)點(diǎn)所在的活動(dòng)區(qū)域中輪詢(xún)調(diào)度(round-robin)分配。 ?zone?和 ?zones?參數(shù)不能同時(shí)使用。 - ?
fstype?: ?ext4?或 ?xfs?。 默認(rèn): ?ext4?。宿主機(jī)操作系統(tǒng)必須支持所定義的文件系統(tǒng)類(lèi)型。 - ?
replication-type?:?none?或者 ?regional-pd?。默認(rèn)值:?none?。
如果 ?replication-type? 設(shè)置為 ?none?,會(huì)制備一個(gè)常規(guī)(當(dāng)前區(qū)域內(nèi)的)持久化磁盤(pán)。
如果 ?replication-type? 設(shè)置為 ?regional-pd?,會(huì)制備一個(gè) 區(qū)域性持久化磁盤(pán)(Regional Persistent Disk)。
強(qiáng)烈建議設(shè)置 ?volumeBindingMode: WaitForFirstConsumer?,這樣設(shè)置后, 當(dāng)你創(chuàng)建一個(gè) Pod,它使用的 PersistentVolumeClaim 使用了這個(gè) StorageClass, 區(qū)域性持久化磁盤(pán)會(huì)在兩個(gè)區(qū)域里制備。 其中一個(gè)區(qū)域是 Pod 所在區(qū)域。 另一個(gè)區(qū)域是會(huì)在集群管理的區(qū)域中任意選擇。磁盤(pán)區(qū)域可以通過(guò) ?allowedTopologies ?加以限制。
?
zone?和 ?zones?已被棄用并被 allowedTopologies 取代。
Glusterfs
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: slow
provisioner: kubernetes.io/glusterfs
parameters:
resturl: "http://127.0.0.1:8081"
clusterid: "630372ccdc720a92c681fb928f27b53f"
restauthenabled: "true"
restuser: "admin"
secretNamespace: "default"
secretName: "heketi-secret"
gidMin: "40000"
gidMax: "50000"
volumetype: "replicate:3"- ?
resturl?:制備 gluster 卷的需求的 Gluster REST 服務(wù)/Heketi 服務(wù) url。 通用格式應(yīng)該是 ?IPaddress:Port?,這是 GlusterFS 動(dòng)態(tài)制備器的必需參數(shù)。 如果 Heketi 服務(wù)在 OpenShift/kubernetes 中安裝并暴露為可路由服務(wù),則可以使用類(lèi)似于 ?http://heketi-storage-project.cloudapps.mystorage.com? 的格式,其中 fqdn 是可解析的 heketi 服務(wù)網(wǎng)址。 - ?
restauthenabled?:Gluster REST 服務(wù)身份驗(yàn)證布爾值,用于啟用對(duì) REST 服務(wù)器的身份驗(yàn)證。 如果此值為 'true',則必須填寫(xiě) ?restuser?和 ?restuserkey?或 ?secretNamespace?+ ?secretName?。 此選項(xiàng)已棄用,當(dāng)在指定 ?restuser?、?restuserkey?、?secretName?或 ?secretNamespace?時(shí),身份驗(yàn)證被啟用。 - ?
restuser?:在 Gluster 可信池中有權(quán)創(chuàng)建卷的 Gluster REST服務(wù)/Heketi 用戶。 - ?
restuserkey?:Gluster REST 服務(wù)/Heketi 用戶的密碼將被用于對(duì) REST 服務(wù)器進(jìn)行身份驗(yàn)證。 此參數(shù)已棄用,取而代之的是 ?secretNamespace?+ ?secretName?。 - ?
secretNamespace?,?secretName?:Secret 實(shí)例的標(biāo)識(shí),包含與 Gluster REST 服務(wù)交互時(shí)使用的用戶密碼。 這些參數(shù)是可選的,?secretNamespace?和 ?secretName?都省略時(shí)使用空密碼。 所提供的 Secret 必須將類(lèi)型設(shè)置為 "kubernetes.io/glusterfs",例如以這種方式創(chuàng)建:
kubectl create secret generic heketi-secret \
--type="kubernetes.io/glusterfs" --from-literal=key='opensesame' \
--namespace=defaultSecret 的例子可以在 glusterfs-provisioning-secret.yaml 中找到。
- ?
clusterid?:?630372ccdc720a92c681fb928f27b53f? 是集群的 ID,當(dāng)制備卷時(shí), Heketi 將會(huì)使用這個(gè)文件。它也可以是一個(gè) clusterid 列表,例如: ?"8452344e2becec931ece4e33c4674e4e,42982310de6c63381718ccfa6d8cf397"?。這個(gè)是可選參數(shù)。 - ?
gidMin?,?gidMax?:StorageClass GID 范圍的最小值和最大值。 在此范圍(gidMin-gidMax)內(nèi)的唯一值(GID)將用于動(dòng)態(tài)制備卷。這些是可選的值。 如果不指定,所制備的卷為一個(gè) 2000-2147483647 之間的值,這是 gidMin 和 gidMax 的默認(rèn)值。 - ?
volumetype?:卷的類(lèi)型及其參數(shù)可以用這個(gè)可選值進(jìn)行配置。如果未聲明卷類(lèi)型,則 由制備器決定卷的類(lèi)型。 例如: - 'Replica volume': ?
volumetype: replicate:3? 其中 '3' 是 replica 數(shù)量. - 'Disperse/EC volume': ?
volumetype: disperse:4:2? 其中 '4' 是數(shù)據(jù),'2' 是冗余數(shù)量. - 'Distribute volume': ?
volumetype: none?
有關(guān)可用的卷類(lèi)型和管理選項(xiàng),請(qǐng)參閱 管理指南。
更多相關(guān)的參考信息,請(qǐng)參閱 如何配置 Heketi。
當(dāng)動(dòng)態(tài)制備持久卷時(shí),Gluster 插件自動(dòng)創(chuàng)建名為 ?gluster-dynamic-? 的端點(diǎn)和無(wú)頭服務(wù)。在 PVC 被刪除時(shí)動(dòng)態(tài)端點(diǎn)和無(wú)頭服務(wù)會(huì)自動(dòng)被刪除。
NFS
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: example-nfs
provisioner: cdxwcx.com/external-nfs
parameters:
server: nfs-server.cdxwcx.com
path: /share
readOnly: "false"- ?
server?:NFS 服務(wù)器的主機(jī)名或 IP 地址。 - ?
path?:NFS 服務(wù)器導(dǎo)出的路徑。 - ?
readOnly?:是否將存儲(chǔ)掛載為只讀的標(biāo)志(默認(rèn)為 false)。
Kubernetes 不包含內(nèi)部 NFS 驅(qū)動(dòng)。你需要使用外部驅(qū)動(dòng)為 NFS 創(chuàng)建 StorageClass。 這里有些例子:
- NFS Ganesha 服務(wù)器和外部驅(qū)動(dòng)
- NFS subdir 外部驅(qū)動(dòng)
OpenStack Cinder
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: gold
provisioner: kubernetes.io/cinder
parameters:
availability: nova- ?
availability?:可用區(qū)域。如果沒(méi)有指定,通常卷會(huì)在 Kubernetes 集群節(jié)點(diǎn) 所在的活動(dòng)區(qū)域中輪轉(zhuǎn)調(diào)度。
FEATURE STATE: Kubernetes 1.11 [deprecated]
OpenStack 的內(nèi)部驅(qū)動(dòng)已經(jīng)被棄用。請(qǐng)使用 OpenStack 的外部云驅(qū)動(dòng)。
vSphere
vSphere 存儲(chǔ)類(lèi)有兩種制備器
- CSI 制備器: ?
csi.vsphere.vmware.com? - vCP 制備器: ?
kubernetes.io/vsphere-volume?
樹(shù)內(nèi)制備器已經(jīng)被 棄用。
CSI 制備器
vSphere CSI StorageClass 制備器在 Tanzu Kubernetes 集群下運(yùn)行。示例請(qǐng)參 vSphere CSI 倉(cāng)庫(kù)。
vCP 制備器
以下示例使用 VMware Cloud Provider (vCP) StorageClass 調(diào)度器
- 使用用戶指定的磁盤(pán)格式創(chuàng)建一個(gè) StorageClass。
- 在用戶指定的數(shù)據(jù)存儲(chǔ)上創(chuàng)建磁盤(pán)格式的 StorageClass。
- Kubernetes 中的存儲(chǔ)策略管理
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast
provisioner: kubernetes.io/vsphere-volume
parameters:
diskformat: zeroedthick?diskformat?: ?thin?, ?zeroedthick ?和 ?eagerzeroedthick?。默認(rèn)值: ?"thin"?。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast
provisioner: kubernetes.io/vsphere-volume
parameters:
diskformat: zeroedthick
datastore: VSANDatastore?datastore?:用戶也可以在 StorageClass 中指定數(shù)據(jù)存儲(chǔ)。 卷將在 storage class 中指定的數(shù)據(jù)存儲(chǔ)上創(chuàng)建,在這種情況下是 ?VSANDatastore?。 該字段是可選的。 如果未指定數(shù)據(jù)存儲(chǔ),則將在用于初始化 vSphere Cloud Provider 的 vSphere 配置文件中指定的數(shù)據(jù)存儲(chǔ)上創(chuàng)建該卷。
- 使用現(xiàn)有的 vCenter SPBM 策略
- Kubernetes 內(nèi)的 Virtual SAN 策略支持
vSphere 用于存儲(chǔ)管理的最重要特性之一是基于策略的管理。 基于存儲(chǔ)策略的管理(SPBM)是一個(gè)存儲(chǔ)策略框架,提供單一的統(tǒng)一控制平面的 跨越廣泛的數(shù)據(jù)服務(wù)和存儲(chǔ)解決方案。 SPBM 使能 vSphere 管理員克服先期的存儲(chǔ)配置挑戰(zhàn),如容量規(guī)劃,差異化服務(wù)等級(jí)和管理容量空間。 SPBM 策略可以在 StorageClass 中使用 ?
storagePolicyName ?參數(shù)聲明。
Vsphere Infrastructure(VI)管理員將能夠在動(dòng)態(tài)卷配置期間指定自定義 Virtual SAN 存儲(chǔ)功能。你現(xiàn)在可以在動(dòng)態(tài)制備卷期間以存儲(chǔ)能力的形式定義存儲(chǔ)需求,例如性能和可用性。 存儲(chǔ)能力需求會(huì)轉(zhuǎn)換為 Virtual SAN 策略,之后當(dāng)持久卷(虛擬磁盤(pán))被創(chuàng)建時(shí), 會(huì)將其推送到 Virtual SAN 層。虛擬磁盤(pán)分布在 Virtual SAN 數(shù)據(jù)存儲(chǔ)中以滿足要求。 你可以參考 基于存儲(chǔ)策略的動(dòng)態(tài)制備卷管理, 進(jìn)一步了解有關(guān)持久卷管理的存儲(chǔ)策略的詳細(xì)信息。
有幾個(gè) vSphere 例子 供你在 Kubernetes for vSphere 中嘗試進(jìn)行持久卷管理。
Ceph RBD
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast
provisioner: kubernetes.io/rbd
parameters:
monitors: 10.16.153.105:6789
adminId: kube
adminSecretName: ceph-secret
adminSecretNamespace: kube-system
pool: kube
userId: kube
userSecretName: ceph-secret-user
userSecretNamespace: default
fsType: ext4
imageFormat: "2"
imageFeatures: "layering"- ?
monitors?:Ceph monitor,逗號(hào)分隔。該參數(shù)是必需的。 - ?
adminId?:Ceph 客戶端 ID,用于在池 ceph 池中創(chuàng)建映像。默認(rèn)是 "admin"。 - ?
adminSecret?:?adminId?的 Secret 名稱(chēng)。該參數(shù)是必需的。 提供的 secret 必須有值為 "kubernetes.io/rbd" 的 type 參數(shù)。 - ?
adminSecretNamespace?:?adminSecret?的命名空間。默認(rèn)是 "default"。 - ?
pool?: Ceph RBD 池. 默認(rèn)是 "rbd"。 - ?
userId?:Ceph 客戶端 ID,用于映射 RBD 鏡像。默認(rèn)與 ?adminId?相同。 - ?
userSecretName?:用于映射 RBD 鏡像的 ?userId?的 Ceph Secret 的名字。 它必須與 PVC 存在于相同的 namespace 中。該參數(shù)是必需的。 提供的 secret 必須具有值為 "kubernetes.io/rbd" 的 type 參數(shù),例如以這樣的方式創(chuàng)建:
kubectl create secret generic ceph-secret --type="kubernetes.io/rbd" \
--from-literal=key='QVFEQ1pMdFhPUnQrSmhBQUFYaERWNHJsZ3BsMmNjcDR6RFZST0E9PQ==' \
--namespace=kube-system
userSecretNamespace?:?userSecretName? 的命名空間。fsType?:Kubernetes 支持的 fsType。默認(rèn):?"ext4"?。imageFormat?:Ceph RBD 鏡像格式,"1" 或者 "2"。默認(rèn)值是 "1"。imageFeatures?:這個(gè)參數(shù)是可選的,只能在你將 ?imageFormat ?設(shè)置為 "2" 才使用。 目前支持的功能只是 ?layering?。默認(rèn)是 "",沒(méi)有功能打開(kāi)。Quobyte
FEATURE STATE: Kubernetes v1.22 [deprecated]
Quobyte 樹(shù)內(nèi)(in-tree)存儲(chǔ)插件已棄用, 你可以在 Quobyte CSI 倉(cāng)庫(kù)中找到用于樹(shù)外(out-of-tree)Quobyte 插件的 ?StorageClass ?示例。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: slow
provisioner: kubernetes.io/quobyte
parameters:
quobyteAPIServer: "http://138.68.74.142:7860"
registry: "138.68.74.142:7861"
adminSecretName: "quobyte-admin-secret"
adminSecretNamespace: "kube-system"
user: "root"
group: "root"
quobyteConfig: "BASE"
quobyteTenant: "DEFAULT"- ?
quobyteAPIServer?:Quobyte API 服務(wù)器的格式是 ?"http(s)://api-server:7860"? - ?
registry?:用于掛載卷的 Quobyte 倉(cāng)庫(kù)。你可以指定倉(cāng)庫(kù)為 ?? 或者如果你想指定多個(gè) registry,在它們之間添加逗號(hào),例如 ?: ?。 主機(jī)可以是一個(gè) IP 地址,或者如果你有正在運(yùn)行的 DNS,你也可以提供 DNS 名稱(chēng)。: , : , : - ?
adminSecretNamespace?:?adminSecretName?的名字空間。 默認(rèn)值是 "default"。 - ?
adminSecretName?:保存關(guān)于 Quobyte 用戶和密碼的 Secret,用于對(duì) API 服務(wù)器進(jìn)行身份驗(yàn)證。 提供的 secret 必須有值為 "kubernetes.io/quobyte" 的 type 參數(shù)和 ?user?與 ?password?的鍵值, 例如以這種方式創(chuàng)建:
kubectl create secret generic quobyte-admin-secret \
--type="kubernetes.io/quobyte" --from-literal=key='opensesame' \
--namespace=kube-systemuser?:對(duì)這個(gè)用戶映射的所有訪問(wèn)權(quán)限。默認(rèn)是 "root"。 group?:對(duì)這個(gè)組映射的所有訪問(wèn)權(quán)限。默認(rèn)是 "nfsnobody"。 quobyteConfig?:使用指定的配置來(lái)創(chuàng)建卷。你可以創(chuàng)建一個(gè)新的配置, 或者,可以修改 Web 控制臺(tái)或 quobyte CLI 中現(xiàn)有的配置。默認(rèn)是 "BASE"。 quobyteTenant?:使用指定的租戶 ID 創(chuàng)建/刪除卷。這個(gè) Quobyte 租戶必須 已經(jīng)于 Quobyte 中存在。默認(rèn)是 "DEFAULT"。Azure 磁盤(pán)
Azure Unmanaged Disk Storage Class(非托管磁盤(pán)存儲(chǔ)類(lèi))
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: slow
provisioner: kubernetes.io/azure-disk
parameters:
skuName: Standard_LRS
location: eastus
storageAccount: azure_storage_account_name
- ?
skuName?:Azure 存儲(chǔ)帳戶 Sku 層。默認(rèn)為空。 - ?
location?:Azure 存儲(chǔ)帳戶位置。默認(rèn)為空。 - ?
storageAccount?:Azure 存儲(chǔ)帳戶名稱(chēng)。 如果提供存儲(chǔ)帳戶,它必須位于與集群相同的資源組中,并且 ?location?是被忽略的。如果未提供存儲(chǔ)帳戶,則會(huì)在與群集相同的資源組中創(chuàng)建新的存儲(chǔ)帳戶。
Azure 磁盤(pán) Storage Class(從 v1.7.2 開(kāi)始)
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: slow
provisioner: kubernetes.io/azure-disk
parameters:
storageaccounttype: Standard_LRS
kind: managed
- ?
storageaccounttype?:Azure 存儲(chǔ)帳戶 Sku 層。默認(rèn)為空。 - ?
kind?:可能的值是 ?shared?、?dedicated?和 ?managed?(默認(rèn))。 當(dāng) ?kind?的值是 ?shared?時(shí),所有非托管磁盤(pán)都在集群的同一個(gè)資源組中的幾個(gè)共享存儲(chǔ)帳戶中創(chuàng)建。 當(dāng) ?kind?的值是 ?dedicated?時(shí),將為在集群的同一個(gè)資源組中新的非托管磁盤(pán)創(chuàng)建新的專(zhuān)用存儲(chǔ)帳戶。 - ?
resourceGroup?: 指定要?jiǎng)?chuàng)建 Azure 磁盤(pán)所屬的資源組。必須是已存在的資源組名稱(chēng)。 若未指定資源組,磁盤(pán)會(huì)默認(rèn)放入與當(dāng)前 Kubernetes 集群相同的資源組中。 - Premium VM 可以同時(shí)添加 Standard_LRS 和 Premium_LRS 磁盤(pán),而 Standard 虛擬機(jī)只能添加 Standard_LRS 磁盤(pán)。
- 托管虛擬機(jī)只能連接托管磁盤(pán),非托管虛擬機(jī)只能連接非托管磁盤(pán)。
Azure 文件
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: azurefile
provisioner: kubernetes.io/azure-file
parameters:
skuName: Standard_LRS
location: eastus
storageAccount: azure_storage_account_name
- ?
skuName?:Azure 存儲(chǔ)帳戶 Sku 層。默認(rèn)為空。 - ?
location?:Azure 存儲(chǔ)帳戶位置。默認(rèn)為空。 - ?
storageAccount?:Azure 存儲(chǔ)帳戶名稱(chēng)。默認(rèn)為空。 如果不提供存儲(chǔ)帳戶,會(huì)搜索所有與資源相關(guān)的存儲(chǔ)帳戶,以找到一個(gè)匹配 ?skuName?和 ?location?的賬號(hào)。 如果提供存儲(chǔ)帳戶,它必須存在于與集群相同的資源組中,?skuName?和 ?location?會(huì)被忽略。 - ?
secretNamespace?:包含 Azure 存儲(chǔ)帳戶名稱(chēng)和密鑰的密鑰的名稱(chēng)空間。 默認(rèn)值與 Pod 相同。 - ?
secretName?:包含 Azure 存儲(chǔ)帳戶名稱(chēng)和密鑰的密鑰的名稱(chēng)。 默認(rèn)值為 ?azure-storage-account-?-secret - ?
readOnly?:指示是否將存儲(chǔ)安裝為只讀的標(biāo)志。默認(rèn)為 false,表示"讀/寫(xiě)"掛載。 該設(shè)置也會(huì)影響VolumeMounts中的 ?ReadOnly?設(shè)置。
在存儲(chǔ)制備期間,為掛載憑證創(chuàng)建一個(gè)名為 ?secretName ?的 Secret。如果集群同時(shí)啟用了 RBAC 和 控制器角色, 為 ?system:controller:persistent-volume-binder? 的 clusterrole 添加 ?Secret ?資源的 ?create ?權(quán)限。
在多租戶上下文中,強(qiáng)烈建議顯式設(shè)置 ?secretNamespace ?的值,否則 其他用戶可能會(huì)讀取存儲(chǔ)帳戶憑據(jù)。
Portworx 卷
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: portworx-io-priority-high
provisioner: kubernetes.io/portworx-volume
parameters:
repl: "1"
snap_interval: "70"
priority_io: "high"
- ?
fs?:選擇的文件系統(tǒng):?none/xfs/ext4?(默認(rèn):?ext4?)。 - ?
block_size?:以 Kbytes 為單位的塊大小(默認(rèn)值:?32?)。 - ?
repl?:同步副本數(shù)量,以復(fù)制因子 ?1..3?(默認(rèn)值:?1?)的形式提供。 這里需要填寫(xiě)字符串,即,?"1"? 而不是 ?1?。 - ?
io_priority?:決定是否從更高性能或者較低優(yōu)先級(jí)存儲(chǔ)創(chuàng)建卷 ?high/medium/low?(默認(rèn)值:?low?)。 - ?
snap_interval?:觸發(fā)快照的時(shí)鐘/時(shí)間間隔(分鐘)。 快照是基于與先前快照的增量變化,0 是禁用快照(默認(rèn):?0?)。 這里需要填寫(xiě)字符串,即,是?"70"?而不是 ?70?。 - ?
aggregation_level?:指定卷分配到的塊數(shù)量,0 表示一個(gè)非聚合卷(默認(rèn):?0?)。 這里需要填寫(xiě)字符串,即,是 ?"0"?而不是 ?0?。 - ?
ephemeral?:指定卷在卸載后進(jìn)行清理還是持久化。 ?emptyDir?的使用場(chǎng)景可以將這個(gè)值設(shè)置為 true , ?persistent volumes? 的使用場(chǎng)景可以將這個(gè)值設(shè)置為 false (例如 Cassandra 這樣的數(shù)據(jù)庫(kù)) ?true/false?(默認(rèn)為 ?false?)。這里需要填寫(xiě)字符串,即, 是 ?"true"?而不是 ?true?。
ScaleIO
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: slow
provisioner: kubernetes.io/scaleio
parameters:
gateway: https://192.168.99.200:443/api
system: scaleio
protectionDomain: pd0
storagePool: sp1
storageMode: ThinProvisioned
secretRef: sio-secret
readOnly: "false"
fsType: xfs
- ?
provisioner?:屬性設(shè)置為 ?kubernetes.io/scaleio? - ?
gateway?到 ScaleIO API 網(wǎng)關(guān)的地址(必需) - ?
system?:ScaleIO 系統(tǒng)的名稱(chēng)(必需) - ?
protectionDomain?:ScaleIO 保護(hù)域的名稱(chēng)(必需) - ?
storagePool?:卷存儲(chǔ)池的名稱(chēng)(必需) - ?
storageMode?:存儲(chǔ)提供模式:?ThinProvisioned?(默認(rèn))或 ?ThickProvisioned? - ?
secretRef?:對(duì)已配置的 Secret 對(duì)象的引用(必需) - ?
readOnly?:指定掛載卷的訪問(wèn)模式(默認(rèn)為 false) - ?
fsType?:卷的文件系統(tǒng)(默認(rèn)是 ext4)
ScaleIO Kubernetes 卷插件需要配置一個(gè) Secret 對(duì)象。 Secret 必須用 ?kubernetes.io/scaleio? 類(lèi)型創(chuàng)建,并與引用它的 PVC 所屬的名稱(chēng)空間使用相同的值。如下面的命令所示:
kubectl create secret generic sio-secret --type="kubernetes.io/scaleio" \
--from-literal=username=sioadmin --from-literal=password=d2NABDNjMA== \
--namespace=defaultStorageOS
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast
provisioner: kubernetes.io/storageos
parameters:
pool: default
description: Kubernetes volume
fsType: ext4
adminSecretNamespace: default
adminSecretName: storageos-secret
- ?
pool?:制備卷的 StorageOS 分布式容量池的名稱(chēng)。如果未指定,則使用 通常存在的 ?default?池。 - ?
description?:指定給動(dòng)態(tài)創(chuàng)建的卷的描述。所有卷描述對(duì)于存儲(chǔ)類(lèi)而言都是相同的, 但不同的 storage class 可以使用不同的描述,以區(qū)分不同的使用場(chǎng)景。 默認(rèn)為 ?Kubernetes volume?。 - ?
fsType?:請(qǐng)求的默認(rèn)文件系統(tǒng)類(lèi)型。 請(qǐng)注意,在 StorageOS 中用戶定義的規(guī)則可以覆蓋此值。默認(rèn)為 ?ext4? - ?
adminSecretNamespace?:API 配置 secret 所在的命名空間。 如果設(shè)置了 adminSecretName,則是必需的。 - ?
adminSecretName?:用于獲取 StorageOS API 憑證的 secret 名稱(chēng)。 如果未指定,則將嘗試默認(rèn)值。
StorageOS Kubernetes 卷插件可以使 Secret 對(duì)象來(lái)指定用于訪問(wèn) StorageOS API 的端點(diǎn)和憑據(jù)。 只有當(dāng)默認(rèn)值已被更改時(shí),這才是必須的。 Secret 必須使用 ?kubernetes.io/storageos? 類(lèi)型創(chuàng)建,如以下命令:
kubectl create secret generic storageos-secret \
--type="kubernetes.io/storageos" \
--from-literal=apiAddress=tcp://localhost:5705 \
--from-literal=apiUsername=storageos \
--from-literal=apiPassword=storageos \
--namespace=default用于動(dòng)態(tài)制備卷的 Secret 可以在任何名稱(chēng)空間中創(chuàng)建,并通過(guò) ?adminSecretNamespace ?參數(shù)引用。 預(yù)先配置的卷使用的 Secret 必須在與引用它的 PVC 在相同的名稱(chēng)空間中。
本地
FEATURE STATE: Kubernetes v1.14 [stable]
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer本地卷還不支持動(dòng)態(tài)制備,然而還是需要?jiǎng)?chuàng)建 StorageClass 以延遲卷綁定, 直到完成 Pod 的調(diào)度。這是由 ?WaitForFirstConsumer ?卷綁定模式指定的。
延遲卷綁定使得調(diào)度器在為 PersistentVolumeClaim 選擇一個(gè)合適的 PersistentVolume 時(shí)能考慮到所有 Pod 的調(diào)度限制。
當(dāng)前名稱(chēng):創(chuàng)新互聯(lián)kubernetes教程:Kubernetes存儲(chǔ)類(lèi)
轉(zhuǎn)載來(lái)源:http://m.5511xx.com/article/cddiojj.html


咨詢(xún)
建站咨詢(xún)
