Cgroup maintainer李泽帆:解剖Linux内核容器技术

摘要:Cgroup和namespace等内核特性如何出现,在社区处于怎样的开发状况?Docker如火如荼,内核社区是否会因此加紧完善容器技术的隔离性安全性?华为Linux内核高级工程师李泽帆将在2015 Container技术峰会上详细解说。

2015年4月16-18日,由CSDN主办、CSDN专家顾问团支持的OpenCloud 2015大会将在北京国家会议中心拉开帷幕。为期三天的大会,以推进行业应用中的云计算核心技术发展为主旨,聚焦技术创新与应用实践,设置了“2015 OpenStack技术大会”、“2015 Spark技术峰会”、“2015 Container技术峰会”三大技术峰会及多场深度行业实战培训。

本次大会将邀请近40位国内外云计算技术领域顶尖专家与一线实践者,深入讨论OpenStack、Spark、Docker、Kubernetes等开源技术的最新进展,各个核心项目/组件的演进趋势,以及它们的最新业界应用。点击报名

在“2015 Container技术峰会”,我们请到了Linux内核高级工程师李泽帆担任演讲嘉宾,他将带来的分享主题为《Linux内核容器技术的历史、现状和展望》,介绍Docker的基石——Cgroup和namespace等Linux内核特性的发展历程,目前它们在社区处于怎样的开发状况,以及在目前Docker引发的热潮下,内核社区是否会从底层提供更完善的容器技术。

李泽帆认为,容器的优点在于以接近物理机的运行效率提供了虚拟化功能、能比虚拟机达到更高的实例密度、达到秒级的启动速度。Docker又加上了层级镜像的创新,使得软件的发布和部署非常便捷。因此容器/Docker有广泛的应用场景,应用时在软件架构上参考微服务架构。他同时也指出,Docker还不够成熟,存在网络功能薄弱(如跨主机的容器网络互连)、安全性(Daemon是一个单点故障)、运行传统业务困难(如CT业务)等挑战。李泽帆对Docker的未来很有信心,但目前,了解Docker的底层技术以及内核容器技术的发展趋势,包括了解Docker的局限性,更有利于我们扬长避短使用Docker,因此,他的分享非常值得期待。

李泽帆

Linux Contributor,华为Linux内核高级工程师

2007年开始从事Linux内核开发,一直活跃在内核开源社区,为内核累计贡献约800个Patch。在社区中担任Cgroup及cpuset的maintainer,同时也担任Linux 3.4版本maintainer。目前在华为从事内核、Docker相关工作。

对话李泽帆:

CSDN:首先请介绍下您自己,以及您在Container/Docker技术方面所做的工作。

李泽帆:我从2007年开始参与linux内核开发工作,在内核里贡献了大概800个Patch。我参与的第一个内核项目就是Cgroup,到了2009年,我开始在内核开源社区担任Cgroup的maintainer,到了2013年,由于前后两任cpuset的maintainer相继离开,我把这个活也揽了下来。Cgroup(包括cpuset)是容器技术的最重要组件之一。

除了开源社区的工作,我在华为负责Linux内核部门的技术工作。我们之前就有团队从事LXC的工作,因此Docker出现后,我们自然也就成立了Docker项目组。

CSDN:您所在的企业是如何使用Container/Docker技术的?为企业带来了哪些好处?

李泽帆:华为的产品线和业务线很长,我们有不少部门都在尝试或者考虑将Docker用起来。但是相比互联网公司可以快速的利用开源项目,让Docker满足企业领域和CT领域的商用要求,目前还有不少困难,特别是在CT领域。

CSDN:您认为Container/Docker技术最适用于哪些应用场景?

李泽帆:这要从容器的优势来看。容器的优点在于以接近物理机的运行效率提供了虚拟化功能、能比虚拟机达到更高的实例密度、达到秒级的启动速度。Docker又加上了层级镜像的创新,使得软件的发布和部署非常便捷。能用上这些优点的地方,自然就是Docker的使用场景了。

实际上这样的场景是非常多的,这也是Docker的生态发展的如此快速和繁荣的原因之一。我们看到有无数基于Docker的开源项目产生,包括CoreOS、Kubernetes、Deis等等,而现有的开源项目也都纷纷拥抱Docker,例如Openstack、Mesos、Cloud Foundry等等,我们也看到国内外各个云平台争先恐后的宣布支持Docker。

