如果您的应用需要额外的存储来保存数据,但并不需要持久化存储,您可以为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: metadata: labels: type: scratch-volume spec: accessModes: [ "ReadWriteOncePod" ] storageClassName: alicloud-disk-topology-alltype resources: requests: storage: 30Gi
volumeClaimTemplate
中的参数说明如下:参数
说明
accessModes
存储卷的访问模式。
storageClassName
要使用的StorageClass名称。
本文示例使用的
alicloud-disk-topology-alltype
是ACK默认提供的StorageClass,该StorageClass定义了云盘存储卷的配置,会按照ESSD云盘、SSD云盘、高效云盘的顺序依次尝试创建。storage
临时存储卷的容量大小。
使用准备好的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监控。
关于云盘的持久化存储,请参见云盘存储卷。