ACS中无状态服务Deployment支持通过VolumeClaimTemplate
为每个Pod创建临时存储,这种临时存储卷会随着相应 Pod 的删除或缩容而自动清理。本文介绍如何使用Deployment创建临时存储以及验证执行Pod的缩容时相关的PVC和PV会被自动清理。
前提条件
使用场景
应用需要临时存储来保存应用的中间数据,但无需持久化。
应用会输出日志,且日志的吞吐量很大,使用临时非共享存储可以保证存储性能。
创建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-disk-topology-alltype resources: requests: storage: 40Gi
参数
说明
replicas
本示例设置为2,表示创建2个Pod。
volumeMounts.mountPath
云盘在容器中挂载的位置。
accessMode
访问模式,仅支持ReadWriteOncePod。
ephemeral
声明当前存储为临时存储。
storageClassName
本示例配置为alicloud-disk-topology-alltype,表示使用ESSD AutoPL类型的云盘。
storage
云盘存储的容量
执行以下命令,部署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
可以看到对应的PVC数量跟随Pod的数量一同缩减。