阿里巴巴正式开源自研容器技术Pouch

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 阿里巴巴正式开源了基于Apache 2.0协议的容器技术Pouch。Pouch是一款轻量级的容器技术,拥有快速高效、可移植性高、资源占用少等特性,主要帮助阿里更快的做到内部业务的交付,同时提高超大规模下数据中心的物理资源利用率。

阿里巴巴正式开源自研容器技术 Pouch

11月19日上午,在《中国开源年会》现场,阿里巴巴正式开源了基于Apache 2.0协议的容器技术Pouch。Pouch是一款轻量级的容器技术,拥有快速高效、可移植性高、资源占用少等特性,主要帮助阿里更快的做到内部业务的交付,同时提高超大规模下数据中心的物理资源利用率。开源之后,Pouch成为一项普惠技术,人人都可以在GitHub上获取,GitHub项目地址:https://github.com/alibaba/pouch

image

Pouch的开源,是阿里看好容器技术的一个信号。时至今日,全球范围内,容器技术在大多数企业中落地,已然成为一种共识。如何做好容器的技术选型,如何让容器技术可控,相信是每一个企业必须考虑的问题。Pouch无疑使得容器生态再添利器,在全球巨头垄断的容器开源生态中,为中国技术赢得了一块阵地。

Pouch 技术现状

此次开源Pouch,相信行业中很多专家都会对阿里目前的容器技术感兴趣。到底阿里玩容器是一个侠之大者,还是后起之秀呢?以过去看未来,技术领域尤其如此,技术的沉淀与积累,大致可以看清一家公司的技术实力。

Pouch 演进

追溯Pouch的历史,我们会发现Pouch起源于2011年。当时,Linux内核之上的namespace、cgroup等技术开始成熟,LXC等工具也在同时期诞生不久。阿里巴巴作为一家技术公司,即基于LXC研发了容器技术t4,并在当时以产品形态给集团内部提供服务。此举被视为阿里对容器技术的第一次探索,也为阿里的容器技术积淀了最初的经验。随着时间的推移,两年后,Docker横空出世,其镜像技术层面,极大程度上解决了困扰行业多年的“软件封装”问题。镜像技术流行开来后,阿里没有理由不去融合这个给行业带来巨大价值的技术。于是,在2015年,t4在自身容器技术的基础上,逐渐吸收社区中的Docker镜像技术,慢慢演变,打磨为Pouch。

带有镜像创新的容器技术,似一阵飓风,所到之处,国内外无不叫好,阿里巴巴不外如是。2015年末始,阿里巴巴集团内部在基础设施层面也在悄然发生变化。原因很多,其中最简单的一条,相信大家也不难理解,阿里巴巴体量的互联网公司,背后必定有巨大的数据中心在支撑,业务的爆炸式增长,必定导致基础设施需求的增长,也就造成基础设施成本的大幅提高。容器的轻量级与资源消耗低,加上镜像的快速分发,迅速让阿里巴巴下定决心,在容器技术领域加大投入,帮助数据中心全面升级。

阿里容器规模

经过两年多的投入,阿里容器技术Pouch已经在集团基础技术中,扮演着极其重要的角色。2017年双11,巨额交易1682亿背后,Pouch在“超级工程”中做到了:

  • 100%的在线业务Pouch化
  • 容器规模达到百万级

回到阿里集团内部,Pouch的日常服务已经覆盖绝大部分的事业部,覆盖的业务场景包括:电商、广告、搜索等;覆盖技术栈包括:电商应用、数据库、大数据、流计算等;覆盖编程语言:Java、C++、NodeJS等。

Pouch 技术优势

阿里巴巴容器技术如此之广的应用范围,对行业来说实属一大幸事,因为阿里已经用事实说明:容器技术已经在大规模生产环境下得到验证。然而,由于Pouch源自阿里,而非社区,因此在容器效果、技术实现等方面,两套体系存在差异。换言之,Pouch存在不少独有的技术优势。

隔离性强

隔离性是企业走云化之路过程中,无法回避的一个技术难题。隔离性强,意味着技术具备了商用的初步条件;反之则几乎没有可能在业务线上铺开。哪怕是阿里巴巴这样的技术公司,实践容器技术伊始,安全问题都无法幸免。众所周知,行业中的容器方案大多基于Linux内核提供的cgroup和namespace来实现隔离,然后这样的轻量级方案存在弊端:

  • 容器间,容器与宿主间,共享同一个内核;
  • 内核实现的隔离资源,维度不足。

