增加临时存储空间大小

ECI Pod(即ECI实例)默认提供30 GiB的免费的临时存储空间,如果该存储空间大小无法满足您的需求,您可以自定义增加临时存储空间大小。

背景信息

每个ECI实例默认提供30 GiB的临时存储空间(免费),如下图所示。

临时存储空间

重要

ECI实例启动所使用的容器镜像会占用该30 GiB空间。容器镜像需要占用的空间大小至少为容器镜像大小*2,具体大小视镜像的压缩率决定。

如果您的存储需求大于30 GiB,可以自定义增加临时存储空间大小。新增加的临时存储空间会按容量大小和使用时长收取费用。更多信息,请参见临时存储空间计费

配置说明

Kubernetes场景下,支持通过以下方式自定义增加临时存储空间大小:

    说明

    两种方式均可以设置临时存储空间大小,但是语义有所差异:

    • 方式一为limit语义,创建的临时存储空间大小是准确的。

    • 方式二为request语义,创建临时存储空间时,可能还需要考虑镜像缓存因素,即实际创建的临时存储空间大小可能和request声明的不一致。更多信息,请参见临时存储空间与镜像缓存的关系

    如果同时使用两种方式,则取两者配置的较大值生效。

方式一:添加Annotation

在ECI Pod添加k8s.aliyun.com/eci-extra-ephemeral-storage的Annotation可以为其增加临时存储空间大小,设置的值即为增加的临时存储空间大小。

重要
  • Annotation请添加在Pod的metadata下,例如:创建Deployment时,Annotation需添加在spec>template>metadata下。

  • 仅支持在创建ECI Pod时添加ECI相关Annotation来生效ECI功能,更新ECI Pod时添加或者修改ECI相关Annotation均不会生效。

方式二:设置容器的resource

在容器的resource中可以声明ephemeral-storage相关request,如果声明的ephemeral-storage大小不超30 GiB,则不会增加临时存储空间;如果超出了30 GiB,则超出的部分即为增加的临时存储空间大小。

配置示例

  1. 准备YAML文件。

    假设您要创建的ECI Pod需要增加20 GiB的临时存储空间,对应的YAML文件命名为extra-storage.yaml,YAML示例如下:

    • 示例一:添加Annotation

      apiVersion: v1
      kind: Pod
      metadata:
        name: test
        annotations:
          k8s.aliyun.com/eci-extra-ephemeral-storage: "20Gi"  # 自定义设置要增加的临时存储空间大小
      spec:
        containers:
        - name: nginx
          image: registry-vpc.cn-beijing.aliyuncs.com/eci_open/nginx:1.14.2
          imagePullPolicy: IfNotPresent
        restartPolicy: Always
    • 示例二:设置容器的resource

      apiVersion: v1
      kind: Pod
      metadata:
        name: test
      spec:
        containers:
        - name: nginx
          image: registry-vpc.cn-beijing.aliyuncs.com/eci_open/nginx:1.14.2
          imagePullPolicy: IfNotPresent
          resources: 
            requests: 
              ephemeral-storage: 50Gi   # 超出30 GiB的部分为增加的临时存储空间
        restartPolicy: Always
  2. 创建Pod。

    kubectl apply -f extra-storage.yaml
  3. 查看临时存储空间是否生效。

    • 查看增加的临时存储空间大小。

      kubectl describe pod test | grep k8s.aliyun.com/eci-extra-ephemeral-storage

      返回结果如下,已增加20 GiB的临时存储空间。

      k8s.aliyun.com/eci-extra-ephemeral-storage: 20Gi
    • 通过exec命令进入容器,然后执行df -h命令查看容器的文件系统分区是否扩容成功。

      kubectl exec -it test -- sh
      df -h

      返回结果如下,实际可用空间(overlay )为增加的20 GiB加上默认可用的30 GiB,共50 GiB。

      Filesystem      Size  Used Avail Use% Mounted on
      overlay          50G  2.1G   48G   5% /
      tmpfs            64M     0   64M   0% /dev
      tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
      /dev/vda4        50G  2.1G   48G   5% /etc/hosts
      shm              64M     0   64M   0% /dev/shm
      tmpfs           4.0G   12K  4.0G   1% /run/secrets/kubernetes.io/serviceaccount
      tmpfs           1.9G     0  1.9G   0% /proc/acpi
      tmpfs           1.9G     0  1.9G   0% /sys/firmware

临时存储空间与镜像缓存的关系

根据镜像缓存的创建方式的不同,生成的临时存储空间存在差异。

  • 自动创建的镜像缓存基于系统盘实现。创建ECI实例时,如果使用的镜像缓存为自动创建的,则临时存储空间会在系统盘。此时,系统盘分区(/dev/vda5)大小即为临时存储空间大小,如下图所示。

    临时存储空间-自动imc

  • 手动创建的镜像缓存基于数据盘实现。创建ECI实例时,如果使用的镜像缓存为手动创建的,则临时存储空间会在数据盘。此时,系统盘分区(/dev/vda5)大小保持默认的30 GiB,且不会被使用。如下图所示。

    临时存储空间-手动imc