容器中的文件在磁盘上是临时存放的,这给容器中运行的特殊应用程序带来一些问题。 首先,当容器崩溃时,容器中的文件将会丢失——因为容器会以干净的状态重建。 其次,当在一个 ECI 中同时运行多个容器时,常常需要在这些容器之间共享文件。 ECI 支持通过数据卷的方式来解决这两个问题。
目前 ECI 支持4种类型的数据卷:
ConfigFile EmptyDir NFS FlexVolume 使用数据卷时,需要先声明具体的数据卷,然后挂载到 ECI 中。
数据卷的声明 ConfigFile ConfigFile 提供了向 ECI 注入配置数据的方法
通过控制台声明 ConfigFile(只需以明文形式填入配置数据,控制台会自动进行 Base64 编码): configfile 通过 OpenAPI 声明 ConfigFile(注意,需要先将配置数据进行 Base64 编码): Volume.1.Name=configfiledemo Volume.1.Type=ConfigFileVolume(固定值) Volume.1.ConfigFileVolume.ConfigFileToPath.1.Content=bGl1bWk= Volume.1.ConfigFileVolume.ConfigFileToPath.1.Path=configpath EmptyDir EmptyDir 可以被同一个 ECI 中的所有容器访问,因此您可以使用 EmptyDir 在同一个 ECI 的不同容器之间共享数据。当 ECI 删除后,EmptyDir 上保存的数据也会一并删除。
通过控制台声明 EmptyDir : emptydir 通过 OpenAPI 声明 EmptyDir : Volume.1.Name=emptydirdemo 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 : 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 FlexVolume FlexVolume 是自 Kubernetes 1.2 版本以来一直存在的 out-of-tree 插件接口,通过 FlexVolume 可以自定义扩展存储驱动的方式。
目前 ECI 通过 alicloud/disk 存储驱动支持了云盘的使用,后续将会支持更多的驱动类型。
通过 FlexVolume 使用云盘 ECI 支持新建和使用已有云盘两种声明方式来使用云盘,并且只能声明使用一个云盘
新建:根据设置的云盘大小,跟随 ECI 实例的创建和销毁,动态的创建和销毁云盘,适用于运行期间对磁盘有较高 IO 要求的场景
使用已有云盘:选择已有的云盘,并且写入云盘的数据可以在 ECI 销毁时依然保留,适用于 MySQL、Redis 等场景
通过控制台选择已有云盘: staticflex 通过 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) 通过控制台新建云盘: dynamicflex 通过 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 参数的挂载目录一定要慎重。
通过控制台挂载数据卷: mount 通过 OpenAPI 挂载数据卷: Container.1.VolumeMount.1.Name=volumename(声明的Volume名称) Container.1.VolumeMount.1.MountPath=/volume(挂载的路径) Container.1.VolumeMount.1.ReadOnly=False
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。