使用Deployment创建临时存储
无状态服务Deployment支持通过VolumeClaimTemplate
为每个Pod创建临时存储,在删除和减少Pod时自动删除创建的PVC和PV。本文介绍如何使用Deployment创建临时存储以及验证PVC和PV会随着Pod的缩容而删除。
前提条件
已创建集群。具体操作,请参见 创建ACS集群。
已确保Kubernetes集群处于正常运行状态。
访问容器计算服务管理控制台,在集群列表页面,查看目标集群的集群状态。若集群状态为运行中,表示集群处于正常运行状态。
使用场景
应用需要临时存储来保存应用中间数据,但无需持久化。
应用写日志,日志吞吐量很大,使用临时非共享存储可以保证存储性能。
创建Deployment临时存储
创建无状态服务Deployment时,您可以通过VolumeClaimTemplate
自动创建PVC和PV。VolumeClaimTemplate
表示一类PVC的模板,系统会根据无状态服务Deployment配置的replicas数量,创建相应数量的PVC,这些PVC除了名字不一样,其他配置都相同。
使用以下示例代码创建无状态服务Deployment ,并且该Deployment包含2个Pod。
该使用方式对于Deployment、StatefulSet、Pod均适用。
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: busybox-container image: busybox resources: requests: cpu: 500m memory: 2Gi ephemeral-storage: 2Gi volumeMounts: - mountPath: "/scratch" name: scratch-volume command: [ "sleep", "1000000" ] volumes: - name: scratch-volume ephemeral: volumeClaimTemplate: metadata: labels: type: scratch-volume spec: accessModes: [ "ReadWriteOncePod" ] storageClassName: alicloud-ebs-performance resources: requests: storage: 40Gi
参数
说明
replicas
本示例设置为2,表示创建2个Pod。
volumeMounts.mountPath
云盘在容器中挂载的位置。
accessMode
访问模式,仅支持ReadWriteOncePod。
ephemeral
声明当前存储为临时存储。
storageClassName
本示例配置为alicloud-ebs-performance,表示使用ESSD AutoPL类型的云盘。
storage
alicloud-ebs-efficiency存储类对应的卷的最小容量是20 GiB,alicloud-ebs-performance和alicloud-ebs-rapid存储类对应的卷的最小容量是40 GiB。
执行以下命令,部署Deployment服务。
kubectl create -f ephemeral-example.yaml
执行以下命令,查看已部署的Pod。
kubectl get pod
预期输出:
NAME READY STATUS RESTARTS AGE ephemeral-example-57f45b6ccb-4wsmw 1/1 Running 0 25m ephemeral-example-57f45b6ccb-hmpkj 1/1 Running 0 25m
执行以下命令,查看PVC。
kubectl get pvc
预期输出:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE ephemeral-example-57f45b6ccb-4wsmw-scratch-volume Bound d-cd160izdkm6kcl80xhpz34 40Gi RWOP alicloud-ebs-performance 26m ephemeral-example-57f45b6ccb-hmpkj-scratch-volume Bound d-cd16016afl7k6zrvv86ycr 40Gi RWOP alicloud-ebs-performance 26m
验证PVC和PV会随着Pod的缩容而删除
执行以下命令,缩容Pod为1。
kubectl scale deploy ephemeral-example --replicas=1
执行以下命令,查看Pod的数量。
kubectl get pod
预期输出:
NAME READY STATUS RESTARTS AGE ephemeral-example-57f45b6ccb-hmpkj 1/1 Running 0 30m
执行以下命令,查看PVC的数量。
kubectl get pvc
预期输出:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE ephemeral-example-57f45b6ccb-hmpkj-scratch-volume Bound d-cd16016afl7k6zrvv86ycr 40Gi RWOP alicloud-ebs-performance 32m