如果您的應用需要額外的儲存來儲存資料,但並不需要持久化儲存,您可以為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為例。
參考參數說明表修改以下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: 30GivolumeClaimTemplate中的參數說明如下:參數
說明
accessModes儲存卷的訪問模式。可配置為
ReadWriteOncePod或ReadWriteOnce。如果您的叢集版本為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。使用準備好的ephemeral-example.yaml,建立Deployment。
kubectl create -f ephemeral-example.yaml查看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查看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的刪除而自動刪除。驗證樣本如下。
減少Deployment的副本數量。
以下樣本命令表示將Deployment中的Pod數量縮容為1。
kubectl scale deploy ephemeral-example --replicas=1查看Pod,確認已經完成縮容。
kubectl get pod -l pod=example-pod預期返回:
NAME READY STATUS RESTARTS AGE ephemeral-example-7f795798f9-kbplx 1/1 Running 0 5m29s查看PV和PVC,確認PV和PVC已自動刪除。
查看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查看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
相關文檔
如需監控臨時儲存的使用方式,請參見Ephemeral Storage監控。
關於雲端硬碟的持久化儲存,請參見雲端硬碟儲存卷。