轻量虚拟化技术——docker实战分享

2015-10-09 11:28:00
先知
转贴
15645
摘要:轻量虚拟化技术——docker实战分享。来自百度BAE陈轶飞,2013.10.25。
轻量虚拟化技术-- docker实战分享
百度BAE,陈轶飞,2013.10.25。

纲要
一、轻量虚拟化技术
• 是什么?
• 涉及到哪些技术和知识?
• 使用领域
二、BAE与docker
•docker是什么?
•BAE为什么选择docker?
•BAE是如何使用docker的?
三、docker的发展

轻量虚拟化技术是什么?
• 以Linux进程的视角来看
• 进程运行的时候,周边的环境和资源有哪些?
• Linux内核
• 文件系统
• 网络系统
• PID、UID、IPC等资源
• 内存、CPU、磁盘等资源
• 其它
• 每个进程的看到的周边环境都一样
• 所有进程共享这些资源

• 技术发展过程中,产生了这样的需求
• 资源隔离:不同进程,希望有自己独立的周边环境
• 资源限制:限制某些进程所能使用的资源
• 能进一步对一组进程进行上述隔离和限制

• 需求总结为:
• 为一组进程
• 分配独立的运行环境
• 文件系统
• 网络系统
• PID、UID、UTS、mount、IPC空间
• 并能对它们能使用的资源从总体上进行限制
• 内存
• CPU
• 网络流量
• 磁盘空间
• 磁盘读写频率
• 最好还能防止进程组之间互相干扰

• 轻量虚拟化,就是用来实现上述需求的技术
• 满足上述限制条件的进程组,叫做“轻量虚拟 机”,或者 Container
• wikipedia 定义
• http://en.wikipedia.org/wiki/Operating_system- level_virtualizatio
• 感性的认识

轻量虚拟化技术--相关技术和开源项目
• 底层技术:
• namespace/cgroups/iptables/chroot/tc/quota
• veth
• union fs(AUFS)
• container管理
• LXC/libvirt
• 安全相关
• grsec/apparmor/SELinux
• 高级
• docker/warden/Imctfy/openVZ

轻量虚拟化技术--适用领域
• 在一个资源隔离、受限的环境中执行任务
• 将一个执行环境整体迁移、复制
• 运行不安全的代码

BAE与docker--docker是什么?
• 轻量虚拟机的整体解决方案
• 接口清晰、使用简单
• 竞品对比
• warden
• lmctfy

BAE与docker--BAE是什么?
• http://developer.baidu.com
• 百度面向开发者的PAAS平台
• BAE2.0:基于沙盒技术的资源共享型PAAS平台
• BAE3.0:基于Container技术的资源独享性PAAS平台

BAE与docker--BAE为什么选择?
• 传统PAAS平台的困境
• 通过沙盒技术来实现资源隔离与资源限制
• 平台的开发和维护成本高
• 诸多限制,学习成本高
• 应用的迁移和开发成本高

•Container的出现带来了光明
• 干掉沙盒;通过Container技术在外层进行资 源隔离与限制
• 无任何语言层面的限制,开发者学习成本显著降低
• 支持新的编程语极其简单,平台开发和维护成本降低
• 业界趋势:新兴PAAS平台纷纷选择Container
• cloudfoudry
• openshift
• heroku
• dotcloud
• appfog
• activestate

• BAE2.0是一种基于沙盒技术的PAAS
• 我们也深受传统PAAS平台的困扰
• 注意到Container技术,开始前期的调研和摸索

• 首先和公司内部虚拟化团队合作摸索了一套方案:
• openstack + libvirt
• 功能上能满足基本需求
• 问题
• 没有考虑到最重要的一个需求:
• 需要频繁的创建和删除Container
• 要求创建和删除Container能在几秒内完成
• 实际创建Container要15秒以上,无法接受
• 对代码质量没有足够信心
• 缺少后续技术支持
• cloudfoundry的warden
• ruby
• dea与warden耦合太紧
• 社区活跃度不够
• 一次偶然机会,与docker布道师 Jorome Petazzoni 的交流
• 对docker的评估
• 功能上满足主要需求
• 强悍:虚拟机的快速创建和删 除能力
• 强悍: 增量式的镜像管理能力
• 代码简单易读,出问题有信心己可以搞定
• 有dotcloud公司支持,社区活跃 度高,看好它的未来

BAE与docker--如何使用?
• 架构上的主要工作:
• 与我们自己的系统的整合
• 功能上的主要工作
• Docker的资源隔离功能基本满足需求
• 要解决的主要问题
• 更好的资源限制
• 更全面的安全限制
• 技术上的一些判断和选择:
• 果断选择ubuntu系统
• 实现类似deang的agent模块;
• 合理的抽象,将docker作为“虚拟机管理”的一种 backend实现;(一旦docker出现不可控的风险,我 还可以切换到其它方案上)
• 解决宿主机对container的控制问题
• 刚开始使用 ssh
• 后改为 wsh
• 功能完善:资源限制
• 内存
• CPU
• 磁盘空间
• 磁盘读写
• 网络带宽
•setrlimit

BAE与docker--如何使用docker?
• 功能完善:安全限制
• grsec:封堵内核漏洞
• apparmor:对container内部的能力进行限制
• LXC自身的安全设置
• lxc.drop_capabilities
• lxc.
• 严格的iptables规则
• 账号权限
• 用户代码仅能使用普通账号
• root 随机密码
• 禁止 root 登录
• 恶意进程扫描
• 网络访问日志记录

• docker私有仓库,解决镜像管理问题
• 遇到的一些问题
• docker server重启后, container挂掉
• 我们的patch 已merge到主干
• 压力情况下的不稳定
• ssh 远程执行命令不稳定
• 并发情况下iptables 偶尔会失败
• 删除container后会留下垃圾
• 垃圾检测和清除脚本
• Docker server创建的线程过多

docker的发展——活跃的社区
• Github GO语言类活跃度排名第一

docker的发展——逐步繁荣的生态圈
• CoreOS
• Yandex -- Cocaine
• 与redhat的合作
• libvirt
• SELinux
• device-mapped filesystem
• 最新版OpenStack Havana 增加对docker的原生支持

docker的发展——待解决的主要问题
• 安全
• user namespace来解决root权限问题
• SELinux增强安全性
• 支持更多的Linux发行版,目前仅支持 ubuntu
• 支持更多的架构,目前仅支持x86-64

参考资料
•http://www.infoq.com/articles/docker-containers
•http://en.wikipedia.org/wiki/Operating_system-level_virtualization
•http://en.wikipedia.org/wiki/LXC
•http://en.wikipedia.org/wiki/Cgroups
•http://en.wikipedia.org/wiki/Linux_Containers
•http://libvirt.org/
•http://linuxcontainers.org/
•https://wiki.ubuntu.com/LxcSecurity
•http://lwn.net/Articles/236038/
•http://openvz.org/Main_Page
•http://aufs.sourceforge.net/
•http://blog.docker.io/2013/08/containers-docker-how-secure-are-they/
发表评论
玖 减 零 =
评论通过审核后显示。
文章分类
联系我们
联系人: 王春生
Email: chunsheng@cnezsoft.com