全部產品
Search
文件中心

Container Service for Kubernetes:儲存類(StorageClass)

更新時間:Aug 23, 2024

儲存類(StorageClass)可以提供動態分配儲存卷的能力,阿里雲CSI外掛程式會自動根據該儲存類建立相應的儲存卷PV。您可以在建立儲存聲明PVC時,指定StorageClassName自動建立PV及底層儲存,減少了建立和維護PV的工作量。

StorageClass介紹

StorageClass用於定義儲存的類別,您可以為其設定不同的參數,使儲存資源能夠根據需求自動供應和調整。

Container Service for Kubernetes預設提供了以下幾種StorageClass模板,請根據雲端硬碟選型確認所需的雲端硬碟類型,從而選擇合適的StorageClass。關於雲端硬碟類型和ECS執行個體類型的匹配關係,請參見執行個體規格類型系列

StorageClass

匹配的雲端硬碟類型

說明

alicloud-disk-efficiency

高效雲端硬碟

上一代雲端硬碟

alicloud-disk-ssd

SSD雲端硬碟

上一代雲端硬碟

alicloud-disk-essd

ESSD雲端硬碟

通過該StorageClass預設建立的為PL1層級的ESSD雲端硬碟。

alicloud-disk-topology-alltype

提供高可用選項,優先建立ESSD雲端硬碟。

  • 如果ESSD雲端硬碟售盡或當前節點不支援ESSD雲端硬碟,則嘗試建立SSD雲端硬碟。

  • 如果SSD雲端硬碟售盡或當前節點不支援SSD雲端硬碟,則嘗試建立高效雲端硬碟。

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: alicloud-disk-topology-alltype
    parameters:
      type: cloud_essd,cloud_ssd,cloud_efficiency
    provisioner: diskplugin.csi.alibabacloud.com
    reclaimPolicy: Delete
    allowVolumeExpansion: true
    volumeBindingMode: WaitForFirstConsumer

多可用性區域情境推薦

可用性區域規則說明

通過StorageClass建立雲端硬碟時,可用性區域選擇規則如下:

  • 配置volumeBindingMode: WaitForFirstConsumer時,則首個使用PVC的Pod所在可用性區域為建立雲端硬碟的可用性區域。

  • 配置volumeBindingMode: Immediate,且配置zoneId參數(一個可用性區域)時,則選擇此可用性區域為建立雲端硬碟的可用性區域。

  • 配置volumeBindingMode: Immediate,且配置zoneId參數(多個可用性區域)時,則每次選擇輪詢配置的多個可用性區域中的一個作為建立雲端硬碟的可用性區域。

綜上,如果您是多可用性區域叢集,推薦您使用WaitForFirstConsumer模式的StorageClass。您可以根據所需雲端硬碟類型自行建立StorageClass。如果您需要在多可用性區域部署儲存資源,請參見儲存多可用性區域部署的推薦配置

StorageClass YAML樣本

如果以上StorageClass不能滿足需求,您也可以根據以下模板自行建立StorageClass。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: alicloud-disk-topology-alltype
provisioner: diskplugin.csi.alibabacloud.com
parameters:
  type: cloud_essd,cloud_ssd,cloud_efficiency
  fstype: ext4
  diskTags: "a:b,b:c"
  encrypted: "false"
  performanceLevel: PL1
  volumeExpandAutoSnapshot: "forced" # 該設定僅在建立的雲端硬碟類型為cloud_essd時生效。
  provisionedIops: "40000"
  burstingEnabled: "false"
reclaimPolicy: Delete
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer  

主要參數說明

參數

說明

provisioner

儲存資源供應商。此處必須配置為diskplugin.csi.alibabacloud.com,表示使用阿里雲雲端硬碟Provisioner外掛程式建立StorageClass。

parameters

參見下方Parameters參數說明

reclaimPolicy

雲端硬碟的回收策略,預設為Delete,支援Retain

  • Delete:刪除PVC時,PV和雲端硬碟會一起刪除。

  • Retain:刪除PVC時,PV和雲端硬碟資料不會被刪除,需要您手動刪除。

如果資料安全性要求高,推薦使用Retain方式,以免誤刪資料。

allowVolumeExpansion

配置為true時,可以實現雲端硬碟的自動擴容。

volumeBindingMode

雲端硬碟的繫結模式。預設為Immediate,支援WaitForFirstConsumer

  • Immediate:表示先建立雲端硬碟再調度Pod。

  • WaitForFirstConsumer:延遲綁定,即調度器先調度Pod,並根據Pod的可用性區域資訊建立雲端硬碟。

Parameters參數說明

參數

是否必選

說明

type

雲端硬碟類型。預設參數type的值為cloud_essd,支援設定的參數值如下:

  • 高效雲端硬碟cloud_efficiency

  • ESSD AutoPLcloud_auto

  • SSD雲端硬碟cloud_ssd

  • ESSD雲端硬碟cloud_essd

  • ESSD Entrycloud_essd_entry

以上參數可任意組合,例如type: cloud_efficiency, cloud_ssd, cloud_essd,此配置方式會支援對指定類型的雲端硬碟依次建立,直到建立成功。

