如果您的應用需要額外的儲存來儲存資料,但並不需要持久化儲存,您可以為Pod掛載臨時儲存卷。這類臨時儲存卷會隨Pod一起建立和刪除,可以簡化應用的部署和管理。本文介紹如何通過ephemeral.volumeClaimTemplate
為Pod掛載臨時儲存卷,並驗證PV和PVC會隨著Pod刪除而自動刪除。
適用情境
本文適用於臨時儲存的情境,例如:
應用需要臨時儲存來儲存應用的中間資料,但無需持久化儲存。
應用會輸出日誌,且日誌的輸送量很大,使用臨時非共用儲存可以保證儲存效能。
操作步驟
串連叢集。具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集或在CloudShell上通過kubectl管理Kubernetes叢集。
參考參數說明表修改以下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。
使用準備好的ephemeral-example.yaml,建立Deployment。
kubectl create -f ephemeral-example.yaml
查看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
查看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的刪除而自動刪除。驗證樣本如下:
減少Deployment的副本數量。
以下樣本命令表示將Deployment中的Pod數量縮容為1。
kubectl scale deploy ephemeral-example --replicas=1
查看Pod,確認已經完成縮容。
kubectl get pod
預期返回如下,表示Deployment中還有1個Pod。
NAME READY STATUS RESTARTS AGE ephemeral-example-64db7b9f5c-qqvl5 1/1 Running 0 11m
查看PV和PVC,確認PV和PVC已自動刪除。
查看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
查看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