不过,对于企业来说,最容易用上Docker的场景,我认为还是用Docker来搭建私有云,以及把Docker用在持续集成平台上。

CSDN:企业在应用Container/Docker技术时,需要做哪些改变吗?企业如果想快速应用Docker应该如何去做?

李泽帆:刚才说过Docker的使用场景非常多,因此这个问题也就不能一概而论了。最理想的情况是遵循Docker的理念,即每个容器只运行一个进程,把Docker作为Application Container来使用,而非System Container,因此在软件架构上参考微服务架构。

另一方面,由于Docker还不够成熟,并且开源软件往往是满足不了所有企业的需求的,因此企业在实际应用Docker的时候,往往都需要做一定的定制,因此也就要求企业有熟悉Docker的开发人员。对于这样的定制,应该注意尽量不要改变、破坏Docker目前的接口,并且在代码上实现较好的解耦,以方便日后对Docker版本的升级。

CSDN:您所在的企业在应用Container/Docker技术时遇到了哪些问题?是如何解决的?

李泽帆:大家都遇到的问题我们也遇到了,例如跨主机的容器网络互连,由于Docker没有提供这样的能力,我们只能使用flannel之类的第三方方案。这样也还是有些缺点,例如容器因故障而重启后,网络又要重新配置。

另外更大的问题是,CT业务要在容器内运行,会遇到很多挑战,这方面我们还在探索中。

CSDN:作为当前最流行的Container技术,您认为Docker还有哪些方面需要改进?

李泽帆:Docker的网络功能太弱,最近Docker收购了SocketPlane,相信在这方面很快就有突破,个人预测在今年的DockerCon会宣布相关的进展,大家可以拭目以待。

Docker Daemon的安全性也是一个很大的问题,包括需要root权限才能运行,以及出现故障后重启会导致所有容器也重启,也就是Daemon是一个单点故障,这也是Docker被CoreOS诟病的其中一个原因。

当然,Docker还很年轻,因此有大大小小的各种问题,但相信以Docker目前的发展态势,这些问题都会得到解决。

CSDN:您在本次演讲中将分享哪些话题?

李泽帆:我是做底层开发的,并且是做开源开发的,所以这次我会给大家讲讲容器技术在内核社区的发展历程,以及在目前Docker引发的热潮下,内核社区是否会从底层提供更完善的容器技术。

CSDN:哪些听众最应该了解这些话题?您所分享的主题可以帮助听众解决哪些问题?

李泽帆:对Docker的底层技术感兴趣以及想了解内核容器技术的发展趋势的,都可以听听。这可以帮助听众了解容器技术提供了多大程度的隔离和安全,因此更好的了解Docker的局限性。



2015 Container技术峰会已经邀请Google Kubernetes核心开发人员来华,和国内用户分享Kubernetes的技术细节,探讨Container未来的发展方向,此外还有VMware、华为、红帽、美团、腾讯、云雀科技、数人科技、上海点融等公司Container/Docker技术实践者,也将同台分享Container/Docker及其相关项目的实战经验。

附:Container技术峰会全日程


“2015 OpenStack技术大会”、“2015 Spark技术峰会”、“2015 Container技术峰会” 4月17-18日在北京召开。日程全部公开 OpenCloud
2015
,懂行的人都在这里!更多讲师和日程信息请关注OpenCloud 2015介绍官网

时间: 2024-10-08 17:24:09

Cgroup maintainer李泽帆:解剖Linux内核容器技术的相关文章

20135201李辰希《Linux内核分析》第一周 计算机是如何工作的?

计算机是如何工作的 1冯诺依曼体系结构:即具有存储程序的计算机体系结构 目前大多数拥有计算和存储功能的设备(智能手机.平板.计算机等)其核心构造均为冯诺依曼体系结构 从硬件来看:CPU与内存通过主线连接,CPU上的IP(可能是16.32.64位)总指向内存的某一块区域:IP指向的CS(代码段)也在内存中:CPU总是执行IP指向的指令. 从软件来看:API(应用程序编程接口,与编程人员)与ABI(程序与CPU的借口界面) 是两个比较重要的软件接口 2. x86(32位)的寄存器中,低16位作为16