fstype

自動建立雲端硬碟所使用的檔案系統,取值ext4xfs,預設為ext4

mkfsOptions

雲端硬碟格式化所用的參數。例如mkfsOptions: "-O project,quota"

diskTags

自訂雲端硬碟標籤。例如diskTags: "a:b,b:c"。支援使用diskTags/a: b的格式指定(v1.30.3起)。

encrypted

表示建立的雲端硬碟是否加密。預設為false,建立的雲端硬碟不加密。

performanceLevel

ESSD雲端硬碟的效能層級,取值PL0PL1PL2PL3。預設值為PL1。更多資訊,請參見容量範圍與效能層級的關係

volumeExpandAutoSnapshot

雲端硬碟擴容時通過快照實現自動資料備份,保證資料安全,預設為closed

  • forced:自動快照建立失敗時放棄雲端硬碟擴容。

  • besteffort:自動快照建立失敗時報event warning,繼續進行雲端硬碟擴容。

  • closed:不使用自動快照功能。

如果資料安全性要求高,推薦使用forced方式避免擴容失敗時的資料丟失。

說明
  • 僅會對支援快照極速可用的雲端硬碟建立快照。擴容正常時,自動快照將自動刪除;擴容失敗時,自動快照將保留24小時。

  • 快照的計費資訊,請參見快照計費

provisionedIops

雲端硬碟的預配置效能(IOPS)。

可能值:0~min{50,000, 1000×容量-基準效能}。

基準效能=min{1,800+50×容量, 50000}。

說明

該參數僅支援ESSD AutoPL雲端硬碟。更多資訊,請參見ESSD AutoPL雲端硬碟規格

burstingEnabled

是否開啟Burst(效能突發)。預設為false。

  • true:開啟。

  • false:不開啟。

說明

該參數僅支援ESSD AutoPL雲端硬碟。更多資訊,請參見ESSD AutoPL雲端硬碟規格

multiAttach

設定為true以開啟多執行個體掛載,請參見雲端硬碟多重掛載功能

計費說明

StorageClass本身不收費,通過儲存類自動建立出的雲端硬碟按照隨用隨付的雲端硬碟進行計費。關於雲端硬碟計費,請參見計費說明

使用StorageClass

您可以在建立PVC時,指定所需的儲存卷的大小,並指定StorageClassName來選擇所需的StorageClass來建立儲存卷。如果您沒有在PVC中指定StorageClassName,您也可以通過配置預設StorageClass來建立儲存卷。

使用指定的StorageClass

建立PVC時,指定StorageClassName選擇所需使用的StorageClass,即可自動建立對應類型PV,並自動建立底層的儲存資源。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: disk-pvc
spec:
  accessModes:
  - ReadWriteOnce
  volumeMode: Filesystem
  resources:
    requests:
      storage: 20Gi #申請雲端硬碟儲存卷的大小。
  storageClassName: alicloud-disk-topology-alltype #指定使用哪一個StorageClass。

使用預設StorageClass

Kubernetes提供預設StorageClass機制,在PVC未指定StorageClassName的情況下,您可以通過預設StorageClass建立儲存卷。更多資訊,請參見Default StorageClass

由於預設StorageClass會對所有PVC起作用,對於具備不同類型儲存卷能力的叢集,需謹慎使用。例如,您想產生一個NAS類型PVC、PV,並綁定PVC和PV,但可能因為有預設StorageClass而自動建立了雲端硬碟PV。ACK叢集沒有提供預設StorageClass,如果您期望使用預設StorageClass,可以參考以下配置。

  1. 配置預設StorageClass。

    執行以下命令將StorageClass(alicloud-disk-topology-alltype)配置為一個預設StorageClass。

    說明

    此處以alicloud-disk-topology-alltype為例進行說明,

    kubectl annotate storageclass alicloud-disk-topology-alltype storageclass.kubernetes.io/is-default-class=true

    此時,查詢叢集中的StorageClass可以看到alicloud-disk-topology-alltype名字後面加了(default)字樣。

    kubectl get sc

    返回結果如下:

    NAME                                        PROVISIONER                       AGE
    alicloud-disk-topology-alltype (default)    diskplugin.csi.alibabacloud.com   96m
  2. 使用預設StorageClass。

    1. 使用以下模板建立一個沒有配置StorageClass的PVC。

      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: disk-pvc
      spec:
        accessModes:
        - ReadWriteOnce
        resources:
          requests:
            storage: 20Gi

      叢集會自動建立一個雲端硬碟儲存卷(PV),且配置了預設StorageClass(alicloud-disk-topology-alltype)。

      kubectl get pvc

      返回結果如下:

      NAME       STATUS   VOLUME                   CAPACITY   ACCESS MODES    STORAGECLASS                      AGE
      disk-pvc   Bound    d-bp18pbai447qverm****   20Gi       RWO             alicloud-disk-topology-alltype    49s

您可以通過以下命令取消預設儲存類型的配置。

kubectl annotate storageclass alicloud-disk-topology-alltype storageclass.kubernetes.io/is-default-class-