首页 容器计算服务 操作指南 存储 存储最佳实践 使用Deployment创建临时存储

使用Deployment创建临时存储

更新时间: 2024-01-02 12:07:12

无状态服务Deployment支持通过VolumeClaimTemplate为每个Pod创建临时存储,在删除和减少Pod时自动删除创建的PVC和PV。本文介绍如何使用Deployment创建临时存储以及验证PVC和PV会随着Pod的缩容而删除。

前提条件

  • 已创建集群。具体操作,请参见 创建ACS集群

  • 已确保Kubernetes集群处于正常运行状态。

    访问容器计算服务管理控制台,在集群列表页面,查看目标集群的集群状态。若集群状态运行中,表示集群处于正常运行状态。

使用场景

  • 应用需要临时存储来保存应用中间数据,但无需持久化。

  • 应用写日志,日志吞吐量很大,使用临时非共享存储可以保证存储性能。

创建Deployment临时存储

创建无状态服务Deployment时,您可以通过VolumeClaimTemplate自动创建PVC和PV。VolumeClaimTemplate表示一类PVC的模板,系统会根据无状态服务Deployment配置的replicas数量,创建相应数量的PVC,这些PVC除了名字不一样,其他配置都相同。

  1. 使用以下示例代码创建无状态服务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。

  2. 执行以下命令,部署Deployment服务。

    kubectl create -f ephemeral-example.yaml
  1. 执行以下命令,查看已部署的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
  2. 执行以下命令,查看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的缩容而删除

  1. 执行以下命令,缩容Pod为1。

    kubectl scale deploy ephemeral-example --replicas=1
  2. 执行以下命令,查看Pod的数量。

    kubectl get pod

    预期输出:

    NAME                                 READY   STATUS    RESTARTS   AGE
    ephemeral-example-57f45b6ccb-hmpkj   1/1     Running   0          30m
  1. 执行以下命令,查看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