Docker容器是云数据中心常用的虚拟化技术,它给数据中心带来更灵活、更方便和更高效的管理能力。Docker容器在线迁移可以更好地保障数据中心服务质量,提供更好的数据中心运维能力;并且与传统虚拟机在线迁移机制不同,Docker容器在线迁移因为涉及诱因更多、更复杂,常年以来缺少成熟的技术与整体解决方案。针对Docker容器在线迁移方面的能力缺位问题,我们设计实现了面向数据中心的Docker容器在线迁移系统,从Docker容器镜像、运行时环境、管理上下文三个层面,解决了大规模容器系统在线迁移面临的镜像库房困局、迁移管理困难、宕机时间长等一系列技术困局。实验结果显示,该系统在高并发的Docker容器环境中疗效明显,容器在线迁移总时间降低87%、镜像迁移时间降低90%、服务宕机时间降低71%,可以同时满足数据中心对Docker容器在线迁移在功能上和性能上的需求,保障了容器云的灵活运维能力。该成果已在具有百万容器实例的阿里云容器平台布署试运行,相关技术已分别获中国和日本专利授权,其中德国专利从申请到授权仅用时半年。

该成果“Sledge:TowardsEfficientLiveMigrationofDockerContainers”发表在2020IEEE13thInternationalConferenceonCloudComputing(CLOUD)上。

论文链接:

docker迁移k8s_迁移docker存储目录_docker容器迁移流程

日本专利授权:“Methodforimplementationandoptimizationofonlinemigrationsystemfordockerscontainer”,专利号US1076897310768973BB1,授权时间2020年9月8日。

背景与动机

在云平台数据中心,服务的分布情况十分复杂,不同服务的负载也在不断变化,这些不确定性可能引起部份节点负载过重而影响该节点上的服务性能,而部份节点负载过轻造成资源得不到充分借助。为了尽可能节省云平台的系统资源同时保障服务质量linux培训机构,数据中心须要依照实时的负载情况进行合理的资源重分配。这其中就涉及到一项关键的技术docker容器迁移流程,即在线迁移技术。在传统以虚拟机为基础的云平台中,在线迁移技术可以在用户感知不到服务中断的前提下,将虚拟机从一个节点转移到另一个节点上运行,迁移前的虚拟机的实时状态可以在目的端节点完整地恢复。所以,在线迁移可以在不影响服务质量和用户体验的同时实现云平台上的负载均衡。而现在云平台正向容器云变革,且普遍采用Docker容器为底层支撑技术。Docker容器的在线迁移对于容器云来说是一项不可或缺的关键技术。

尽管目前容器的在线迁移技术己经有部份的研究成果,但数据中心Docker容器的在线迁移仍然存在好多问题。已有工作都只是针对Docker容器运行时来进行迁移,迁移以后即使在目的端恢复服务能力,但遗失容器的镜像分层特点及管理能力,这并不利于服务的迭代开发和持续集成,但是会对数据中心的管理及调度导致伤害。而另外一些工作则提出基于边沿服务器场景的Docker容器在线迁移技术,尽管可以保持Docker容器的镜像分层特点和管理能力,但它采用的中心化拉取镜像方法欠缺可扩充性docker容器迁移流程,不能适应于数据中心环境;据悉,它通过重载DockerDaemon的方法来恢复管理能力,这些方法带来了严重的宕机时间,显著增加了服务质量。

技术特色

我们的研究工作提出了更全面、更健全的技术解决方案,设计实现了面向数据中心的Docker容器在线迁移系统,从Docker容器镜像、运行时环境、管理上下文三个层面,解决了大规模容器系统在线迁移面临的镜像库房困局、迁移管理困难、宕机时间长等一系列技术困局。相关特色技术主要有三个方面:

迁移docker存储目录_docker容器迁移流程_docker迁移k8s

(1)镜像迁移技术。Docker镜像层之间具有特殊的层级关系,Docker容器的底层镜像均是只读层,而所有被改动的增量数据部份被保存在独立的读写层,如图1所示。镜像层使用联合挂载及写时拷贝技术为Docker容器提供数据访问的文件系统视图。依据该特性,我们通过复用底层只读镜像以尽可能避开冗余数据的传输,加速Docker容器在线迁移的过程;基于此,我们提出了轻量级容器库房机制,在源端基于镜像层之间的层级关系来快速建立可提供镜像拉取的轻量级容器库房。目的端可以通过该容器库房拉取相关的镜像数据,实现端到端的镜像迁移,因而显著提高Docker容器在线迁移的可扩充性;同时源端库房基于容器镜像层之间的层级关系可以防止冗余镜像层的传输。该技术促使Docker容器在线迁移不受限于中心镜像库房的网路带宽能力,愈发适应于数据中心环境。

docker容器迁移流程_迁移docker存储目录_docker迁移k8s

图1Docker镜像层的层级关系

迁移docker存储目录_docker容器迁移流程_docker迁移k8s

(2)管理上下文迁移。为了保持迁移前后Docker容器相关驱动信息的一致,必需要在源端完全关掉容器运行以后才会在目的端重启DockerDaemon,以加载迁移容器的相关信息。DockerDaemon的重启过程须要记入Docker容器在线迁移的宕机时间,所以导致迁移宕机风波长的问题。通过对Docker容器管理框架的剖析,我们发觉在DockerDaemon重启的初始化过程中有好多没有必要且历时的操作;为了尽可能缩短宕机时间,我们提出了一种Docker容器管理上下文的动态加载机制,该机制可以防止毋须要的初始化过程,将迁移容器的相关信息安全且完整地加载到目的端正在运行的DockerDaemon相关驱动中,且不影响目的端正在运行的容器,显著增加了Docker容器在线迁移的宕机时间。

(3)运行时迁移。使用CRIU冻结与恢复显存linux内存管理,迭代同步增量显存数据,设置迭代限制次数,避免迭代同步传输形成大量冗余数据,如图2所示,运行迁移还包括读写镜像层、数据卷、元数据等的迁移。

docker容器迁移流程_迁移docker存储目录_docker迁移k8s

docker容器迁移流程_迁移docker存储目录_docker迁移k8s

图2Docker运行时迭代同步过程

容器在线迁移可应用于系统维护、容错容灾、负载均衡和节能减排等场景,然而直至近日业界尚没有成熟的,适用于数据中心的Docker容器在线迁移技术和解决方案。阿里云通过详尽技术督查,选择了与我们实验室进行了交流与合作,在工程中测试并使用了我们设计提出的Docker容器在线迁移系统。阿里云对该系统给出了较高评价:(1)充分考虑了Docker容器特性,从Docker容器镜像、运行时环境和管理上下文三个方面进行了针对性的系统设计与优化,提供了数据中心环境下Docker容器在线迁移的首个完整解决方案;(2)具有良好的性能表现,相比于传统容器在线迁移技术,该系统可以降低87%的容器迁移时间和71%的容器宕机时间;(3)结合了数据中心Kubernetes生态环境,可有效降低Kubernetes系统中的容器副本数目,增加Kubernetes系统的资源开支。该Docker容器在线迁移系统及其核心技术为阿里云的云估算平台容器产品和服务提供了重要支撑。

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复