LXC(Linux containers)的组成

LXC简介:

LXC是Linux containers的简称,是一种基于容器的操作系统层级的虚拟化技术。

LXC在资源管理方面依赖与Linux内核的cgroups子系统,cgroups子系统是Linux内核提供的一个基于进程组的资源管理的框架,可以为特定的进程组限定可以使用的资源。

LXC在隔离控制方面依赖于Linux内核的namespace特性,具体而言就是在clone时加入相应的flag(NEWNS NEWPID等等)。

LXC对比传统VM:

相比传统虚拟化,LXC有着高效的资源利用率。

LXC有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求。与虚拟化相比,这样既不需要指令级模拟,也不需要即时编译。容器可以在核心 CPU 本地运行指令,而不需要任何专门的解释机制。因此,LXC有着更好的执行效率

资源隔离之Cgroup:

Cgroup在LXC中扮演的角色是资源隔离。后面会专门讲解Cgroup。

Cgroup的控制用子系统划分。

Cgroup的子系统:

cpu — 这​​​个​​​子​​​系​​​统​​​可以限制CPU使用。​​​

memory — 这​​​个​​​子​​​系​​​统​​​设​​​定​​​ cgroup 中​​​任​​​务​​​使​​​用​​​的​​​内​​​存​​​限​​​制​​​,并​​​自​​​动​​​生​​​成​​​由​​​那​​​些​​​任​​​务​​​使​​​用​​​的​​​内​​​存​​​资​​​源​​​报​​​告​​​。​​​

cpuset — 这​​​个​​​子​​​系​​​统​​​为​​​ cgroup 中​​​的​​​任​​​务​​​分​​​配​​​独​​​立​​​ CPU(在​​​多​​​核​​​系​​​统​​​)和​​​内​​​存​​​节​​​点​​​。​​​

cpuacct — 这​​​个​​​子​​​系​​​统​​​自​​​动​​​生​​​成​​​ cgroup 中​​​任​​​务​​​所​​​使​​​用​​​的​​​ CPU 报​​​告​​​。​​​

blkio — 这​​​个​​​子​​​系​​​统​​​为​​​块​​​设​​​备​​​设​​​定​​​输​​​入​​​/输​​​出​​​限​​​制​​​,比​​​如​​​物​​​理​​​设​​​备​​​(磁​​​盘​​​,固​​​态​​​硬​​​盘​​​,USB 等​​​等​​​)。​​​

devices — 这​​​个​​​子​​​系​​​统​​​可​​​允​​​许​​​或​​​者​​​拒​​​绝​​​ cgroup 中​​​的​​​任​​​务​​​访​​​问​​​设​​​备​​​。​​​

 虚拟化之namespace(名字命名空间)

为何说namespace提供了虚拟化呢,因为正是它让在cgroup中的程序觉得在一个传统的物理机上运行。

Lnux现有的namespace有6种:uts, pid, ipc, mnt, net和user。通过clone函数的flag位设置。

Linux Namespaces机制本身就是为了实现container based virtualizaiton开发的。它提供了一套轻量级、高效率的系统资源隔离方案。

 clone函数的flag位:

CLONE_NEWPID:会创建一个新的PID Namespace,clone出来的新进程将成为Namespace里的第一个进程。一个PID Namespace为进程提供了一个独立的PID环境,PID Namespace内的PID将从1开始,在Namespace内调用fork,vfork或clone都将产生一个在该Namespace内独立的PID。但是在宿主机依然能看到原始的PID。

CLONE_NEWIPC:会创建一个新的IPC Namespace,clone出来的进程将成为Namespace里的第一个进程,通信空间的隔离。

同时指定CLONE_NEWPIDCLONE_NEWIPC,这样新创建的Namespace既是一个独立的PID空间又是一个独立的IPC空间。不同Namespace的进程彼此不可见,也不能互相通信,这样就实现进程间的隔离

CLONE_NEWNS:会创建一个新的mount Namespace。每个进程都存在于一个mount Namespace里面,mount Namespace为进程提供了一个文件层次视图。

CLONE_NEWNET:会创建一个新的Network Namespace。一个Network Namespace为进程提供了一个完全独立的网络协议栈的视图。

CLONE_NEWUTS:会创建一个新的UTS Namespace。UTS命名空间包含了运行内核的名称、版本、底层体系结构类型等信息。

以上所有clone flag都可以一起使用,为进程提供了一个独立的运行环境。LXC正是通过在clone时设定这些flag,为进程创建一个有独立PID,IPC,FS,Network,UTS空间的container。一个container就是一个虚拟的运行环境,对container里的进程是透明的,它会以为自己是直接在一个系统上运行的。

转载请注明:旅途@KryptosX » LXC(Linux containers)的组成

时间: 2024-08-30 18:56:05

LXC(Linux containers)的组成的相关文章

关于 Linux containers 配置文件简单介绍

1.Cgroup部分(所有Cgroup子系统的配置参数均可以通过lxc-cgroup 命令进行动态获得或者调整) LXC采用Cgroup来对容器进行资源管理,因此Cgroup的各个子系统均可以使用.实际上使用LXC之前,必须执行mount none -t cgroup /cgroup 挂载cgroup,或者采用echo "none /cgroup cgroup defaults 0 0" >> /etc/fstab让系统每次启动自动挂载Cgroup.这样以来Cgroup的所

Linux命名空间学习教程(一) UTS

本文讲的是Linux命名空间学习教程(一) UTS,[编者的话]Docker核心解决的问题是利用LXC来实现类似VM的功能,从而利用更加节省的硬件资源提供给用户更多的计算资源.而 LXC所实现的隔离性主要是来自内核的命名空间, 其中pid.net.ipc.mnt.uts 等命名空间将容器的进程.网络.消息.文件系统和hostname 隔离开.本文是Linux命名空间系列教程的第一篇,通过一个简单的例子介绍了Linux容器以及UTS命名空间.DockerOne在撸代码的基础上进行了校对和整理. 我

如何使用vagrant和docker在OSX下管理创建虚拟环境简明教程

 Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境.docker 是一个开源的应用容器引擎,开发者可以打包他们的应用到一个可移植的容器中,然后发布到 Linux 上,也可以实现虚拟化.     虚拟化: 其实就是因为云计算的催生的技术,目的是让运行在上面的应用程序觉得自己独占所有的资源.说白了就是资源管理/隔离和namspace的隔离. Hypervisor: 这是虚拟化的一种,也就是操作系统上面在运行一个或者多个操作系统,这个底层的操作系统系统就是hypervisor.它来

Docker简单使用

安装 照着官方文档 http://docs.docker.com/installation/ubuntulinux/ 做吧. 一般就是: 更新内核: $ sudo apt-get update $ sudo apt-get install linux-image-generic-lts-raring linux-headers-generic-lts-raring 重启系统. 添加软件源的 KEY: $ sudo apt-key adv --keyserver hkp://keyserver.u

OpenStack集群支持多虚拟化技术的实现方法

OpenStack 每个新版本都能实现一些需求和解决一些问题.其中被企业用户问的最多的一个问题是:同一个 OpenStack 集群能同时支持多种虚拟化技术么(Mutil-Hypervisor)? 答案当然是 Yes!在说明如何配置 Mutil-Hypervisor 前,我们需要了解什么是 Mutil-Hypervisor. Mutil-Hypervirsor 简介 对很多用户来说,仅采用一种虚拟化技术难以满足他们的需求,所以用户可能会同时采用其它虚拟化技术.比如:1.用户不想被某个虚拟化厂商绑定

马全一:Docker,Hadoop的竞争者来了!

CSDN"开源技术大会·2014" (OSTC·2014)将于2014年3月30日在北京丽亭华苑酒店召开.我们将陆续发布参会讲师的系列采访,谈谈他们将在本次活动分享的内容. 本期,我们采访的是Docker中文社区的发起人马全一. 关于Docker:Docker是DotCloud开源的.可以将任何应用包装在Linux Container中运行的工具,2013年3月发布首个版本.Docker可以自动化打包和部署任何应用.创建一个轻量级私有PaaS云.搭建开发测试环境.部署可扩展的Web应用

Docker LXC VS KVM in OpenStack

KVM and docker LXC Benchmarking with OpenStack from Boden Russell Understanding Docker What is Docker? Docker is an open platform for developing, shipping, and running applications. Docker is designed to deliver your applications faster. With Docker

Welcome Docker to SUSE Linux Enterprise Server【水平有限,中英对照,求纠错】

  原文:Welcome Docker to SUSE Linux Enterprise Server Lightweight virtualization is a hot topic these days. Also called "operating system-level virtualization," it allows you to run multiple applications or systems on one host without a hypervisor

Docker —— 用于统一开发和部署的轻量级 Linux 容器【转】

转自:http://www.oschina.net/translate/docker-lightweight-linux-containers-consistent-development-and-deployment 英文原文:Docker: Lightweight Linux Containers for Consistent Development and Deployment 使用Docker容器--轻量灵活的VM同类,来接管"依赖地狱".学习Docker是如何基于LXC技术,