在阿里云容器服务上使用OSS数据卷(Volume)
数据卷
Docker的特性,决定了容器本身是非持久化的,容器被删除后其中的数据也一并被删除了。Docker提供数据卷(Volume),通过挂载宿主机上的目录来实现持久存储。
但在集群环境中,宿主机上的数据卷有很大的局限性
- 容器在机器间迁移时,数据无法迁移
- 不同机器之间不能共享数据卷
为了解决这些问题,阿里云容器服务提供第三方数据卷,将各种云存储包装成数据卷,可以直接挂载在容器上,并在容器重启、迁移时自动重新挂载。目前支持ossfs和云盘两种存储。
开通数据卷功能
点击容器服务控制台左侧数据卷,展开数据卷功能。
开通数据卷需要满足两个条件:集群agen版本>=0.6;及集群里部署了acsvolumedriver应用。如果您的集群不满足条件,请按提示升级。
数据卷管理
该页面列出当前集群中所有的数据卷,包括本地和第三方数据卷,如下图所示。
对于本地卷,其卷名是node_name/volume_name。
对于第三方数据卷,点击“查看”会返回创建参数。
同一个第三方卷在每个节点上都会创建,便于容器在不同节点间迁移。可以通过“删除所有同名卷”按钮删除。
创建ossfs数据卷
ossfs是阿里云官方提供的基于FUSE的文件系统,项目主页见https://github.com/aliyun/ossfs。
ossfs数据卷将oss的bucket包装成数据卷,创建界面如下。
- 数据卷名:数据卷的id,在集群内唯一。
- AccessKeyId、AccessKeySecret:访问OSS所需的AK,可以从oss控制台获取。
- 访问域名:如果bucket跟ECS在同一个区(Region),选内网域名;否则选外网域名
- 文件缓存:如果需要在不同机器间同步同一个文件的修改(比如在A机器中修改文件,在B机器中读取修改后的内容),请关闭文件缓存。==但请注意,关闭文件缓存将导致ls文件夹变得很缓慢,尤其是同一个文件夹下文件比较多时==。没有上述需求时,请打开文件缓存,提高ls的速度。
云盘数据卷(暂未开放)
云盘数据卷将云盘包装成数据卷。因为云盘只能挂载到一台机器上,为了容器迁移时能带走数据,引用了云盘数据卷的服务,只能有一个容器。
- 可用区:由于云盘只能挂载到同一个可用区的ECS中,所以当某个容器引用了云盘数据卷时,只会被调度到该可用区的机器上。如果集群中没有该可用区的机器,容器将无法启动。
如何使用第三方数据卷
第三方数据卷使用方法跟本机数据卷相同。
- 通过镜像创建应用:在数据卷的“主机路径”处填写数据卷名,如下图所示
- 通过编排文件创建应用:在volumes一节中,第一个冒号前填写数据卷名
volumes: - o1:/aaa - /tmp:/bbb
常见错误
如果用数据卷名:镜像中已有目录
的方式使用第三方数据卷(如o1:/data
,而镜像中有/data目录),启动容器会失败,报类似chown /mnt/acs_mnt/ossfs/XXXX: input/output error
的错误。
产生这个错误的原因是,对于命名数据卷,docker会把镜像中已有的文件复制到数据卷中,并用chown设置相应的用户权限,而linux禁止对挂载点使用chown。
解决办法有两种:
- 升级docker到1.11或以上版本,升级agent到最新版本,在编排模板中指定nocopy选项
volumes: - o1:/data:nocopy - /tmp:/bbb
这样,docker会跳过复制数据的过程,也就不会产生chown错误。
- 如果必须复制数据,则可以不使用数据卷名,而使用挂载点路径,比如用
/mnt/acs_mnt/ossfs/XXXX:/data
。但这种方式绕开了volume driver,在机器重启时,无法保证ossfs挂载成功之后再启动用户容器,导致容器挂载了一个本地数据卷。为了避免这种情况,需要同时使用数据卷名和挂载点。其中,数据卷名对应的数据卷,只起到和volume driver同步的功能,并不实际使用。
volumes: - o1:/nouse - /mnt/acs_mnt/ossfs/XXXX:/data - /tmp:/bbb
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
启动第一个 KVM 虚机 - 每天5分钟玩转 OpenStack(4)
本节演示如何使用 virt-manager 启动 KVM 虚机。 首先通过命令 virt-manager 启动图形界面 # virt-manager 点上面的图标创建虚机 给虚机命名为 kvm1,这里选择从哪里启动虚机。如果是安装新的 OS,可以选择第一项。如果已经有安装好的镜像文件,选最后一项(如上图) 接下来需要告诉 virt-manager 镜像的位置。 点击 “Browser” 在我的系统中存放了一个 cirros-0.3.3-x86_64-disk.img 镜像文件 。cirros 是一个很小的 linux 镜像,非常适合测试用,大家可以到 http://download.cirros-cloud.net/ 下载,然后放到 /var/lib/libvirt/images/ 目录下,这是 KVM 默认查找镜像文件的地方。 为虚拟机分配 CPU 和内存 点击 “Forward”, 再确认一下信息,就可以启动虚机了。 virt-manager 会打开虚机 kvm1 的控制台窗口,可以看到启动情况 virt-manager 可以对虚机进行各种管理操作,界面直观友好,很容易上手。 同时...
- 下一篇
远程管理 KVM 虚机 - 每天5分钟玩转 OpenStack(5)
上一节我们通过 virt-manager 在本地主机上创建并管理 KVM 虚机。其实 virt-manager 也可以管理其他宿主机上的虚机。只需要简单的将宿主机添加进来 填入宿主机的相关信息,确定即可。 接下来,我们就可以像管理本地虚机一样去管理远程宿主机上的虚机了。 这里其实有一个要配置的地方。 因为 KVM(准确说是 Libvirt)默认不接受远程管理,需要按下面的内容配置被管理宿主机中的两个文件 /etc/default/libvirt-bin start_libvirtd="yes" libvirtd_opts="-d -l" /etc/libvirt/libvirtd.conf listen_tls = 0listen_tcp = 1unix_sock_group = "libvirtd"unix_sock_ro_perms = "0777"unix_sock_rw_perms = "0770"auth_unix_ro = "none"auth_unix_rw = "none"auth_tcp = "none" 然后重启 Libvirtd 服务就可以远程管理了。 servi...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2全家桶,快速入门学习开发网站教程
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8