全部產品
Search
文件中心

Container Service for Kubernetes:使用ENS雲端硬碟

更新時間:Jul 17, 2024

ENS雲端硬碟是在ACK Edge叢集的ENS節點上使用的雲端硬碟。ACK Edge叢集支援使用CSI外掛程式建立ENS雲端硬碟靜態儲存卷和ENS雲端硬碟動態儲存裝置卷。本文介紹如何在CSI外掛程式中掛載ENS雲端硬碟靜態儲存卷和ENS雲端硬碟動態儲存裝置卷。

前提條件

使用說明

  • 在應用部署時,推薦通過StorageClass自動建立PV購買雲端硬碟。如果您已經購買雲端硬碟,則使用雲端硬碟靜態儲存卷

  • 申請雲端硬碟的大小,不能超出雲端硬碟的單盤容量範圍。更多資訊,請參見儲存規格

  • 當Pod重建時,會重新掛載原雲端硬碟。若由於其他限制無法調度到原可用性區域,則Pod將會處於Pending狀態。

  • 動態建立的雲端硬碟為隨用隨付的雲端硬碟,關於雲端硬碟計費項目資訊,請參見Block Storage計費。關於雲端硬碟的價格資訊,請參見Elastic Compute Service產品詳情頁

  • ENS雲端硬碟為阿里雲儲存團隊提供的非共用儲存,只能同時被一個Pod掛載。

  • ACK Edge叢集中與ENS雲端硬碟在同一地區的ENS節點才能掛載ENS雲端硬碟。

  • 不支援回收和刪除ENS雲端硬碟。相關操作,需在操作。

使用ENS雲端硬碟動態儲存裝置卷

步驟一:建立storageclass

在多地區叢集情境下,您可以根據不同的情境通過以下兩種方式建立StorageClass。

方式一:使用Topology(延遲綁定)方式建立StorageClass

延遲綁定可以最佳化ACK Edge叢集中存在多個地區的問題。以下通過部署名為storage-class-csi-topology.yaml檔案為例,建立StorageClass。

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

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: alicloud-ens-disk-available
    provisioner: ensplugin.csi.alibabacloud.com
    parameters:
      type: available
      fsType: ext4
    volumeBindingMode: WaitForFirstConsumer
    reclaimPolicy: Retain
    allowVolumeExpansion: false

    參數

    說明

    name

    StorageClass的名稱。

    provisioner

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

    type

    雲端硬碟類型。

    regionId

    可選,自動建立雲端硬碟所在的地區。

    reclaimPolicy

    雲端硬碟的回收策略,僅支援Retain,當刪除PVC的時候,PV和雲端硬碟資料不會被刪除,需要您手動刪除。

    volumeBindingMode

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

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

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

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

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

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

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

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

方式二:先建立雲端硬碟再建立Pod的方式建立StorageClass

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

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: alicloud-ens-disk-available
    provisioner: ensplugin.csi.alibabacloud.com
    parameters:
      type: available
      regionId: xxx
    reclaimPolicy: Retain
    allowVolumeExpansion: false
    volumeBindingMode: Immediate
  2. 執行以下命令,建立StorageClass。

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

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

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

    儲存類頁面查看建立的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-ens-disk-available
  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. 查看建立的應用。

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

使用ENS雲端硬碟靜態儲存卷

步驟一:建立PV

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

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: csi-pv
      labels:
        alicloud-pvname: static-disk-pv
    spec:
      capacity:
        storage: 25Gi
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Retain
      csi:
        driver: ensplugin.csi.alibabacloud.com
        volumeHandle: "<your-disk-id>"
      nodeAffinity:
        required:
          nodeSelectorTerms:
          - matchExpressions:
            - key: topology.ensplugin.csi.alibabacloud.com/region
              operator: In
              values:
              - "<your-node-region-id>"     # ENS節點RegionID。可通過查看ENS節點label中topology.ensplugin.csi.alibabacloud.com/region參數查看ENS節點RegionID。

    參數

    說明

    name

    PV的名稱。

    labels

    設定PV的標籤。

    storage

    雲端硬碟的可使用量。

    accessModes

    設定訪問模式。

    persistentVolumeReclaimPolicy

    PV的回收策略。

    driver

    定義驅動類型。取值為ensplugin.csi.alibabacloud.com,表示使用ENS雲端硬碟CSI外掛程式。

    volumeHandle

    定義雲端硬碟ID。

    nodeAffinity

    定義PV和PVC所屬的地區資訊。

    通過定義該參數,可以將PV和PVC所在的Pod調度到對應的地區上。

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

    kubectl create -f pv-static.yaml
  3. 查看建立的PV。

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

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

    儲存卷頁面可看到建立的PV。

步驟二:建立PVC

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

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: csi-pvc
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 25Gi
      selector:
        matchLabels:
          alicloud-pvname: static-disk-pv

    參數

    說明

    name

    PVC的名稱。

    accessModes

    設定訪問模式。

    storage

    聲明應用使用量,不能大於儲存卷的總量。

    matchLabels

    通過標籤關聯PV,與PV標籤保持一致。

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

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

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

步驟三:建立應用

本文以Web應用為例,在應用中掛載PVC。

  1. 使用以下內容,建立web.yaml檔案。

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: web
    spec:
      selector:
        matchLabels:
          app: nginx
      serviceName: "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: csi-pvc

    參數

    說明

    mountPath

    雲端硬碟掛載的位置。

    claimName

    PVC的名稱,用於綁定PVC。

  2. 執行以下命令,建立一個掛載了ENS雲端硬碟靜態儲存卷的應用並掛載PVC。

    kubectl apply -f web.yaml
  3. 在叢集管理頁左側導覽列選擇工作負載 > 有狀態

    有狀態頁面可看到建立的Web應用,且應用能正常啟動,說明ENS雲端硬碟已經掛載成功。