注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

itoedr的it学苑

记录从IT文盲学到专家的历程

 
 
 

日志

 
 

Lxc:linux虚拟化技术  

2013-05-29 19:27:17|  分类: linux系统知识 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

概述

LXCLinux Container的简写。Linux Container容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。相当于C++中的NameSpace。容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求。与传统虚拟化技术相比,它的优势在于:

1)与宿主机使用同一个内核,性能损耗小;

2)不需要指令级模拟;

3)不需要即时(Just-in-time)编译;

4)容器可以在CPU核心的本地运行指令,不需要任何专门的解释机制;

5)避免了准虚拟化和系统调用替换中的复杂性;

6)轻量级隔离,在隔离的同时还提供共享机制,以实现容器与宿主机的资源共享。

总结:Linux Container是一种轻量级的虚拟化的手段。

Linux Container提供了在单一可控主机节点上支持多个相互隔离的server container同时执行的机制。Linux Container有点像chroot,提供了一个拥有自己进程和网络空间的虚拟环境,但又有别于虚拟机,因为lxc是一种操作系统层次上的资源的虚拟化。

LXC的实现

Sourceforge上有LXC这个开源项目。LXC项目本身只是一个为用户提供一个用户空间的工具集,用来使用和管理LXC容器。LXC真正的实现则是靠Linux内核的相关特性,LXC项目只是对此做了整合。基于容器的虚拟化技术起源于所谓的资源容器和安全容器。

LXC在资源管理方面依赖于Linux内核的cgroups子系统,cgroups子系统是Linux内核提供的一 个基于进程组的资源管理的框架,可以为特定的进程组限定可以使用的资源。LXC在隔离控制方面依赖于Linux内核的namespace特性,具体而言就 是在clone时加入相应的flagNEWNS NEWPID等等)。

lxc常见命令使用:

lxc-version 用于显示系统LXC的版本号(可以通过此命令判断系统是否安装了lxc

用法:lxc-version

例如:lxc-version

lxc-checkconfig 用于判断linux内核是否支持LXC

用法:lxc-checkconfig

例如:lxc-checkconfig

lxc-create用于创建一个容器

用法:lxc-create -n name [-f config_file]

-n 后面跟要创建的容器名字 例如:-n foo

-f 后面跟容器配置文件的路径

注:1.采用lxc-create创建的容器,在停止运行后,不会被销毁,要采用lxc-destroy命令才能销毁

2.容器命令空间是全局的,系统中不允许存在重名的容器,如果-n 后面跟一个已经存在的容器名,创建会失败

例如:lxc-create --n foo --f foo.conf

lxc-execute 用于在一个容器执行应用程序

用法: lxc-execute -n name [-f config_file] [ -s KEY=VAL ]command

-n 后面跟容器名字(容器名字用于管理容器)例如:-n foo

-f 后面跟容器配置文件的路径(如果没有配置文件,可以直接用-s指定配置选项,如果什么都没有,系统采用默认策略)例如:-f foo.conf

-s 后面跟配置键值对 例如:lxc.cgroup.cpu.shares=512

command 为要执行的命令 例如:/bin/bash

这个命令会mount /proc 并且会自动创建/销毁容器。

注:1.如果容器还不存在,lxc-execute会自动创建一个,容器停止运行后会被自动销毁

2.lxc-execute启动应用程序,配置优先级如下:

如果指定-f选项,那么之前创建容器(如果容器是已存在的)的配置文件不会被使用

如果指定-s选项,则在命令行中的配置键值对会覆盖配置文件(无论之前的还是-f指定的)相同配置

例如:lxc-execute --n foo --s lxc.cgroup.cpu.shares=512 /bin/bash

使用实际例子:

lxc-execute -n test /bin/bash

这个会启动一个lxc并给出类似的一个cmd窗口,网络是与操作系统共用的,这里好像仅仅是创建了一个命名空间

如果没有指定-f,默认的隔离将被使用,这个命令当你需要一个快速在一个隔离的环境中运行程序。在物理机上和 container中都会运行lxc-init,在宿主机上面,这个程序用于转发lxc-kill 信号到已经启动的程序中 ,在container中,这个程序的pid1,它会fork出要执行的命令(pid2)并执行。

lxc-start 用于在容器中执行给定命令

用法:lxc-start -n name [-f config_file] [-c console_file] [-d] [-s KEY=VAL]

[command]

-d 将容器当做守护进程执行

-f 后面跟配置文件

-c 指定一个文件作为容器console的输出,如果不指定,将输出到终端

-s 指定配置

如果没有指定命令,lxc-start 将要运行 /sbin/init

例如:lxc-start -n foo -f foo.conf -d /bin/bash

注:1.如果容器还不存在,lxc-start会自动创建一个,容器停止运行后会被自动销毁

2.lxc-start配置优先级与lxc-execute相同

3.lxc-start lxc.execute的异同:

lxc-start lxc-execute都可以在容器中启动进程,区别在于lxc-start直接创建进程,lxc-execute先创建lxc-init进程,然后在 lxc-initfork一个进程来执行。(关于第4点,lxc-init所占的是一个什么样的地位?)

The orphan process group and daemon are not supported by this command,

use the lxc-execute command instead

If no command is specified, lxc-start will use the default "/sbin/init"

command to run a system container.

4.lxc-start用于在容器启动systemlxc-execute用于在容器执行应用程序

lxc-kill 发送信号给容器中的第一个用户进程(容器内部进程号为2的进程)

用法:lxc-kil -n name SIGNUM

-n 后面跟容器名

SIGNUM 信号 (此参数可选,默认SIGKILL

例如:lxc-kill -n foo

lxc-stop 用于停止容器中所有的进程

用法:lxc-stop -n name

-n后面跟要停止的容器名

例如:lxc-stop --n foo

lxc-destroy 用于销毁容器

用法:lxc-destroy -n name

-n后面跟要停止的容器名

例如: lxc-destroy --n foo

lxc-cgroup 用于获取或调整与cgroup相关的参数

用法:lxc-cgroup -n name subsystem value

-n 后面跟要调整的容器名

例如: lxc-cgroup -n foo devices.list

lxc-cgroup -n foo cpuset.cpus "0,3"

lxc-info 用户获取一个容器的状态

用法:lxc-info -n name

-n后面跟操作的容器名

例如: lxc-info --n foo

注:容器的状态有:STARTING RUNNING STOPPING STOPPED ABORTING

lxc-monitor 监控一个容器状态的变换,当一个容器的状态变化时,此命令会在屏幕上打印出容器的状态

用法:lxc-monitor -n name

例如:lxc-monitor -n foo

lxc-ls 列出当前系统所有的容器

用法:lxc-ls

例如:lxc-ls

lxc-ps 列出特定容器中运行的进程

用法:lxc-ps

例如:lxc-ps -n foo

更多的命令介绍可以再man page获得。



  评论这张
 
阅读(106)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017