使用Deployment创建临时存储

临时存储可用于存储缓存等临时数据,在创建Deployment时,您可以通过PVC模板VolumeClaimTemplate为每个Pod自动创建临时存储,在删除和减少Pod时自动删除之前创建的PVC和PV。本文介绍如何使用Deployment创建临时存储以及验证存储会随着Pod的缩容而被删除。

前提条件

已创建ACK集群,且集群为1.22及以上版本。具体操作,请参见创建Kubernetes托管版集群

说明

该功能暂不支持ACK Serverless集群

使用场景

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

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

创建Deployment临时存储

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

  1. 使用以下示例代码创建无状态服务Deployment ,并且该Deployment包含2个Pod。

    该使用方式对于Deployment、StatefulSet、Pod均适用。

    展开查看创建无状态服务Deployment的YAML文件

    allowVolumeExpansion: true
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      creationTimestamp: "2023-07-19T06:54:25Z"
      name: alicloud-disk-topology-alltype
      resourceVersion: "773847"
      uid: 5a9f8e3b-d22e-483d-a3bf-90ff8d466492
    parameters:
      type: cloud_essd,cloud_ssd,cloud_efficiency
    provisioner: diskplugin.csi.alibabacloud.com
    reclaimPolicy: Delete
    volumeBindingMode: WaitForFirstConsumer
    ---
    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: [ "ReadWriteOnce" ]
                    storageClassName: alicloud-disk-topology-alltype
                    resources:
                      requests:
                        storage: 30Gi

    参数

    说明

    replicas

    本示例设置为2,表示创建2个Pod。

    volumeMounts.mountPath

    云盘在容器中挂载的位置。

    accessModes

    访问模式。

    ephemeral

    声明当前存储为临时存储。

    storageClassName

    本示例配置为alicloud-disk-topology-alltype,表示依次尝试使用cloud_essd、cloud_ssd、cloud_efficiency类型的云盘。

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

    kubectl create -f ephemeral-example.yaml
  3. 执行以下命令,查看已部署的Pod。

    kubectl get pod

    预期输出:

    NAME                                 READY   STATUS    RESTARTS   AGE
    ephemeral-example-65d6c5fb87-5jbjf   1/1     Running   0          4m55s
    ephemeral-example-65d6c5fb87-jgt8x   1/1     Running   0          4m55s
  4. 执行以下命令,查看PVC。

    kubectl get pvc

    预期输出:

    NAME                                                STATUS   VOLUME                   CAPACITY   ACCESS MODES   STORAGECLASS                     AGE
    ephemeral-example-65d6c5fb87-5jbjf-scratch-volume   Bound    d-2ze7cjui6henh7z61393   30Gi       RWO            alicloud-disk-topology-alltype   5m42s
    ephemeral-example-65d6c5fb87-jgt8x-scratch-volume   Bound    d-2zehi4gnz4btacaf8lh2   30Gi       RWO            alicloud-disk-topology-alltype   5m42s

验证PVC和PV会随着Pod的缩容而删除

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

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

    kubectl get pod

    预期输出:

    NAME                                 READY   STATUS        RESTARTS   AGE
    ephemeral-example-65d6c5fb87-5jbjf   1/1     Terminating   0          7m13s
    ephemeral-example-65d6c5fb87-jgt8x   1/1     Running       0          7m13s
  3. 执行以下命令,查看PVC的数量。

    kubectl get pvc

    预期输出:

    NAME                                                STATUS   VOLUME                   CAPACITY   ACCESS MODES   STORAGECLASS                     AGE
    ephemeral-example-65d6c5fb87-jgt8x-scratch-volume   Bound    d-2zehi4gnz4btacaf8lh2   30Gi       RWO            alicloud-disk-topology-alltype   8m1s

    预期输出表明,PVC随着Pod的缩容而被删除。

相关文档