对于一个通过iSCSI挂载磁盘到本地的应用,如果改成容器化部署,应当怎么实现高可用呢?

背景:传统文件服务类应用,目前的高可用方案是对磁盘进行备份,主服务挂了以后,将快照块存储通过iSCSI提供给备用节点,通过挂载磁盘读取磁盘的文件系统,起服务。

目前的痛点是,通过虚机挂iSCSI,需要维持一定的虚机数量,资源浪费了,如果从虚机镜像创建实例再挂载,时间太长。
如果改造成K8s,能够迅速创建容器,按需恢复快照

问题: 在保留磁盘快照备份能力的情况下(利用物理存储的性能和稳定性,保留原有的申请流程),如何跟K8s结合提供高可用的服务?iSCSI如何挂载到容器?

1回答

顾黄亮顾黄亮  技术总监 , 苏宁消费金融有限公司
lixud1314zhuhaiqiang赞同了此回答
对题主问题进行解析,目前有两个存储系统,先不考虑存储的双活机制,例如EMC 的VPlex,主备存储进行数据备份,具备存储级的切换条件。目前想在docker上挂载物理存储,多个容器之间共享数据。一般进行挂载共享存储的无外乎以下三种情况,1、 容器不再运行时,数据将不会持续存在,数据很难...显示全部

对题主问题进行解析,目前有两个存储系统,先不考虑存储的双活机制,例如EMC 的VPlex,主备存储进行数据备份,具备存储级的切换条件。目前想在docker上挂载物理存储,多个容器之间共享数据。
一般进行挂载共享存储的无外乎以下三种情况,1、 容器不再运行时,数据将不会持续存在,数据很难从容器中取出。2、无法在不同主机之间很好的进行数据迁移。3、数据写入容器的读写层需要内核提供联合文件系统,这会额外的降低性能。
docker一般有三种不同的方式将数据挂载到容器中:volume、bind mount、 tmpfs,其中最为广泛运用的是volume。1、 docker 默认在主机上会有一个特定的区域( /var/lib/docker/volumes/ Linux),该区域用来存放 volume。2、非 docker 进程不应该去修改该区域。3、 volume 可以通过 docker volume 进行管理,如创建、删除等操作。4、volume 在生成的时候如果不指定名称,便会随机生成。
举一个例子, ls / var /lib/docker/volumes ff664768bfe64e1a8cae4369dd4a2e1929362e29580735480290684e38c8f140 ffa4846b581c1a50a01e7a12a6342ad2aaa442701a35ae56ef2f0e5d7888b22c
需要关注的是, volume 在容器停止或删除的时候会继续存在,如需删除需要显示声明。

收起
 2020-06-16
浏览696

提问者

ericsono系统架构师, HT

问题状态

  • 发布时间:2020-06-16
  • 关注会员:2 人
  • 问题浏览:1510
  • 最近回答:2020-06-16