全部產品
Search
文件中心

Container Service for Kubernetes:使用雲端硬碟作為臨時儲存卷

更新時間:Sep 11, 2025

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

使用情境

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

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

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

前提條件

已建立1.22及以上版本的叢集。

建立Deployment並掛載臨時儲存卷

建立Deployment時,您可以通過VolumeClaimTemplate自動建立PVC和PV。VolumeClaimTemplate表示一類PVC的模板,系統會根據Deployment配置的replicas數量,建立相應數量的PVC。這些PVC除了名稱不一樣,其他配置均相同。

說明

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

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

    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: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
              resources:
                requests:
                  cpu: 500m
                  memory: 2Gi
                  ephemeral-storage: 2Gi
              volumeMounts:
              - mountPath: "/scratch"
                name: scratch-volume
          volumes:
            - name: scratch-volume
              ephemeral:      # 聲明當前儲存為臨時儲存
                volumeClaimTemplate:
                  spec:
                    accessModes: [ "ReadWriteOncePod" ]
                    storageClassName: alicloud-disk-topology-alltype
                    resources:
                      requests:
                        storage: 30Gi

    volumeClaimTemplate中的參數說明如下:

    參數

    說明

    accessModes

    儲存卷的訪問模式。可配置為ReadWriteOncePodReadWriteOnce

    如果您的叢集版本為1.29及以上,推薦使用ReadWriteOncePod,保證一個雲端硬碟只被一個Pod使用。

    storageClassName

    要使用的StorageClass名稱。

    本文樣本使用的alicloud-disk-topology-alltype是ACK預設提供的StorageClass,該StorageClass定義了雲端硬碟儲存卷的配置,會按照ESSD雲端硬碟、SSD雲端硬碟、高效雲端硬碟的順序依次嘗試建立。

    說明

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

    storage

    臨時儲存卷的容量大小。

    說明

    樣本使用的StorageClass(alicloud-disk-topology-alltype)預設優先建立PL1的ESSD雲端硬碟,容量大小最低為20 GiB。

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

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

    kubectl get pod -l pod=example-pod

    預期返回:

    NAME                                 READY   STATUS    RESTARTS   AGE
    ephemeral-example-7f795798f9-kbplx   1/1     Running   0          38s
    ephemeral-example-7f795798f9-p98lt   1/1     Running   0          38s
  4. 查看PVC。

    kubectl get pvc

    預期返回如下,可以看到已自動建立了Pod對應的PVC和PV。您可以在VOLUME欄位擷取雲端硬碟ID。

    NAME                                                STATUS   VOLUME                   CAPACITY   ACCESS MODES   STORAGECLASS                     VOLUMEATTRIBUTESCLASS   AGE
    ephemeral-example-7f795798f9-kbplx-scratch-volume   Bound    d-uf61678cuo33eunn****   30Gi       RWOP           alicloud-disk-topology-alltype   <unset>                 74s
    ephemeral-example-7f795798f9-p98lt-scratch-volume   Bound    d-uf6dwkdcowyf2fj6****   30Gi       RWOP           alicloud-disk-topology-alltype   <unset>                 74s

驗證PV和PVC會隨著Pod縮容而刪除

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

  1. 減少Deployment的副本數量。

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

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

    kubectl get pod -l pod=example-pod

    預期返回:

    NAME                                 READY   STATUS    RESTARTS   AGE
    ephemeral-example-7f795798f9-kbplx   1/1     Running   0          5m29s
  3. 查看PV和PVC,確認PV和PVC已自動刪除。

    1. 查看PV。

      kubectl get pv

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

      NAME                     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                                                       STORAGECLASS                     VOLUMEATTRIBUTESCLASS   REASON   AGE
      d-uf61678cuo33eunn****   30Gi       RWOP           Delete           Bound    default/ephemeral-example-7f795798f9-kbplx-scratch-volume   alicloud-disk-topology-alltype   <unset>                          5m52s
    2. 查看PVC。

      kubectl get pvc

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

      NAME                                                STATUS   VOLUME                   CAPACITY   ACCESS MODES   STORAGECLASS                     VOLUMEATTRIBUTESCLASS   AGE
      ephemeral-example-7f795798f9-kbplx-scratch-volume   Bound    d-uf61678cuo33eunn****   30Gi       RWOP           alicloud-disk-topology-alltype   <unset>                 7m11s

相關文檔