一 StoragClass 1.1 StorageClass概述 StorageClass作為對存儲資源的抽象定義,對用戶設置的PVC申請屏蔽後端存儲的細節,一方面減少了用戶對於存儲資源細節的關註,另一方面減輕了管理員手工管理PV的工作,由系統自動完成PV的創建和綁定,實現了動態的資源供應。 基於S ...
一 StoragClass
1.1 StorageClass概述
StorageClass作為對存儲資源的抽象定義,對用戶設置的PVC申請屏蔽後端存儲的細節,一方面減少了用戶對於存儲資源細節的關註,另一方面減輕了管理員手工管理PV的工作,由系統自動完成PV的創建和綁定,實現了動態的資源供應。 基於StorageClass的動態資源供應模式將逐步成為雲平臺的標準存儲配置模式。StorageClass的定義主要包括名稱、後端存儲的提供者(provisioner)和後端存儲的相關參數配置。 StorageClass一旦被創建出來,則將無法修改。如需更改,則只能刪除原StorageClass的定義重建。 示例1:定義一個名為standard的StorageClass,提供者為aws-ebs,其參數設置了一個type,值為gp2。 [root@k8smaster01 study]# vi awsclass01.yaml1 kind: StorageClass 2 apiVersion: storage.k8s.io/v1 3 metadata: 4 name: standard 5 provisioner: kubernetes.io/aws-bs 6 parameters: 7 type: gp2 8
1.2 StorageClass配置參數
- 提供者(Provisioner)
- 參數(Parameters)
1.3 常見Provisioner
- AWSEBS存儲捲
1 kind: StorageClass 2 apiVersion: storage.k8s.io/v1 3 metadata: 4 name: slow 5 provisioner: kubernetes.io/aws-ebs 6 parameters: 7 type: io1 8 zone: us-east-1d 9 iopsPerGB: "10" 10參數說明如下(詳細說明請參考AWSEBS文檔):
- type:可選項為io1,gp2,sc1,st1,預設值為gp2。
- zone:AWSzone的名稱。
- iopsPerGB:僅用於io1類型的Volume,意為每秒每GiB的I/O操作數量。
- encrypted:是否加密。
- kmsKeyId:加密時的Amazon Resource Name。
- GCEPD存儲捲
1 kind: StorageClass 2 apiVersion: storage.k8s.io/v1 3 metadata: 4 name: slow 5 provisioner: kubernetes.io/gce-pd 6 parameters: 7 type: pd-standard 8 zone: us-centrall-a 9參數說明如下(詳細說明請參考GCE文檔):
- type:可選項為pd-standard、pd-ssd,預設值為pd-standard。
- zone:GCEzone名稱。
- GlusterFS存儲捲
1 apiVersion: storage.k8s.io/v1 2 kind: StorageClass 3 metadata: 4 name: slow 5 provisioner: kubernetes.io/glusterfes 6 parameters: 7 resturl: "http://127.0.0.1:8081" 8 clusterid: "xxxxxxxxxxxx" 9 restauthenabled: "true" 10 restuser: "admin" 11 secretNamespace: "default" 12 secretName: "heketi-secret" 13 gidMin: "40000" 14 gidMax: "50000" 15 volumetype: "replicate:3" 16參數說明如下(詳細說明請參考GlusterFS和Heketi的文檔):
- resturl:GlusterREST服務(Heketi)的URL地址,用於自動完成GlusterFSvolume的設置。
- restauthenabled:是否對GlusterREST服務啟用安全機制。
- restuser:訪問GlusterREST服務的用戶名。
- secretNamespace和secretName:保存訪問GlusterREST服務密碼的Secret資源對象名。
- clusterid:GlusterFS的ClusterID。
- gidMin和gidMax:StorageClass的GID範圍,用於動態資源供應時為PV設置的GID。
- volumetype:設置GlusterFS的內部Volume類型,例如replicate:3(Replicate類型,3份副本);disperse:4:2(Disperse類型,數據4份,冗餘兩份;“none”(Distribute類型)。
- OpenStackCinder存儲捲
1 kind: StorageClass 2 apiVersion: storage.k8s.io/v1 3 metadata: 4 name: gold 5 provisioner: kubernetes.io/cinder 6 parameters: 7 type: fast 8 availability: nova 9參數說明如下。
- type:Cinder的VolumeType,預設值為空。
- availability:AvailabilityZone,預設值為空。
1.4 設置預設StorageClass
要在系統中設置一個預設的StorageClass,則首先需要啟用名為DefaultStorageClass的admission controller,即在kube-apiserver的命令行參數--admission-control中增加: --admission-control-...,DefaultStorageClass [root@k8smaster01 study]# vi /etc/kubernetes/manifests/kube-apiserver.yaml1 …… 2 - --enable-admission-plugins=NodeRestriction,DefaultStorageClass 3 …… 4[root@k8smaster01 study]# systemctl restart docker kubelet 然後,在StorageClass的定義中設置一個annotation: [root@k8smaster01 study]# vi defaultclass01.yaml
1 kind: StorageClass 2 apiVersion: storage.k8s.io/v1 3 metadata: 4 name: gold 5 annotations: 6 storageclass.beta.kubernetes.io/is-default-class="true" 7 provisioner: kubernetes.io/gce-pd 8 parameters: 9 type: pd-ssd 10通過kubectl create命令創建成功後,查看StorageClass列表,可以看到名為gold的StorageClass被標記為default: