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

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

  • ConfigFile
  • EmptyDir
  • NFS
  • FlexVolume

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

控制台

  • ConfigFile

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

通过控制台声明ConfigFile(只需以明文形式填入配置数据,控制台会自动进行Base64编码):

  • EmptyDir

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

通过控制台声明EmptyDir:

  • NFS

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

说明 需要先准备好NFS,推荐使用阿里云NAS,可以前往NAS 控制台进行创建,并完成挂载点添加。ECI 和 NAS 需要在同一个 VPC 网络中。若需要使用其他 NFS 服务,需要 ECI 具备外网访问能力。

通过控制台声明 NFS :

  • FlexVolume

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

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

通过FlexVolume使用云盘

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

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

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

通过控制台选择已有云盘:

通过控制台新建云盘:

OpenAPI方式

  • 通过OpenAPI声明ConfigFile
Volume.1.Name=configfiledemo
Volume.1.Type=ConfigFileVolume(固定值)
Volume.1.ConfigFileVolume.ConfigFileToPath.1.Content=bGl1bWk=
Volume.1.ConfigFileVolume.ConfigFileToPath.1.Path=configpath
注意 需要先将配置数据进行Base64编码
  • 通过OpenAPI声明EmptyDir
Volume.1.Name=emptydirdemo
Volume.1.Type=EmptyDirVolume(固定值)
  • 通过 OpenAPI 声明NFS 。
Volume.1.Name=nfsdemo
Volume.1.Type=NFSVolume(固定值)
Volume.1.NFSVolume.Path=/share
Volume.1.NFSVolume.Server=3f9cd4a596-naw76.cn-shanghai.nas.aliyuncs.com
Volume.1.NFSVolume.ReadOnly=False
  • 通过 OpenAPI 使用已有云盘:
Volume.1.Name=flexvolumedemo
Volume.1.Type=FlexVolume(固定值)
Volume.1.FlexVolume.Driver=alicloud/disk(云盘的驱动)
Volume.1.FlexVolume.FsType=ext4(支持ext3、ext4、xfs)
Volume.1.FlexVolume.Options={"volumeId":"d-bp1j17ifxfasvts3tf40"} (d-bp1j17ifxfasvts3tf40为已经存在的云盘实例id)

通过 OpenAPI 新建云盘:

Volume.1.Name=flexvolumedemo
Volume.1.Type=FlexVolume(固定值)
Volume.1.FlexVolume.Driver=alicloud/disk(云盘的驱动)
Volume.1.FlexVolume.FsType=ext4(支持ext3、ext4、xfs)
Volume.1.FlexVolume.Options={"volumeSize":"20"} (volumeSize指定云盘大小,取值范围20-500,单位为GiB)

数据卷的挂载

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

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

  • 通过控制台挂载数据卷:
  • 通过OpenAPI挂载数据卷:

    Container.1.VolumeMount.1.Name=volumename(声明的Volume名称)
    Container.1.VolumeMount.1.MountPath=/volume(挂载的路径)
    Container.1.VolumeMount.1.ReadOnly=False