容器中的文件在磁盘上是临时存放的,这给容器中运行的特殊应用程序带来一些问题。首先,当容器崩溃时,容器中的文件将会丢失——因为容器会以干净的状态重建。其次,当在一个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 :

- 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
- 通过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)
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", "performanceLevel":"PL1"} (volumeSize指定云盘大小,取值范围20-500,单位为GiB;performanceLevel为云盘性能等级,可选值为:PL1、PL2、PL3)
- 动态创建的云盘默认随ECI实例一起创建,一起销毁。
- 当volumeId为空,volumeSize字段为必填,当2个字段都有值,则volumeSize将被忽略。
- 动态创建的云盘默认随ECI实例一起创建,一起销毁。
- 动态创建的云盘默认采用:ESSD云盘,暂不支持指定云盘种类。
- 单ECI实例最大支持挂载6块云盘作为数据卷。
- 同一云盘同一时刻只能挂载在一个ECI/ECS实例中。
数据卷的挂载
创建了数据卷后,需要挂载到ECI实例中进行使用。
所有的数据卷挂载到容器目录后,都会覆盖原有的内容,尤其是EmptyDir会直接清空原内容,所以VolumeMount参数的挂载目录一定要慎重。
- 通过控制台挂载数据卷:
-
通过OpenAPI挂载数据卷:
Container.1.VolumeMount.1.Name=volumename(声明的Volume名称) Container.1.VolumeMount.1.MountPath=/volume(挂载的路径) Container.1.VolumeMount.1.ReadOnly=False
在文档使用中是否遇到以下问题
更多建议
匿名提交