2013/11/1轻量虚拟化技术--docker实战分享•百度BAE•陈轶飞•2013-10.25纲要•一、轻量虚拟化技术•是什么?•涉及到哪些技术和知识?•使用领域•二、BAE与docker•docker是什么?•BAE为什么选择docker?•BAE是如何使用docker的?•三、docker的发展2013/11/1轻量虚拟化技术--是什么?•以Linux进程的视角来看•进程运行的时候,周边的环境和资源有哪些?•Linux内核•文件系统•网络系统•PID、UID、IPC等资源•内存、CPU、磁盘等资源•其它•每个进程的看到的周边环境都一样•所有进程共享这些资源2013/11/1轻量虚拟化技术--是什么?•技术发展过程中,产生了这样的需求•资源隔离:不同进程,希望有自己独立的周边环境•资源限制:限制某些进程所能使用的资源•能进一步对一组进程进行上述隔离和限制轻量虚拟化技术--是什么?•需求总结为:•为一组进程•分配独立的运行环境•文件系统•网络系统•PID、UID、UTS、mount、IPC空间•并能对它们能使用的资源从总体上进行限制•内存•CPU•网络流量•磁盘空间•磁盘读写频率•最好还能防止进程组之间互相干扰2013/11/1轻量虚拟化技术--是什么?•轻量虚拟化,就是用来实现上述需求的技术•满足上述限制条件的进程组,叫做“轻量虚拟机”,或者Container•wikipedia定义•轻量虚拟化技术--是什么?•感性的认识轻量虚拟化技术--相关技术和开源项目•底层技术:•namespace/cgroups/iptables/chroot/tc/quota•veth•unionfs(AUFS)•container管理•LXC/libvirt•安全相关•grsec/apparmor/SELinux•高级•docker/warden/Imctfy/openVZ轻量虚拟化技术--相关技术和开源项目namespace/cgroups/netfilter/tc/veth/quota/unionfsLXCdockerlibvirtwardenimctfygrsecapparmorSELinxcloudfoundry/heroku/dotcloud/appfog/openshiftopenvz轻量虚拟化技术--适用领域•在一个资源隔离、受限的环境中执行任务•将一个执行环境整体迁移、复制•运行不安全的代码BAE与docker--docker是什么?•轻量虚拟机的整体解决方案•接口清晰、使用简单•竞品对比•warden•lmctfyBAE与docker--BAE是什么?2013/11/1••百度面向开发者的PAAS平台•BAE2.0:基于沙盒技术的资源共享型PAAS平台•BAE3.0:基于Container技术的资源独享性PAAS平台BAE与docker--BAE为什么选择docker?•传统PAAS平台的困境•通过沙盒技术来实现资源隔离与资源限制•平台的开发和维护成本高•诸多限制,学习成本高•应用的迁移和开发成本高BAE与docker--BAE为什么选择docker?•Container的出现带来了光明•干掉沙盒;通过Container技术在外层进行资源隔离与限制•无任何语言层面的限制,开发者学习成本显著降低•支持新的编程语极其简单,平台开发和维护成本降低•业界趋势:新兴PAAS平台纷纷选择Container•cloudfoudry•openshift•heroku•dotcloud•appfog•activestateBAE与docker--BAE为什么选择docker?•BAE2.0是一种基于沙盒技术的PAAS•我们也深受传统PAAS平台的困扰•注意到Container技术,开始前期的调研和摸索BAE与docker--BAE为什么选择docker?•首先和公司内部虚拟化团队合作摸索了一套方案:•openstack+libvirt•功能上能满足基本需求•问题•没有考虑到最重要的一个需求:•需要频繁的创建和删除Container•要求创建和删除Container能在几秒内完成•实际创建Container要15秒以上,无法接受•对代码质量没有足够信心•缺少后续技术支持BAE与docker--BAE为什么选择docker?•cloudfoundry的warden•ruby•dea与warden耦合太紧•社区活跃度不够BAE与docker--BAE为什么选择docker?•一次偶然机会,与docker布道师JoromePetazzoni的交流•对docker的评估•功能上满足主要需求•强悍:虚拟机的快速创建和删除能力•强悍:增量式的镜像管理能力•代码简单易读,出问题有信心自己可以搞定•有dotcloud公司支持,社区活跃度高,看好它的未来BAE与docker--如何使用docker?•架构上的主要工作:•与我们自己的系统的整合2013/11/1BAE与docker--如何使用docker?•功能上的主要工作•Docker的资源隔离功能基本满足需求•要解决的主要问题•更好的资源限制•更全面的安全限制BAE与docker--如何使用docker?•技术上的一些判断和选择:•果断选择ubuntu系统•实现类似deang的agent模块;•合理的抽象,将docker作为“虚拟机管理”的一种backend实现;(一旦docker出现不可控的风险,我还可以切换到其它方案上)•解决宿主机对container的控制问题•刚开始使用ssh•后改为wshBAE与docker--如何使用docker?•功能完善:资源限制•内存•CPU•磁盘空间•磁盘读写•网络带宽•setrlimitBAE与docker--如何使用docker?•功能完善:安全限制•grsec:封堵内核漏洞•apparmor:对container内部的能力进行限制•LXC自身的安全设置•lxc.drop_capabilities•lxc.•严格的iptables规则•账号权限•用户代码仅能使用普通账号•root随机密码•禁止root登录•恶意进程扫描•网络访问日志记录BAE与docker--如何使用docker?•docker私有仓库,解决镜像管理问题BAE与docker--如何使用docker?•遇到的一些问题•dockerserver重启后,container挂掉•我们的patch已merge到主干•压力情况下的不稳定•ssh远程执行命令不稳定•并发情况下iptables偶尔会失败•删除container后会留下垃圾•垃圾检测和清除脚本•Dockerserver创建的线程过多docker的发展--活跃的社区•GithubGO语言类活跃度排名第一docker的发展--逐步繁荣的生态圈•CoreOS•Yandex--Cocaine•与redhat的合作•libvirt•SELinux•device-mappedfilesystem•最新版OpenStackHavana增加对docker的原生支持docker的发展--待解决的主要问题•安全•usernamespace来解决root权限问题•SELinux增强安全性•支持更多的Linux发行版•目前仅支持ubuntu•支持更多的架构•目前仅支持x86-64参考资料••••••••••••