面对如此的内核现状,阿里巴巴采取了三个方面的工作,来解决容器的安全问题:

  • 用户态增强容器的隔离维度,比如网络带宽、磁盘使用量等;
  • 给内核提交patch,修复容器的资源可见性问题,cgroup方面的bug;
  • 实现基于Hypervisor的容器,通过创建新内核来实现容器隔离。

容器安全的研究,在行业中将会持续相当长时间。而阿里在开源Pouch中,将在原有的安全基础上,继续融合lxcfs等特性与社区共享。同时阿里巴巴也在计划开源“阿里内核”,将多年来阿里对Linux内核的增强回馈行业。

P2P 镜像分发

随着阿里业务爆炸式增长,以及2015年之后容器技术的迅速普及,阿里容器镜像的分发也同时成为亟待解决的问题。虽然,容器镜像已经帮助企业在应用文件复用等方面,相较传统方法做了很多优化,但是在数以万计的集群规模下,分发效率依然令人抓狂。举一个简单例子:如果数据中心中有10000台物理节点,每个节点同时向镜像仓库发起镜像下载,镜像仓库所在机器的网络压力,CPU压力可想而知。

基于以上场景,阿里巴巴镜像分发工具“蜻蜓”应运而生。蜻蜓是基于智能P2P技术的通用文件分发系统。解决了大规模文件分发场景下分发耗时、成功率低、带宽浪费等难题。大幅提升发布部署、数据预热、大规模容器镜像分发等业务能力。目前,“蜻蜓”和Pouch同时开源,项目地址为:https://github.com/alibaba/dragonfly 。Pouch与蜻蜓的使用架构图如下:

image

富容器技术

阿里巴巴集团内部囊括了各式各样的业务场景,几乎每种场景都对Pouch有着自己的要求。如果使用外界“单容器单进程”的方案,在业务部门推行容器化存在令人难以置信的阻力。阿里巴巴内部,基础技术起着巨大的支撑作用,需要每时每刻都更好的支撑业务的运行。当业务运行时,技术几乎很难做到让业务去做改变,反过来适配自己。因此,一种对应用开发、应用运维都没有侵入性的容器技术,才有可能大规模的迅速铺开。否则的话,容器化过程中,一方面得不到业务方的支持,另一方面也需要投入大量人力帮助业务方,非标准化的实现业务运维。

阿里深谙此道,内部的Pouch技术可以说对业务没有任何的侵入性,也正是因为这一点在集团内部做到100%容器化。这样的容器技术,被无数阿里人称为“富容器”。

“富容器”技术的实现,主要是为了在Linux内核上创建一个与虚拟机体验完全一致的容器。如此一来,比一般容器要功能强大,内部有完整的init进程,以及业务应用需要的任何服务,当然这也印证了Pouch为什么可以做到对应用没有“侵入性”。技术的实现过程中,Pouch需要将容器的执行入口定义为systemd,而在内核态,Pouch引入了cgroup namespace 这一最新的内核patch,满足systemd在富容器模式的隔离性。从企业运维流程来看,富容器同样优势明显。它可以在应用的Entrypoint启动之前做一些事情,比如统一要做一些安全相关的事情,运维相关的agent拉起。这些需要统一做的事情,倘若放到用户的启动脚本,或镜像中就对用户的应用诞生了侵入性,而富容器可以透明的处理掉这些事情。

内核兼容性

容器技术的井喷式发展,使得不少走在技术前沿的企业享受到技术红利。然后,“长尾效应”也注定技术演进存在漫长周期。Pouch的发展也在规模化进程中遇到相同问题。

但凡规模达到一定量,“摩尔定律”决定了数据中心会存有遗留资源,如何利用与处理这些物理资源,是一个大问题。阿里集团内部也是如此,不管是不同型号的机器,还是从2.6.32到3.10+的Linux内核,异构现象依然存在。倘若要使所有应用运行Pouch之中,Pouch就必须支持所有内核版本,而现有的容器技术支持的Linux内核都在3.10以上。不过技术层面万幸的是,对2.6.32等老版本内核而言,namespace的支持仅仅缺失user namespace;其他namespace以及常用的cgroup子系统均存在;但是/proc/self/ns等用来记录namespace的辅助文件当时还不存在,setns等系统调用也需要在高版本内核中才能支持。而阿里的技术策略是,通过一些其他的方法,来绕过某些系统调用,实现老版本内核的容器支持。

当然,从另一个角度而言,富容器技术也很大程度上,对老版本内核上的其他运维系统、监控系统、用户使用习惯等实现了适配,保障Pouch在内核兼容性方面的高可用性。

因此综合来看,在Pouch的技术优势之上,我们不难发现适用Pouch的应用场景:传统IT架构的的迅速容器化,企业大规模业务的部署,安全隔离要求高稳定性要求高的金融场景等。

Pouch架构

凭借差异化的技术优势,Pouch在阿里巴巴大规模的应用场景下已经得到很好的验证。然而,不得不说的是:目前阿里巴巴内部的Pouch与当前开源版本依然存在一定的差异。

虽然优势明显,但是如果把内部的Pouch直接开源,这几乎是一件不可能的事。多年的发展,内部Pouch在服务业务的同时,存在与阿里内部基础设施、业务场景耦合的情况。耦合的内容,对于行业来说通用性并不强,同时涉及一些其他问题。因此,Pouch开源过程中,第一要务即解耦内部依赖,把最核心的、对社区同样有巨大价值的部分开源出来。同时,阿里希望在开源的最开始,即与社区站在一起,共建Pouch的开源社区。随后,以开源版本的Pouch逐渐替换阿里巴巴集团内部的Pouch,最终达成Pouch内外一致的目标。当然,在这过程中,内部Pouch的解耦工作,以及插件化演进工作同样重要。而在Pouch的开源计划中,明年3月底会是一个重要的时间点,彼时Pouch的1.0版本将发布。

从计划开源的第一刻开始,Pouch在生态中的架构图就设计如下:

image

Pouch的生态架构可以从两个方面来看:第一,如何对接容器编排系统;第二,如何加强容器运行时。

容器编排系统的支持,是Pouch开源计划的重要板块。因此,设计之初,Pouch就希望自身可以原生支持Kubernetes等编排系统。为实现这点,Pouch在行业中率先支持container 1.0.0。目前行业中的容器方案containerd主要停留在0.2.3版本,新版本的安全等功能还无法使用,而Pouch已经是第一个吃螃蟹的人。当前Docker依然是Kubernetes体系中较火的容器引擎方案,而Kubernetes在runtime层面的战略计划为使用cri-containerd降低自身与商业产品的耦合度,而走兼容社区方案的道路,比如cri-containerd以及containerd社区版。另外,需要额外提及的是,内部的Pouch是阿里巴巴调度系统Sigma的重要组成部分,同时支撑着“混部”工程的实现。Pouch开源路线中,同样会以支持“混部”为目标。未来,Sigma的调度(scheduling)以及混部(co-location)能力有望服务行业。

生态方面,Pouch立足开放;容器运行时方面,Pouch主张“丰富”与“安全”。runC的支持,可谓顺其自然。runV的支持,则表现出了和生态的差异性。虽然docker默认支持runV,然而在docker的API中并非做到对“容器”与“虚拟机”的兼容,从而Docker并非是一个统一的管理入口。而据我们所知,现有企业中仍有众多存量虚拟机的场景,因此,在迎接容器时代时,如何通过统一的运维入口,同时管理容器和虚拟机,势必会是“虚拟机迈向容器”这个变迁过渡期中,企业最为关心的方案之一。Pouch的开源形态,很好的覆盖了这一场景。runlxc是阿里巴巴自研的lxc容器运行时,Pouch对其的支持同时也意味着runlxc会在不久后开源,覆盖企业内部拥有大量低版本Linux内核的场景。

Pouch对接生态的架构如下,而Pouch内部自身的架构可参考下图:

image

和传统的容器引擎方案相似,Pouch也呈现出C/S的软件架构。命令行CLI层面,可以同时支持Pouch CLI以及Docker CLI。对接容器runtime,Pouch内部通过container client通过gRPC调用containerd。Pouch Daemon的内部采取组件化的设计理念,抽离出相应的System Manager、Container Manager、Image Manager、Network Manager、Volume Manager提供统一化的对象管理方案。

写在最后

如今Pouch的开源,意味着阿里积累的容器技术将走出阿里,面向行业。而Pouch的技术优势,决定了其自身会以一个差异化的容器解决方案,供用户选择。
企业在走云化之路,拥抱云原生(Cloud Native)时,Pouch致力于成为一款强有力的软件,帮助企业的数字化转型做到最稳定的支持。

Pouch目前已经在GitHub上开源,GitHub地址为: https://github.com/alibaba/pouch ,欢迎任何形式的开源参与。

