044.Kubernetes集群存儲-StorageClass


一 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.yaml
  1 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)
描述存儲資源的提供者,也可以看作后端存儲驅動。目前Kubernetes支持的Provisioner都以“kubernetes.io/”為開頭,用戶也可以使用自定義的后端存儲提供者。
  • 參數(Parameters)
后端存儲資源提供者的參數設置,不同的Provisioner包括不同的參數設置。某些參數可以不顯示設定,Provisioner將使用其默認值。

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.yaml
  1 ……
  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:

二 動態管理存儲卷

2.1 glusterfs

見《附009.Kubernetes永久存儲之GlusterFS獨立部署》和《附010.Kubernetes永久存儲之GlusterFS超融合部署》。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM