全部產品
Search
文件中心

Container Service for Kubernetes:使用雲端硬碟動態儲存裝置卷

更新時間:Jun 19, 2024

雲端硬碟是阿里雲為Elastic Compute Service提供的資料區塊層級的Block Storage產品,具有低時延、高效能、持久性、高可靠等特點。ACK Serverless支援使用CSI外掛程式建立雲端硬碟動態儲存裝置卷。本文介紹如何使用雲端硬碟動態儲存裝置卷,及如何驗證雲端硬碟動態儲存裝置卷的持久化儲存特性。

前提條件

背景資訊

有關StorageClass的詳細說明,請參見儲存類(StorageClass)

操作步驟

通過控制台的方式使用雲端硬碟動態儲存裝置卷

步驟一:建立StorageClass

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇儲存 > 儲存類

  3. 儲存類頁面,單擊右上方的建立

  4. 建立對話方塊,配置StorageClass的相關參數。

    部分配置項說明如下所示:

    配置項

    說明

    名稱

    StorageClass的名稱。

    名稱必須以小寫字母開頭,只能包含小寫字母、數字、小數點(.)和短劃線(-)。

    儲存卷類型

    選擇雲端硬碟

    參數

    預設參數type,其值為cloud_essd。表示雲端硬碟類型,支援cloud_efficiencycloud_ssdcloud_essdavailable四種參數及除available外其他三種參數的任意組合。例如,type: cloud_efficiency, cloud_ssd, cloud_essd,這種配置方式支援對指定類型雲端硬碟的依次建立,直到建立成功。其中available會對SSD、高效依次嘗試建立,直到建立成功。

    說明

    部分ECS機型不支援ESSD雲端硬碟掛載。更多資訊,請參見Block StorageFAQ

    可添加自訂參數。例如,配置zoneId,表示自動建立雲端硬碟所在的地區。單可用性區域叢集,與叢集所在地區相同。例如,cn-beijing-a;多可用性區域叢集,zoneId可同時配置多個。例如,cn-beijing-a, cn-beijing-b

    回收策略

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

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

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

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

    繫結模式

    雲端硬碟的繫結模式。預設為Immediate:表示先建立雲端硬碟再建立Pod。

  5. 參數配置完成後,單擊建立

    建立成功後在儲存類列表中可看到剛建立的StorageClass。

步驟二:建立PVC

  1. 在叢集管理頁左側導覽列,選擇儲存 > 儲存聲明

  2. 儲存聲明頁面,單擊右上方的建立

  3. 建立儲存聲明對話方塊中,配置參數。

    配置項

    說明

    儲存宣告類型

    支援雲端硬碟、NAS兩種雲端儲存類型。本文中選擇雲端硬碟

    名稱

    建立的儲存聲明名稱在命名空間內必須唯一。

    分配模式

    本文中選擇使用儲存類動態建立

    已有儲存類

    單擊選擇儲存類,在選擇儲存類對話方塊目標儲存類右側操作列單擊選擇

    總量

    所建立儲存卷的容量。

    訪問模式

    預設為ReadWriteOnce

  4. 單擊建立

    建立成功後在儲存聲明列表中可看到建立的儲存聲明,並且已綁定相應的儲存卷。

步驟三:建立應用

  1. 在叢集管理頁左側導覽列,選擇工作負載 > 有狀態

  2. 有狀態頁面,單擊使用鏡像建立

  3. 配置建立應用的參數資訊。
    以下主要為您介紹資料卷的配置。關於其他參數的描述,請參見建立有狀態工作負載StatefulSet

    ASK資料卷支援配置本機存放區和雲端儲存,本樣本需要配置雲端儲存類型。

    本例中配置了一個雲端硬碟類型的資料卷,將該雲端硬碟掛載到容器中/tmp路徑下,在該路徑下產生的容器資料會儲存到雲端硬碟中。資料存放區
  4. 所有的資訊都配置完成後,單擊建立
    建立成功後,您就可以正常使用資料卷。

通過kubectl命令列的方式使用雲端硬碟動態儲存裝置卷

步驟一:建立StorageClass

