容器底层技术
田琪
容器底层技术
Agenda
• 容器系统整体架构
• 内核 Namespace 机制
• 内核 CGroup 机制
• 内核 Device Mapper 机制
• DM Thin Provision Target 应用
• Docker Registry 及镜像存储
• 关于 Go
容器系统整体架构
内核 Namespace 机制
• 提供进程级别的资源隔离
• 为进程提供不同的命名空间视图
• 无 hypervisor 层,区别于 KVM,Xen 等虚拟化技术
• 从 Kernel 版本引入 mnt namespace~ 引
入 user namespace 仍然持续发展中
Namespace 概念及当前支持的种类
• mnt (Mount points)
• pid (Processes)
• net (Network stack)
• ipc (System V IPC)
• uts (Hostname)
• user (UIDS)
Namespace 使用接口
• 创建新进程及 namespace
• 加入当前进程到新建 namespace 中
• 改变当前进程的 namespace
flags 取值及含义
Namespace 内核实现 - 初始状态
Namespace 内核实现 - after normal fork
Namespace 内核实现 - clone a new ns
Namespace 内核实现 - after setns on task
CGroups 资源管理
• 提供进程的资源管理功能
• 资源管理主要涉及内存 ,CPU,IO 等
• 不依赖于 Namespace ,可单独使用
• 管理功能通过 VFS 接口暴露
• CGroups 提供通用框架,各子系统负责实现
CGroups 文件系统
CGroups 框架实现
CGroups IO 限流子系统实现
CGroup IO 子系统存在的问题
• Buffer IO 无法准确控制
• 带宽控制只能 CFQ 调度器,不适合高速硬件
• 厂商 Flash 卡驱动很可能根本不走 CFQ
• 通用块层只提供限流策略,缺少弹性
• 混合存储或快照支持引入 DM 情况会更加复杂
• 内核通用块层的改写对现有 CGroup 机制的影响
内核 Device Mapper 机制
• DM 框架为上层应用提供了丰富的设备映射及 IO 策
略方面的支持
• LVM,flashcache,soft-raid 等均基于 DM 实现
• Docker 存储端实现之一也是 DM - thin provision
• 上层通过 dmsetup 工具或 libdevmapper 库使用
Device Mapper 原理
DM thin provision
• 由 thin-pool 及 thin 两个 dm target 共同组成
• thin-pool 管理整个资源池的分配, thin 设备及快照管理工作
• thin 向上提供虚拟设备供使用,数据块写时由 thin-pool 分配
• thin-pool 通过 btree 管理 thin 设备 {thin-devid, LBA} ->
{time,FBA} 关系
• 根据 thin 设备的最后一次 snapshot 时间与 time 比较判断是
否是 shared block
• 实际所有 thin 设备的数据都写入到 thin-pool 管理的 datadev
中, thin 设备只是虚拟抽象
DM thin provision
thin-provision 使用 - 创建 thin-pool
Docker 存储端的选择
• Docker 支持 Aufs,DM,Btrfs 等
• Aufs 没有进入主线内核 - which means never
• Btrfs 目前没有 production ready
• Docker 代码对 DM 的使用写死较多,需手工调整
• 由于 DM 基于设备层,对上层文件系统 layer Diff
无法直接支持, Docker 手工比对文件实现
• 不停容器的情况,理论上无法保障一致性
Docker registry 镜像存储
我们的镜像存储系统
关于 Go
blah~,blah~,blah~
小结
• 当前 Namespace 功能仍不完善,需要更多的隔离
• CGroup 资源配额在 IO 方面仍存在一些问题
• Docker 存储端仍需做一些选择或工作
• 选择 DM thin-provision 需要手工创建 thin-pool
• 基于 DM thin-provision 的不停容器的镜像生成可能存
在一致性问题
• Docker Registry Storage 需要选择开源或定制开发
谢谢
微博: @ 摇摆巴赫
微信: swingbach
Q & A
Slide 1
Slide 2
Slide 3
Slide 4
Slide 5
Slide 6
Slide 7
Slide 8
Slide 9
Slide 10
Slide 11
Slide 12
Slide 13
Slide 14
Slide 15
Slide 16
Slide 17
Slide 18
Slide 19
Slide 20
Slide 21
Slide 22
Slide 23
Slide 24
Slide 25
Slide 26
Slide 27
Slide 28