使用云盘作为临时存储卷

如果您的应用需要额外的存储来保存数据,但并不需要持久化存储,您可以为Pod挂载临时存储卷。这类临时存储卷会随Pod一起创建和删除,可以简化应用的部署和管理。本文介绍如何使用云盘作为临时存储卷,通过ephemeral.volumeClaimTemplatePod挂载临时存储卷,并验证PVPVC会随着Pod删除而自动删除。

使用场景

本文适用于临时存储的场景,例如:

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

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

前提条件

已创建1.22及以上版本的集群。

创建Deployment并挂载临时存储卷

创建Deployment时,您可以通过VolumeClaimTemplate自动创建PVCPV。VolumeClaimTemplate表示一类PVC的模板,系统会根据Deployment配置的replicas数量,创建相应数量的PVC。这些PVC除了名称不一样,其他配置均相同。

说明

通过ephemeral.volumeClaimTemplate挂载临时存储卷的方式,Deployment、StatefulSetPod等均适用,本文以Deployment为例。

  1. 参考参数说明表修改以下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-alltypeACK默认提供的StorageClass,该StorageClass定义了云盘存储卷的配置,会按照ESSD云盘、SSD云盘、高效云盘的顺序依次尝试创建。

    说明

    云盘采用按量付费。更多信息,请参见块存储计费块存储价格

    storage

    临时存储卷的容量大小。

  2. 使用准备好的ephemeral-example.yaml,创建Deployment。

    kubectl create -f ephemeral-example.yaml
  3. 查看DeploymentPod的部署情况。

    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
  4. 查看PVC。

    kubectl get pvc

    预期返回如下,可以看到已自动创建了Pod对应的PVCPV。您可以在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

验证PVPVC会随着Pod缩容而删除

按照上文步骤创建Deployment时,会自动为每个Pod挂载一个云盘作为临时存储卷。这类临时存储卷会随着相应Pod的删除而自动删除。验证示例如下。

  1. 减少Deployment的副本数量。

    以下示例命令表示将Deployment中的Pod数量缩容为1。

    kubectl scale deploy ephemeral-example --replicas=1
  2. 查看Pod,确认已经完成缩容。

    kubectl get pod -l pod=example-pod

    预期返回:

    NAME                                 READY   STATUS    RESTARTS   AGE
    ephemeral-example-7f795798f9-kbplx   1/1     Running   0          5m29s
  3. 查看PVPVC,确认PVPVC已自动删除。

    1. 查看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
    2. 查看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

相关文档