全部产品
云市场

数据卷

更新时间:2019-12-23 15:50:29

容器中的文件在磁盘上是临时存放的,这给容器中运行的特殊应用程序带来一些问题。 首先,当容器崩溃时,容器中的文件将会丢失——因为容器会以干净的状态重建。 其次,当在一个 ECI 中同时运行多个容器时,常常需要在这些容器之间共享文件。 ECI 支持通过数据卷的方式来解决这两个问题。

目前 ECI 支持4种类型的数据卷:

  • ConfigFile
  • EmptyDir
  • NFS
  • FlexVolume

使用数据卷时,需要先声明具体的数据卷,然后挂载到 ECI 中。

数据卷的声明

ConfigFile

ConfigFile 提供了向 ECI 注入配置数据的方法

  • 通过控制台声明 ConfigFile(只需以明文形式填入配置数据,控制台会自动进行 Base64 编码): configfile
  • 通过 OpenAPI 声明 ConfigFile(注意,需要先将配置数据进行 Base64 编码):
    1. Volume.1.Name=configfiledemo
    2. Volume.1.Type=ConfigFileVolume(固定值)
    3. Volume.1.ConfigFileVolume.ConfigFileToPath.1.Content=bGl1bWk=
    4. Volume.1.ConfigFileVolume.ConfigFileToPath.1.Path=configpath

EmptyDir

EmptyDir 可以被同一个 ECI 中的所有容器访问,因此您可以使用 EmptyDir 在同一个 ECI 的不同容器之间共享数据。当 ECI 删除后,EmptyDir 上保存的数据也会一并删除。

  • 通过控制台声明 EmptyDir : emptydir
  • 通过 OpenAPI 声明 EmptyDir :
    1. Volume.1.Name=emptydirdemo
    2. Volume.1.Type=EmptyDirVolume(固定值)

NFS

NFS 数据卷能将 NFS (网络文件系统) 挂载到您的 ECI 中。 不像 EmptyDir 那样会在删除 ECI 的同时也会被删除,NFS 数据卷的内容在删除 ECI 时会被保存,卷只是被卸载掉了。 这意味着 NFS 数据卷可以被预先填充数据,并且这些数据可以在 ECI 之间“传递”

  • 需要先准备好 NFS
    • 推荐使用阿里云 NAS,可以前往NAS 控制台进行创建,并完成挂载点添加。ECI 和 NAS 需要在同一个 VPC 网络中nas
    • 使用其他 NFS 服务,需要 ECI 具备外网访问能力
  • 通过控制台声明 NFS : nfs
  • 通过 OpenAPI 声明 NFS :
    1. Volume.1.Name=nfsdemo
    2. Volume.1.Type=NFSVolume(固定值)
    3. Volume.1.NFSVolume.Path=/share
    4. Volume.1.NFSVolume.Server=3f9cd4a596-naw76.cn-shanghai.nas.aliyuncs.com
    5. Volume.1.NFSVolume.ReadOnly=False

FlexVolume

FlexVolume 是自 Kubernetes 1.2 版本以来一直存在的 out-of-tree 插件接口,通过 FlexVolume 可以自定义扩展存储驱动的方式。

目前 ECI 通过 alicloud/disk 存储驱动支持了云盘的使用,后续将会支持更多的驱动类型。

通过 FlexVolume 使用云盘

ECI 支持新建和使用已有云盘两种声明方式来使用云盘,并且只能声明使用一个云盘

新建:根据设置的云盘大小,跟随 ECI 实例的创建和销毁,动态的创建和销毁云盘,适用于运行期间对磁盘有较高 IO 要求的场景

使用已有云盘:选择已有的云盘,并且写入云盘的数据可以在 ECI 销毁时依然保留,适用于 MySQL、Redis 等场景

  • 通过控制台选择已有云盘: staticflex
  • 通过 OpenAPI 使用已有云盘:
    1. Volume.1.Name=flexvolumedemo
    2. Volume.1.Type=FlexVolume(固定值)
    3. Volume.1.FlexVolume.Driver=alicloud/disk(云盘的驱动)
    4. Volume.1.FlexVolume.FsType=ext4(支持ext3ext4xfs
    5. Volume.1.FlexVolume.Options={"volumeId":"d-bp1j17ifxfasvts3tf40"} (d-bp1j17ifxfasvts3tf40为已经存在的云盘实例id)
  • 通过控制台新建云盘: dynamicflex
  • 通过 OpenAPI 新建云盘:
    1. Volume.1.Name=flexvolumedemo
    2. Volume.1.Type=FlexVolume(固定值)
    3. Volume.1.FlexVolume.Driver=alicloud/disk(云盘的驱动)
    4. Volume.1.FlexVolume.FsType=ext4(支持ext3ext4xfs
    5. Volume.1.FlexVolume.Options={"volumeSize":"20"} volumeSize指定云盘大小,取值范围20-500,单位为GiB

数据卷的挂载

创建了数据卷后,需要挂载到 ECI 实例中进行使用。

所有的数据卷挂载到容器目录后,都会覆盖原有的内容,尤其是 EmptyDir 会直接清空原内容,所以 VolumeMount 参数的挂载目录一定要慎重。

  • 通过控制台挂载数据卷: mount
  • 通过 OpenAPI 挂载数据卷:
    1. Container.1.VolumeMount.1.Name=volumename(声明的Volume名称)
    2. Container.1.VolumeMount.1.MountPath=/volume(挂载的路径)
    3. Container.1.VolumeMount.1.ReadOnly=False