Linux内核调试技术——jprobe使用与实现

前一篇博文介绍了kprobes的原理与kprobe的使用与实现方式,本文介绍kprobes中的第二种探测技术jprobe,它基于kprobe实现,不能在函数的任意位置插入探测点,只能在函数的入口处探测,一般用于监测函数的入参值.本文首先通过一个简单的示例介绍jprobe的使用方式,然后通过源码详细分析jprobe的实现流程. 内核源码:Linux-4.1.x 实验环境:Fedora25(x86_64).树莓派1b 1.jprobe使用实例 使用jprobe探测函数的入参值,需要编写内核模块.同k

Linux内核调试技术——kretprobe使用与实现

摘自:https://blog.csdn.net/luckyapple1028/article/details/54782659前两篇博文介绍了kprobes探测技术中kprobe和jprobe的使用与实现.本文介绍kprobes中的最后一种探测技术kretprobe,它同样基于kprobe实现,可用于探测函数的返回值以及计算函数执行的耗时.本文首先通过一个简单的示例程序介绍kretprobe的使用方式,然后通过源码分析它是如何实现的. 内核源码:Linux-4.1.x 实验环境:Fedora2

20135201李辰希《Linux内核分析》第六周 进程的描述与创建

李辰希 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.进程的描述 操作系统的三大管理功能: 进程管理(最重要的) 内存管理 文件系统 为了管理进程,内核必须对每个进程进行清晰的描述,进程描述符提供了内核所需了解的进程信息. 进程控制块PCB task_struct: 进程状态 进程打开的文件 进程优先级信息 task_struct总体数据结构的抽象: tty:控制台 fs:文件系统

20135201李辰希 《Linux内核分析》第七周 可执行程序的装载

李辰希  原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.预处理.编译.链接和目标文件的格式 1.可执行程序是怎么得来的 编译链接的过程 1.预处理阶段 gcc -E -o XX.cpp XX.c -m32 XX.cpp是预处理文件 2.编译器生成汇编代码阶段 gcc -x cpp-output -S -o hello.s hello.cpp -m32 XX.s是汇编代码 3.汇编器

20135201李辰希 《Linux内核分析》第四周 扒开系统调用的“三层皮”

李辰希无转载 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.用户态.内核态和中断处理过程 1.我们与系统调用打交道是通过库函数的方式 2.一般现代CPU都有几种不同的指令执行级别 因为如果所有程序员写的代码都可以有特权指令的话,系统就会很容易崩溃. 3.区别: 在高级别的状态下,代码可以执行特权指令,访问任意的物理地址. 在相应的低级别执行状态下,代码的掌控范围会受到限制. Intel x86 CPU有四

20135201李辰希 《Linux内核分析》第八周 进程的切换和系统的一般执行过程

李辰希 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一. 进程切换的关键代码switch_to的分析 1.进程调度与进程调度的时机分析 进程分类 I/O-bound:等待I/O CPU-bound:大量占用CPU进行计算 2. 交互式进程(shell) 实时进程 批处理进程 进程调度策略 一组决定何时以何种方式选择进程的规则 Linux的调度基于分时和优先级策略: 进程根据优先级(系

20135201李辰希 《Linux内核分析》第五周 扒开系统调用的“三层皮”(下)

李辰希  原创作品转载请注明出处 <Linux内核分析> MOOC课程http://mooc.study.163.com/course/USTC-100002900 一.给MenusOS增加time和time-asm命令 1.操作步骤 进入实验楼 首先,强制删除当前的menu 克隆一个新的menu 进入menu之后,输入make rootfs,就可以自动编译 输入help,可以发现系统支持更多的命令: help version quit time time-asm 那么,time和time-a

20135201李辰希《Linux内核分析》第三次 构造一个简单的Linux系统OS

李辰希 无转载 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 第三周构造一个简单的Linux系统MenuOS 一.Linux内核源代码简介 三个法宝和两把宝剑: 三个法宝:存储程序计算机.函数调用堆栈.终断 操作系统的两把宝剑:中断上下文的切换(保存现场和恢复现场).进程上下文的切换 2.linux内核源代码简介 arch/x86目录下的代码是重点关注的 init目录:内核启动相关的代码基本都在init目录下