相关实践学习
通过workbench远程登录ECS,快速搭建Docker环境
本教程指导用户体验通过workbench远程登录ECS,完成搭建Docker环境的快速搭建,并使用Docker部署一个Nginx服务。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
1月前
|
Java Go 开发者
Docker容器技术简介及其与Go语言的结合点
【2月更文挑战第23天】本文首先概述了Docker容器技术的核心概念和优势,接着探讨了Go语言与Docker容器技术的结合点。通过阐述Docker的轻量级、可移植性和版本控制等特性,以及Go语言在容器化应用中的优势,本文旨在说明两者结合能够实现更高效、灵活的应用开发和部署。
|
1月前
|
Kubernetes 开发者 Docker
基于容器技术的微服务架构
基于容器技术的微服务架构
33 0
|
8天前
|
运维 Kubernetes Devops
构建高效自动化运维体系:DevOps与容器技术融合实践
【4月更文挑战第15天】 在当今快速发展的信息技术时代,传统的IT运维模式已难以满足业务敏捷性的需求。本文旨在探讨如何通过整合DevOps理念和容器技术来构建一个高效的自动化运维体系。文章将详细阐述DevOps的核心原则、容器技术的基础知识,以及两者结合的优势。此外,文中还将分享一系列实践经验,包括持续集成/持续部署(CI/CD)流程的搭建、微服务架构的应用,以及监控和日志管理策略的优化,以期帮助企业实现快速、可靠且安全的软件交付过程。
|
25天前
|
Kubernetes API 调度
总结归纳Kubernetes | 一站式速查知识,助您轻松驾驭容器编排技术(水平扩展控制)
总结归纳Kubernetes | 一站式速查知识,助您轻松驾驭容器编排技术(水平扩展控制)
49 0
|
1月前
|
运维 监控 Devops
构建高效自动化运维体系:基于容器技术的持续集成与持续部署实践
在数字化转型的浪潮中,企业的IT基础设施和软件交付模式正经历着深刻的变革。传统的运维方式已难以满足快速迭代、灵活扩展的现代业务需求。本文将探讨如何通过容器技术实现高效的自动化运维体系,重点分析持续集成(CI)与持续部署(CD)的实践方法及其对企业运维效率的影响。通过引入微服务架构、容器编排、DevOps文化等概念,我们旨在为读者提供一套全面的自动化运维解决方案,以支持业务的敏捷性和可扩展性。
|
1月前
|
边缘计算 Kubernetes 负载均衡
容器编排技术在云计算中的应用
随着云计算技术的飞速发展,容器编排技术作为一种重要的部署和管理工具,正在逐渐成为云计算领域的热门话题。本文将介绍容器编排技术在云计算中的应用,探讨其在提高应用程序部署效率、资源利用率以及系统可靠性方面的优势,并分析其未来发展趋势。
|
1月前
|
Kubernetes 云计算 开发者
云计算中的容器化技术:Docker与Kubernetes的实践
云计算中的容器化技术:Docker与Kubernetes的实践
93 0
|
1月前
|
运维 API Docker
深入浅出:微服务架构与容器化技术的完美融合
【2月更文挑战第13天】 在现代软件开发领域,微服务架构和容器化技术已成为推动企业快速发展的两大核心力量。本文将从微服务的基本概念出发,深入探讨其与容器化技术结合的必然性与优势,进而分析如何在实践中有效地实现二者的完美融合。通过对微服务架构的细致解析及容器化技术的应用展示,旨在为读者提供一种全新的视角,理解并掌握这一前沿技术趋势,以指导实际工作中的技术选择与架构设计。
|
2月前
|
运维 Java Linux
深入解析:使用Docker容器化技术提升Java应用的部署效率
在快速迭代的软件开发周期中,如何保证应用的快速、一致和可靠部署成为了开发团队需要面对的重大挑战。本文将探讨如何利用Docker容器化技术,结合Java应用,实现高效、一致的部署流程。我们将从Docker的基本概念出发,详细介绍将Java应用容器化的步骤,包括创建Dockerfile、构建镜像以及运行容器等关键环节,并通过示例代码加以说明。此外,本文还将讨论在使用Docker部署Java应用时可能遇到的常见问题及其解决策略,旨在为读者提供一种提升部署效率、优化开发流程的有效方法。
303 2
|
2月前
|
虚拟化 开发者 Docker
深入浅出:利用Docker容器化技术加速Web开发流程
在本篇文章中,我们将探讨Docker容器化技术如何为Web开发带来革命性的效率提升。通过具体案例和实操示范,我们不仅会介绍Docker的基本概念和工作原理,还将深入分析如何利用Docker容器化技术简化开发环境的搭建、提高应用的可移植性以及加快部署速度。本文旨在为读者提供一种全新的视角,理解并实践如何通过Docker优化现代Web开发流程,无论是对于个人开发者还是团队项目,都将带来前所未有的便捷和效率。
29 0