挂载临时存储卷

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

适用场景

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

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

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

操作步骤

  1. 连接集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群在CloudShell上通过kubectl管理Kubernetes集群

  2. 参考参数说明表修改以下YAML内容,并保存为ephemeral-example.yaml。

    说明

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

    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: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
              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: 40Gi

    以上YAML中定义的Deployment包含2个Pod,每个Pod会挂载一个临时存储卷。volumeClaimTemplate中的相关参数说明如下:

    参数

    说明

    accessModes

    存储卷的访问模式。目前仅支持ReadWriteOncePod

    storageClassName

    要使用的StorageClass名称。

    本文示例使用的alicloud-disk-topology-alltype是ACS默认提供的StorageClass,该StorageClass定义了云盘存储卷的配置,会优先创建一个ESSD PL1类型的云盘存储卷。

    说明

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

    storage

    临时存储卷的容量大小。

    本文示例使用的StorageClass会创建ESSD PL1类型的云盘存储卷,该类云盘支持的容量范围为20~65536 GiB。

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

    kubectl create -f ephemeral-example.yaml
  4. 查看Deployment中Pod的部署情况。

    kubectl get pod

    预期返回如下,表示已创建2个Pod。

    NAME                                 READY   STATUS    RESTARTS   AGE
    ephemeral-example-64db7b9f5c-hcpz5   1/1     Running   0          108s
    ephemeral-example-64db7b9f5c-qqvl5   1/1     Running   0          108s
  5. 查看PVC。

    kubectl get pvc

    预期返回如下,可以看到已自动创建了Pod对应的PVC和PV。

    说明

    本文示例使用的是云盘存储卷,您可以在VOLUME字段获取云盘ID。

    NAME                                                STATUS   VOLUME                   CAPACITY   ACCESS MODES   STORAGECLASS                     AGE
    ephemeral-example-64db7b9f5c-hcpz5-scratch-volume   Bound    d-uf6h6nl0yf2y1331****   40Gi       RWOP           alicloud-disk-topology-alltype   3m28s
    ephemeral-example-64db7b9f5c-qqvl5-scratch-volume   Bound    d-uf6a3lk85znunou6****   40Gi       RWOP           alicloud-disk-topology-alltype   3m28s

结果验证

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

  1. 减少Deployment的副本数量。

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

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

    kubectl get pod

    预期返回如下,表示Deployment中还有1个Pod。

    NAME                                 READY   STATUS    RESTARTS   AGE
    ephemeral-example-64db7b9f5c-qqvl5   1/1     Running   0          11m
  3. 查看PV和PVC,确认PV和PVC已自动删除。

    1. 查看PV。

      kubectl get pv

      预期返回如下,可以看到PV已随着Pod删除而自动删除。

      NAME                     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                                                       STORAGECLASS                     REASON   AGE
      d-uf6a3lk85znunou6****   40Gi       RWOP           Delete           Bound    default/ephemeral-example-64db7b9f5c-qqvl5-scratch-volume   alicloud-disk-topology-alltype            20m
    2. 查看PVC。

      kubectl get pvc

      预期返回如下,可以看到PVC已随着Pod删除而自动删除。

      NAME                                                STATUS   VOLUME                   CAPACITY   ACCESS MODES   STORAGECLASS                     AGE
      ephemeral-example-64db7b9f5c-qqvl5-scratch-volume   Bound    d-uf6a3lk85znunou6****   40Gi       RWOP           alicloud-disk-topology-alltype   15m