全部產品
Search
文件中心

Container Compute Service:掛載臨時儲存卷

更新時間:Dec 11, 2024

如果您的應用需要額外的儲存來儲存資料,但並不需要持久化儲存,您可以為Pod掛載臨時儲存卷。這類臨時儲存卷會隨Pod一起建立和刪除,可以簡化應用的部署和管理。本文介紹如何通過ephemeral.volumeClaimTemplate為Pod掛載臨時儲存卷,並驗證PV和PVC會隨著Pod刪除而自動刪除。

適用情境

本文適用於臨時儲存的情境,例如:

  • 應用需要臨時儲存來儲存應用的中間資料,但無需持久化儲存。

  • 應用會輸出日誌,且日誌的輸送量很大,使用臨時非共用儲存可以保證儲存效能。

操作步驟

  1. 串連叢集。具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集在CloudShell上通過kubectl管理Kubernetes叢集

  2. 參考參數說明表修改以下YAML內容,並儲存為ephemeral-example.yaml。

    說明

    通過ephemeral.volumeClaimTemplate掛載臨時儲存卷的方式,Deployment、StatefulSet和Pod等均適用,本文以Deployment為例。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ephemeral-example
    spec:
      replicas: 2
      selector:
        matchLabels:
          pod: example-pod
      strategy:
        type: Recreate      
      template:
        metadata:
          labels:
            pod: example-pod
        spec:
          containers:
            - name: nginx
              image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
              resources:
                requests:
                  cpu: 500m
                  memory: 2Gi
                  ephemeral-storage: 2Gi
              volumeMounts:
              - mountPath: "/scratch"
                name: scratch-volume
          volumes:
            - name: scratch-volume
              ephemeral:
                volumeClaimTemplate:
                  metadata:
                    labels:
                      type: scratch-volume
                  spec:
                    accessModes: [ "ReadWriteOncePod" ]
                    storageClassName: alicloud-disk-topology-alltype
                    resources:
                      requests:
                        storage: 40Gi

    以上YAML中定義的Deployment包含2個Pod,每個Pod會掛載一個臨時儲存卷。volumeClaimTemplate中的相關參數說明如下:

    參數

    說明

    accessModes

    儲存卷的訪問模式。目前僅支援ReadWriteOncePod

    storageClassName

    要使用的StorageClass名稱。

    本文樣本使用的alicloud-disk-topology-alltype是ACS預設提供的StorageClass,該StorageClass定義了雲端硬碟儲存卷的配置,會優先建立一個ESSD PL1類型的雲端硬碟儲存卷。

    說明

    雲端硬碟採用隨用隨付。更多資訊,請參見Block Storage計費Block Storage價格

    storage

    臨時儲存卷的容量大小。

    本文樣本使用的StorageClass會建立ESSD PL1類型的雲端硬碟儲存卷,該類雲端硬碟支援的容量範圍為20~65536 GiB。

  3. 使用準備好的ephemeral-example.yaml,建立Deployment。

    kubectl create -f ephemeral-example.yaml
  4. 查看Deployment中Pod的部署情況。

    kubectl get pod

    預期返回如下,表示已建立2個Pod。

    NAME                                 READY   STATUS    RESTARTS   AGE
    ephemeral-example-64db7b9f5c-hcpz5   1/1     Running   0          108s
    ephemeral-example-64db7b9f5c-qqvl5   1/1     Running   0          108s
  5. 查看PVC。

    kubectl get pvc

    預期返回如下,可以看到已自動建立了Pod對應的PVC和PV。

    說明

    本文樣本使用的是雲端硬碟儲存卷,您可以在VOLUME欄位擷取雲端硬碟ID。

    NAME                                                STATUS   VOLUME                   CAPACITY   ACCESS MODES   STORAGECLASS                     AGE
    ephemeral-example-64db7b9f5c-hcpz5-scratch-volume   Bound    d-uf6h6nl0yf2y1331****   40Gi       RWOP           alicloud-disk-topology-alltype   3m28s
    ephemeral-example-64db7b9f5c-qqvl5-scratch-volume   Bound    d-uf6a3lk85znunou6****   40Gi       RWOP           alicloud-disk-topology-alltype   3m28s

結果驗證

按照上文步驟建立Deployment時,會自動為每個Pod掛載一個雲端硬碟作為臨時儲存卷。這類臨時儲存卷會隨著相應Pod的刪除而自動刪除。驗證樣本如下:

  1. 減少Deployment的副本數量。

    以下樣本命令表示將Deployment中的Pod數量縮容為1。

    kubectl scale deploy ephemeral-example --replicas=1
  2. 查看Pod,確認已經完成縮容。

    kubectl get pod

    預期返回如下,表示Deployment中還有1個Pod。

    NAME                                 READY   STATUS    RESTARTS   AGE
    ephemeral-example-64db7b9f5c-qqvl5   1/1     Running   0          11m
  3. 查看PV和PVC,確認PV和PVC已自動刪除。

    1. 查看PV。

      kubectl get pv

      預期返回如下,可以看到PV已隨著Pod刪除而自動刪除。

      NAME                     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                                                       STORAGECLASS                     REASON   AGE
      d-uf6a3lk85znunou6****   40Gi       RWOP           Delete           Bound    default/ephemeral-example-64db7b9f5c-qqvl5-scratch-volume   alicloud-disk-topology-alltype            20m
    2. 查看PVC。

      kubectl get pvc

      預期返回如下,可以看到PVC已隨著Pod刪除而自動刪除。

      NAME                                                STATUS   VOLUME                   CAPACITY   ACCESS MODES   STORAGECLASS                     AGE
      ephemeral-example-64db7b9f5c-qqvl5-scratch-volume   Bound    d-uf6a3lk85znunou6****   40Gi       RWOP           alicloud-disk-topology-alltype   15m