在多可用性區域叢集情境下,您可以使用先建立雲端硬碟,然後再建立Pod的方式建立StorageClass。

  1. 使用以下內容,建立storage-class-csi.yaml檔案。

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: alicloud-disk-ssd-b
    provisioner: diskplugin.csi.alibabacloud.com
    parameters:
      type: cloud_ssd
      encrypted: "false"
    reclaimPolicy: Retain
    allowVolumeExpansion: true
    volumeBindingMode: Immediate

    參數

    說明

    provisioner

    配置為diskplugin.csi.alibabacloud.com。表示使用阿里雲雲端硬碟Provisioner外掛程式建立StorageClass。

    type

    表示雲端硬碟類型,支援cloud_efficiencycloud_ssdcloud_essdavailable四種參數及除available外其他三種參數的任意組合。例如,type: cloud_efficiency, cloud_ssd, cloud_essd,這種配置方式支援對指定類型的雲端硬碟依次建立,直到建立成功。其中available會對SSD、高效依次嘗試建立,直到建立成功。

    說明

    部分ECS機型不支援ESSD雲端硬碟掛載。更多資訊,請參見Block StorageFAQ

    encrypted

    可選,標識建立的雲端硬碟是否加密。預設為false,建立的雲端硬碟不加密。

    reclaimPolicy

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

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

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

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

    allowVolumeExpansion

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

    volumeBindingMode

    雲端硬碟的繫結模式。預設為Immediate:表示先建立雲端硬碟再建立Pod。

  2. 執行以下命令,建立StorageClass。

    kubectl apply -f storage-class-csi.yaml
  3. 查看建立的StorageClass。

    1. 登入Container Service管理主控台,在左側導覽列選擇叢集

    2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇儲存 > 儲存類

    3. 儲存類頁面查看建立的StorageClass。

步驟二:建立PVC

  1. 使用以下內容,建立pvc-ssd.yaml檔案。

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: disk-pvc
    spec:
      accessModes:
      - ReadWriteOnce
      volumeMode: Filesystem
      resources:
        requests:
          storage: 25Gi
      storageClassName: alicloud-disk-ssd-b

    參數

    說明

    name

    PVC的名稱。

    accessModes

    配置訪問模式。

    volumeMode

    可選,掛載雲端硬碟的格式,支援Filesystem檔案系統掛載。

    storageClassName

    StorageClass的名稱,用於綁定StorageClass。

    storage

    申請的雲端硬碟大小,最小為20 GiB。

  2. 執行以下命令,建立PVC。

    kubectl create -f pvc-ssd.yaml
  3. 查看建立的PVC。

    在叢集管理頁左側導覽列選擇儲存 > 儲存聲明。可以在儲存聲明頁面看到建立的PVC。

步驟三:建立應用

  1. 建立pvc-dynamic.yaml檔案。

    建立一個名為nginx-dynamic的應用,並掛載PVC。

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: nginx-dynamic
    spec:
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx
            ports:
            - containerPort: 80
              name: web
            volumeMounts:
            - name: pvc-disk
              mountPath: /data
          volumes:
            - name: pvc-disk
              persistentVolumeClaim:
                claimName: disk-pvc

    參數

    說明

    mountPath

    雲端硬碟掛載的位置。

    claimName

    PVC的名稱,用於綁定PVC。

  2. 執行以下命令,建立應用並掛載PVC。

    kubectl create -f pvc-dynamic.yaml
  3. 查看建立的應用。

    在叢集管理頁左側導覽列選擇工作負載 > 有狀態。您可以在有狀態頁面看到建立的應用。

驗證動態雲端硬碟的持久化儲存

當某個Pod被刪除時,重新部署的Pod將保留之前Pod在儲存卷中寫入的所有資料。您可以通過以下樣本驗證動態雲端硬碟的持久化儲存特性。

  1. 查看MySQL應用所在的Pod和雲端硬碟檔案。

    1. 執行以下命令,查看MySQL應用所在Pod的名稱。

      kubectl get pod | grep mysql

      預期輸出:

      nginx-dynamic-1****   1/1     Running     0          3m
    2. 執行以下命令,查看/data路徑下是否掛載了新的雲端硬碟。

      kubectl exec nginx-dynamic-1**** -- df | grep data

      預期輸出:

      /dev/vdh        20511312    45080  20449848   1% /data
    3. 執行以下命令,查看/data路徑下的檔案。

      kubectl exec nginx-dynamic-1**** -- ls /data

      預期輸出:

      lost+found
  2. 在雲端硬碟裡建立檔案。

    1. 執行以下命令,在/data路徑下建立檔案mysql

      kubectl exec nginx-dynamic-1**** -- touch /data/mysql
    2. 執行以下命令,查看/data路徑下的檔案。

      kubectl exec nginx-dynamic-1**** -- ls /data

      預期輸出:

      mysql
      lost+found
  3. 執行以下命令,刪除名為nginx-dynamic-1****的Pod。

    kubectl delete pod ngibnx-dynamic-1****

    預期輸出:

    pod "nginbx-dynamic-1****" deleted
  4. 驗證刪除Pod後,雲端硬碟中建立的檔案是否仍然存在。

    1. 執行以下命令,查看重建的Pod名稱。

      kubectl get pod 

      預期輸出:

      NAME                       READY   STATUS      RESTARTS   AGE
      nginx-dynamic-2**b**        1/1     Running     0          2m
    2. 執行以下命令,查看/data路徑下的檔案。

      kubectl exec nginx-dynamic-2**** -- ls /data

      預期輸出:

      mysql
      lost+found

      mysql檔案仍然存在,說明動態雲端硬碟的資料可以持久儲存。