如果您的应用需要额外的存储来保存数据,但并不需要持久化存储,您可以为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类型的云盘存储卷。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