阿里云首页 弹性容器实例

数据卷

容器中的文件在磁盘上是临时存放的,这给容器中运行的特殊应用程序带来一些问题。首先,当容器崩溃时,容器会以干净的状态重建,导致容器中的文件将会丢失。其次,当在一个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 #参数为固定值。
注意
  • 参数中增加Volume.1.EmptyDirVolume.Medium=Memory。

  • Memory的EmptyDir使用的是内存,注意内存大小,用超过了容易oom。

  • Memory的EmptyDir的大小为实例规格的50%,暂时无法更改。

  • 不使用Memory的EmptyDir不会占用系统内存。

  • 通过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
Volume.1.FlexVolume.Options={"volumeSize":"20", "performanceLevel":"PL1"}  #volumeSize指定云盘大小,取值范围20-500,单位为GiB;performanceLevel为云盘性能等级,可选值为:PL1、PL2、PL3。

说明

  • 动态创建的云盘默认随ECI实例一起创建,一起销毁。

  • 当volumeId为空,volumeSize字段为必填,当2个字段都有值,则volumeSize将被忽略。

  • 动态创建的云盘默认随ECI实例一起创建,一起销毁。

  • 动态创建的云盘默认采用:ESSD云盘,暂不支持指定云盘种类。

  • 单ECI实例最大支持挂载6块云盘作为数据卷。

  • 同一云盘同一时刻只能挂载在一个ECI/ECS实例中。

  • 如果给定的云盘未格式化,则系统会自动格式化为FsType指定的类型,目前仅支持ext3、ext4、xfs。

  • 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