k8s Storage Classes
Storage Classes
介紹
StorageClass?為管理員提供了描述存儲?"類"?的方法。 不同的類型可能會映射到不同的服務質量等級或備份策略,或是由群集管理員制定的任意策略。 Kubernetes 本身并不清楚各種類代表的什么。這個類的概念在其他存儲系統中有時被稱為”配置文件”。
StorageClass 資源
每個?StorageClass?都包含?provisioner、parameters?和?reclaimPolicy?字段, 這些字段會在StorageClass需要動態分配?PersistentVolume?時會使用到。
StorageClass?對象的命名很重要,用戶使用這個命名來請求生成一個特定的類。 當創建?StorageClass?對象時,管理員設置 StorageClass 對象的命名和其他參數,一旦創建了對象就不能再對其更新。
管理員可以為沒有申請綁定到特定?StorageClass?的 PVC 指定一個默認的類?: 更多詳情請參閱?PersistentVolumeClaim?章節。
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata:name: standard provisioner: kubernetes.io/aws-ebs parameters:type: gp2 reclaimPolicy: Retain mountOptions:- debug volumeBindingMode: Immediate存儲分配器
StorageClass?有一個分配器,用來決定使用哪個卷插件分配持久化卷申領。該字段必須指定。
| 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 | - | - |
| RBD | ? | Ceph RBD |
| VsphereVolume | ? | vSphere |
| PortworxVolume | ? | Portworx Volume |
| ScaleIO | ? | ScaleIO |
| StorageOS | ? | StorageOS |
| Local | - | Local |
您不限于指定此處列出的”內置”分配器(其名稱前綴為 kubernetes.io 并打包在 Kubernetes 中)。 您還可以運行和指定外部分配器,這些獨立的程序遵循由 Kubernetes 定義的?規范。 外部供應商的作者完全可以自由決定他們的代碼保存于何處、打包方式、運行方式、使用的插件(包括 Flex)等。 代碼倉庫?kubernetes-incubator/external-storage?包含一個用于為外部分配器編寫功能實現的類庫,以及各種社區維護的外部分配器。
例如,NFS 沒有內部分配器,但可以使用外部分配器。一些外部分配器在代碼倉庫?kubernetes-incubator/external-storage?中。 也有第三方存儲供應商提供自己的外部分配器。
回收策略
由?StorageClass?動態創建的持久化卷會在的?reclaimPolicy?字段中指定回收策略,可以是?Delete?或者?Retain。如果?StorageClass?對象被創建時沒有指定?reclaimPolicy?,它將默認為?Delete。
通過?StorageClass?手動創建并管理的 Persistent Volume 會使用它們被創建時指定的回收政策。
掛載選項
由?StorageClass?動態創建的 Persistent Volume 將使用類中?mountOption?字段指定的掛載選項。
如果卷插件不支持掛載選項,卻指定了該選項,則分配操作會失敗。 掛載選項在?StorageClass?和持久卷上都不會做驗證,所以如果掛載選項無效,那么這個 PV 就會失敗。
卷綁定模式
FEATURE STATE:?Kubernetes v1.12?注意:?這個功能特性需要啟用?VolumeScheduling?參數才能使用。
volumeBindingMode?字段控制了?卷綁定和動態分配?應該發生在什么時候。
默認情況下,Immediate?模式表示一旦創建了 PersistentVolumeClaim 也就完成了卷綁定和動態分配。 對于由于拓撲限制而非集群所有節點可達的存儲后端,PersistentVolume 會在不知道 Pod 調度要求的情況下綁定或者分配。
集群管理員可以通過指定?WaitForFirstConsumer?模式來解決此問題。 該模式將延遲 PersistentVolume 的綁定和分配,直到使用該 PersistentVolumeClaim 的 Pod 被創建。 PersistentVolume 會根據 Pod 調度約束指定的拓撲來選擇或分配。這些包括但不限于?資源需求,?節點篩選器,?pod 親和性和互斥性, 以及?污點和容忍度.
以下插件支持動態分配的?WaitForFirstConsumer?模式:
- AWSElasticBlockStore
- GCEPersistentDisk
- AzureDisk
以下插件支持預創建綁定 PersistentVolume 的?WaitForFirstConsumer?模式:
- All of the above
- Local
允許的拓撲結構
FEATURE STATE:?Kubernetes v1.12?注意:?這個特性需要開啟?VolumeScheduling?特性開關。
當集群操作人員使用了?WaitForFirstConsumer?的卷綁定模式,在大部分情況下就沒有必要將配置限制為特定的拓撲結構。 然而,如果還有需要的話,可以使用?allowedTopologies。
這個例子描述了如何將分配卷限的拓撲限制在特定的區域,在使用時應該根據插件支持情況替換?zone?和?zones?參數。
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata:name: standard provisioner: kubernetes.io/gce-pd parameters:type: pd-standard volumeBindingMode: WaitForFirstConsumer allowedTopologies: - matchLabelExpressions:- key: failure-domain.beta.kubernetes.io/zonevalues:- us-central1-a- us-central1-b參數
Storage class 具有描述屬于卷的參數。取決于分配器,可以接受不同的參數。 例如,參數 type 的值 io1 和參數 iopsPerGB 特定于 EBS PV。當參數被省略時,會使用默認值。
AWS EBS
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata:name: slow provisioner: kubernetes.io/aws-ebs parameters:type: io1iopsPerGB: "10"fsType: ext4- type:io1,gp2,sc1,st1。詳細信息參見?AWS 文檔。默認值:gp2。
- zone(棄用):AWS 區域。如果沒有指定?zone?和?zones,通常卷會在 Kubernetes 集群節點所在的活動區域中輪詢調度分配。zone?和?zones?參數不能同時使用。
- zones(棄用):以逗號分隔的 AWS 區域列表。如果沒有指定?zone?和?zones,通常卷會在 Kubernetes 集群節點所在的活動區域中輪詢調度分配。zone和zones參數不能同時使用。
- iopsPerGB:只適用于?io1?卷。每 GiB 每秒 I/O 操作。AWS 卷插件將其與請求卷的大小相乘以計算 IOPS 的容量,并將其限制在 20 000 IOPS(AWS 支持的最高值,請參閱?AWS 文檔。 這里需要輸入一個字符串,即?"10",而不是?10。
- fsType:受 Kubernetes 支持的文件類型。默認值:"ext4"。
- encrypted:指定 EBS 卷是否應該被加密。合法值為?"true"?或者?"false"。這里需要輸入字符串,即?"true", 而非?true。
- kmsKeyId:可選。加密卷時使用密鑰的完整 Amazon 資源名稱。如果沒有提供,但?encrypted?值為 true,AWS 生成一個密鑰。關于有效的 ARN 值,請參閱 AWS 文檔。?注意:?zone?和?zones?已被棄用并被?允許的拓撲結構?取代。
GCE PD
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata:name: slow provisioner: kubernetes.io/gce-pd parameters:type: pd-standardreplication-type: none- type:pd-standard?或者?pd-ssd。默認:pd-standard
- zone(棄用):GCE 區域。如果沒有指定?zone?和?zones,通常卷會在 Kubernetes 集群節點所在的活動區域中輪詢調度分配。zone?和?zones?參數不能同時使用。
- zones(棄用):逗號分隔的 GCE 區域列表。如果沒有指定?zone?和?zones,通常卷會在 Kubernetes 集群節點所在的活動區域中輪詢調度(round-robin)分配。zone?和?zones?參數不能同時使用。
- replication-type:none?或者?regional-pd。默認值:none。
如果?replication-type?設置為?none,會分配一個常規(當前區域內的)持久化磁盤。
如果?replication-type?設置為?regional-pd,會分配一個?區域性持久化磁盤(Regional Persistent Disk)。在這種情況下,用戶必須使用?zones?而非?zone?來指定期望的復制區域(zone)。如果指定來兩個特定的區域,區域性持久化磁盤會在這兩個區域里分配。如果指定了多于兩個的區域,Kubernetes 會選擇其中任意兩個區域。如果省略了?zones?參數,Kubernetes 會在集群管理的區域中任意選擇。
注意:?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 服務/Heketi 服務 url。 通用格式應該是?IPaddress:Port,這是 GlusterFS 動態分配器的必需參數。 如果 Heketi 服務在 openshift/kubernetes 中安裝并暴露為可路由服務,則可以使用類似于?http://heketi-storage-project.cloudapps.mystorage.com?的格式,其中 fqdn 是可解析的 heketi 服務網址。
- restauthenabled:Gluster REST 服務身份驗證布爾值,用于啟用對 REST 服務器的身份驗證。如果此值為 ‘true’,則必須填寫?restuser?和?restuserkey?或?secretNamespace?+?secretName。此選項已棄用,當在指定?restuser,restuserkey,secretName?或?secretNamespace?時,身份驗證被啟用。
- restuser:在 Gluster 可信池中有權創建卷的 Gluster REST服務/Heketi 用戶。
- restuserkey:Gluster REST 服務/Heketi 用戶的密碼將被用于對 REST 服務器進行身份驗證。此參數已棄用,取而代之的是?secretNamespace?+?secretName。 <!–
-
secretNamespace,?secretName?: Identification of Secret instance that contains user password to use when talking to Gluster REST service. These parameters are optional, empty password will be used when both?secretNamespace?and?secretName?are omitted. The provided secret must have type?"kubernetes.io/glusterfs", e.g. created in this way:
kubectl create secret generic heketi-secret \--type="kubernetes.io/glusterfs" --from-literal=key='opensesame' \--namespace=defaultExample of a secret can be found in?glusterfs-provisioning-secret.yaml. –>
-
secretNamespace,secretName:Secret 實例的標識,包含與 Gluster REST 服務交互時使用的用戶密碼。 這些參數是可選的,secretNamespace?和?secretName?都省略時使用空密碼。所提供的 Secret 必須將類型設置為 “kubernetes.io/glusterfs”,例如以這種方式創建:
kubectl create secret generic heketi-secret \--type="kubernetes.io/glusterfs" --from-literal=key='opensesame' \--namespace=defaultsecret 的例子可以在?glusterfs-provisioning-secret.yaml?中找到。 <!–
-
clusterid:?630372ccdc720a92c681fb928f27b53f?is the ID of the cluster which will be used by Heketi when provisioning the volume. It can also be a list of clusterids, for example:?"8452344e2becec931ece4e33c4674e4e,42982310de6c63381718ccfa6d8cf397". This is an optional parameter.
-
gidMin,?gidMax?: The minimum and maximum value of GID range for the storage class. A unique value (GID) in this range ( gidMin-gidMax ) will be used for dynamically provisioned volumes. These are optional values. If not specified, the volume will be provisioned with a value between 2000-2147483647 which are defaults for gidMin and gidMax respectively. –>
-
clusterid:630372ccdc720a92c681fb928f27b53f?是集群的 ID,當分配卷時,Heketi 將會使用這個文件。它也可以是一個 clusterid 列表,例如:?"8452344e2becec931ece4e33c4674e4e,42982310de6c63381718ccfa6d8cf397"。這個是可選參數。
-
gidMin,gidMax:storage class GID 范圍的最小值和最大值。在此范圍(gidMin-gidMax)內的唯一值(GID)將用于動態分配卷。這些是可選的值。如果不指定,卷將被分配一個 2000-2147483647 之間的值,這是 gidMin 和 gidMax 的默認值。 <!–
-
volumetype?: The volume type and its parameters can be configured with this optional value. If the volume type is not mentioned, it’s up to the provisioner to decide the volume type.
For example:
- Replica volume:?volumetype: replicate:3?where ‘3’ is replica count.
- Disperse/EC volume:?volumetype: disperse:4:2?where ‘4’ is data and ‘2’ is the redundancy count.
- Distribute volume:?volumetype: none
For available volume types and administration options, refer to the?Administration Guide.
For further reference information, see?How to configure Heketi.
When persistent volumes are dynamically provisioned, the Gluster plugin automatically creates an endpoint and a headless service in the name?gluster-dynamic-<claimname>. The dynamic endpoint and service are automatically deleted when the persistent volume claim is deleted. –>
-
volumetype:卷的類型及其參數可以用這個可選值進行配置。如果未聲明卷類型,則由分配器決定卷的類型。
例如: ‘Replica volume’:?volumetype: replicate:3?其中 ‘3’ 是 replica 數量. ‘Disperse/EC volume’:?volumetype: disperse:4:2?其中 ‘4’ 是數據,’2’ 是冗余數量. ‘Distribute volume’:?volumetype: none
有關可用的卷類型和管理選項,請參閱?管理指南。
更多相關的參考信息,請參閱?如何配置 Heketi。
當動態分配持久卷時,Gluster 插件自動創建名為?gluster-dynamic-<claimname>?的端點和 headless service。在 PVC 被刪除時動態端點和 headless service 會自動被刪除。
OpenStack Cinder
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata:name: gold provisioner: kubernetes.io/cinder parameters:availability: nova- availability:可用區域。如果沒有指定,通常卷會在 Kubernetes 集群節點所在的活動區域中輪詢調度分配。
OpenStack 的內部驅動程序已經被棄用。請使用?OpenStack 的外部驅動程序。
vSphere
使用用戶指定的磁盤格式創建一個 StorageClass。
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata:name: fast provisioner: kubernetes.io/vsphere-volume parameters:diskformat: zeroedthick在用戶指定的數據存儲上創建磁盤格式的 StorageClass。
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata:name: fast provisioner: kubernetes.io/vsphere-volume parameters:diskformat: zeroedthickdatastore: VSANDatastore有幾個?vSphere 例子?供您在 Kubernetes for vSphere 中嘗試進行 persistent volume 管理。
Ceph RBD
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata:name: fast provisioner: kubernetes.io/rbd parameters:monitors: 10.16.153.105:6789adminId: kubeadminSecretName: ceph-secretadminSecretNamespace: kube-systempool: kubeuserId: kubeuserSecretName: ceph-secret-useruserSecretNamespace: defaultfsType: ext4imageFormat: "2"imageFeatures: "layering"- monitors:Ceph monitor,逗號分隔。該參數是必需的。
- adminId:Ceph 客戶端 ID,用于在池 ceph 池中創建映像。默認是 “admin”。
- adminSecret:adminId?的 Secret 名稱。該參數是必需的。 提供的 secret 必須有值為 “kubernetes.io/rbd” 的 type 參數。
- adminSecretNamespace:adminSecret?的命名空間。默認是 “default”。
- pool: Ceph RBD 池. 默認是 “rbd”。
- userId:Ceph 客戶端 ID,用于映射 RBD 鏡像。默認與?adminId?相同。 <!–
-
userSecretName: The name of Ceph Secret for?userId?to map RBD image. It must exist in the same namespace as PVCs. This parameter is required. The provided secret must have type “kubernetes.io/rbd”, e.g. created in this way:
kubectl create secret generic ceph-secret --type="kubernetes.io/rbd" \--from-literal=key='QVFEQ1pMdFhPUnQrSmhBQUFYaERWNHJsZ3BsMmNjcDR6RFZST0E9PQ==' \--namespace=kube-system–>
-
userSecretName:用于映射 RBD 鏡像的?userId?的 Ceph Secret 的名字。 它必須與 PVC 存在于相同的 namespace 中。該參數是必需的。 提供的 secret 必須具有值為 “kubernetes.io/rbd” 的 type 參數,例如以這樣的方式創建:
kubectl create secret generic ceph-secret --type="kubernetes.io/rbd" \--from-literal=key='QVFEQ1pMdFhPUnQrSmhBQUFYaERWNHJsZ3BsMmNjcDR6RFZST0E9PQ==' \--namespace=kube-system
- userSecretNamespace:userSecretName?的命名空間。
- fsType:Kubernetes 支持的 fsType。默認:"ext4"。
- imageFormat:Ceph RBD 鏡像格式,”1” 或者 “2”。默認值是 “1”。
- imageFeatures:這個參數是可選的,只能在你將?imageFormat?設置為 “2” 才使用。 目前支持的功能只是?layering。默認是 ““,沒有功能打開。
Quobyte
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 服務器的格式是?"http(s)://api-server:7860"
- registry:用于掛載卷的 Quobyte registry。你可以指定 registry 為?<host>:<port>?或者如果你想指定多個 registry,你只需要在他們之間添加逗號,例如?<host1>:<port>,<host2>:<port>,<host3>:<port>。 主機可以是一個 IP 地址,或者如果您有正在運行的 DNS,您也可以提供 DNS 名稱。
- adminSecretNamespace:adminSecretName的 namespace。 默認值是 “default”。 <!–
-
adminSecretName: secret that holds information about the Quobyte user and the password to authenticate against the API server. The provided secret must have type “kubernetes.io/quobyte”, e.g. created in this way:
kubectl create secret generic quobyte-admin-secret \--type="kubernetes.io/quobyte" --from-literal=key='opensesame' \--namespace=kube-system
–> *?adminSecretName:保存關于 Quobyte 用戶和密碼的 secret,用于對 API 服務器進行身份驗證。 提供的 secret 必須有值為 “kubernetes.io/quobyte” 的 type 參數,例如以這種方式創建:
```shell kubectl create secret generic quobyte-admin-secret \--type="kubernetes.io/quobyte" --from-literal=key='opensesame' \--namespace=kube-system ```- user:對這個用戶映射的所有訪問權限。默認是 “root”。
- group:對這個組映射的所有訪問權限。默認是 “nfsnobody”。
- quobyteConfig:使用指定的配置來創建卷。您可以創建一個新的配置,或者,可以修改 Web console 或 quobyte CLI 中現有的配置。默認是 “BASE”。
- quobyteTenant:使用指定的租戶 ID 創建/刪除卷。這個 Quobyte 租戶必須已經于 Quobyte。 默認是 “DEFAULT”。
Azure 磁盤
Azure Unmanaged Disk Storage Class(非托管磁盤存儲類)
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata:name: slow provisioner: kubernetes.io/azure-disk parameters:skuName: Standard_LRSlocation: eastusstorageAccount: azure_storage_account_name- skuName:Azure 存儲帳戶 Sku 層。默認為空。
- location:Azure 存儲帳戶位置。默認為空。
- storageAccount:Azure 存儲帳戶名稱。如果提供存儲帳戶,它必須位于與集群相同的資源組中,并且?location?是被忽略的。如果未提供存儲帳戶,則會在與群集相同的資源組中創建新的存儲帳戶。
新的 Azure 磁盤 Storage Class(從 v1.7.2 開始)
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata:name: slow provisioner: kubernetes.io/azure-disk parameters:storageaccounttype: Standard_LRSkind: Shared- storageaccounttype:Azure 存儲帳戶 Sku 層。默認為空。
- kind:可能的值是?shared(默認)、dedicated?和?managed。 當?kind?的值是?shared?時,所有非托管磁盤都在集群的同一個資源組中的幾個共享存儲帳戶中創建。 當?kind的值是?dedicated?時,將為在集群的同一個資源組中新的非托管磁盤創建新的專用存儲帳戶。
- Premium VM 可以同時添加 Standard_LRS 和 Premium_LRS 磁盤,而 Standard 虛擬機只能添加 Standard_LRS 磁盤。
- 托管虛擬機只能連接托管磁盤,非托管虛擬機只能連接非托管磁盤。
Azure 文件
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata:name: azurefile provisioner: kubernetes.io/azure-file parameters:skuName: Standard_LRSlocation: eastusstorageAccount: azure_storage_account_name- skuName:Azure 存儲帳戶 Sku 層。默認為空。
- location:Azure 存儲帳戶位置。默認為空。
- storageAccount:Azure 存儲帳戶名稱。默認為空。 如果不提供存儲帳戶,會搜索所有與資源相關的存儲帳戶,以找到一個匹配?skuName?和?location?的賬號。 如果提供存儲帳戶,它必須存在于與集群相同的資源組中,skuName?和?location?會被忽略。
在分配期間,為掛載憑證創建一個 secret。如果集群同時啟用了?RBAC?和?Controller Roles, 為?system:controller:persistent-volume-binder?的 clusterrole 添加?secret?資源的?create?權限。
Portworx 卷
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata:name: portworx-io-priority-high provisioner: kubernetes.io/portworx-volume parameters:repl: "1"snap_interval: "70"io_priority: "high"- fs:選擇的文件系統:[none/xfs/ext4](默認:ext4)。
- block_size:以 Kbytes 為單位的塊大小(默認值:32)。
- repl:同步副本數量,以復制因子 [1..3](默認值:1)的形式提供。 這里需要填寫字符串,即,"1"?而不是?1。
- io_priority:決定是否從更高性能或者較低優先級存儲創建卷 [high/medium/low](默認值:low)。
- snap_interval:觸發快照的時鐘/時間間隔(分鐘)。快照是基于與先前快照的增量變化,0 是禁用快照(默認:0)。 這里需要填寫字符串,即,是?"70"?而不是?70。
- aggregation_level:指定卷分配到的塊數量,0 表示一個非聚合卷(默認:0)。 這里需要填寫字符串,即,是?"0"?而不是?0。
- ephemeral:指定卷在卸載后進行清理還是持久化。?emptyDir?的使用場景可以將這個值設置為 true ,?persistent volumes?的使用場景可以將這個值設置為 false(例如 Cassandra 這樣的數據庫)[true/false](默認為?false)。這里需要填寫字符串,即,是?"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/apisystem: scaleioprotectionDomain: pd0storagePool: sp1storageMode: ThinProvisionedsecretRef: sio-secretreadOnly: falsefsType: xfs- provisioner:屬性設置為?kubernetes.io/scaleio
- gateway?到 ScaleIO API 網關的地址(必需)
- system:ScaleIO 系統的名稱(必需)
- protectionDomain:ScaleIO 保護域的名稱(必需)
- storagePool:卷存儲池的名稱(必需)
- storageMode:存儲提供模式:ThinProvisioned(默認)或?ThickProvisioned
- secretRef:對已配置的 Secret 對象的引用(必需)
- readOnly:指定掛載卷的訪問模式(默認為 false)
- fsType:卷的文件系統(默認是 ext4)
ScaleIO Kubernetes 卷插件需要配置一個 Secret 對象。 secret 必須用?kubernetes.io/scaleio?類型創建,并與引用它的 PVC 所屬的名稱空間使用相同的值 如下面的命令所示:
kubectl create secret generic sio-secret --type="kubernetes.io/scaleio" \ --from-literal=username=sioadmin --from-literal=password=d2NABDNjMA== \ --namespace=defaultStorageOS
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata:name: fast provisioner: kubernetes.io/storageos parameters:pool: defaultdescription: Kubernetes volumefsType: ext4adminSecretNamespace: defaultadminSecretName: storageos-secret- pool:分配卷的 StorageOS 分布式容量池的名稱。如果未指定,則使用通常存在的?default?池。
- description:分配給動態創建的卷的描述。所有卷描述對于 storage class 都是相同的, 但不同的 storage class 可以使用不同的描述,以區分不同的使用場景。 默認為?Kubernetas volume。
- fsType:請求的默認文件系統類型。請注意,在 StorageOS 中用戶定義的規則可以覆蓋此值。默認為?ext4
- adminSecretNamespace:API 配置 secret 所在的命名空間。如果設置了 adminSecretName,則是必需的。
- adminSecretName:用于獲取 StorageOS API 憑證的 secret 名稱。如果未指定,則將嘗試默認值。
StorageOS Kubernetes 卷插件可以使 Secret 對象來指定用于訪問 StorageOS API 的端點和憑據。 只有當默認值已被更改時,這才是必須的。 secret 必須使用?kubernetes.io/storageos?類型創建,如以下命令:
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用于動態分配卷的 Secret 可以在任何名稱空間中創建,并通過?adminSecretNamespace?參數引用。 預先配置的卷使用的 Secret 必須在與引用它的 PVC 在相同的名稱空間中。
本地
FEATURE STATE:?Kubernetes v1.10? kind: StorageClass apiVersion: storage.k8s.io/v1 metadata:name: local-storage provisioner: kubernetes.io/no-provisioner volumeBindingMode: WaitForFirstConsumer本地卷還不支持動態分配,然而還是需要創建 StorageClass 以延遲卷綁定,直到完成 pod 的調度。這是由?WaitForFirstConsumer?卷綁定模式指定的。
延遲卷綁定使得調度器在為 PersistentVolumeClaim 選擇一個合適的 PersistentVolume 時能考慮到所有 pod 的調度限制。
轉載于:https://www.cnblogs.com/liyupi/p/11357596.html
總結
以上是生活随笔為你收集整理的k8s Storage Classes的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BPM 与 SOA的演进与展望
- 下一篇: nodejs api 设计