LXC简介及通过LXC在CentOS上构建单机集群

LXC介绍

linux container(LXC)就是一种操作系统级的虚拟化技术。是基于Linux操作系统的虚拟化技术,翻译为linux 容器。它可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。

容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求。与虚拟化相比,这样既不需要指令级模拟,也不需要即时编译。容器可以在核心 CPU 本地运行指令,而不需要任何专门的解释机制。此外,也避免了半虚拟化和系统调用替换中的复杂性。通过提供一种创建和进入容器的方式,操作系统让应用程序就像在独立的机器上运行一样,但又能共享很多底层的资源。例如,可以有效地共享公共文件(比如 glibc)的页缓存,因为所有容器都使用相同的内核,而且所有容器还常常共享相同的 libc 库(取决于容器配置)。这种共享常常可以扩展到目录中其他不需要写入内容的文件。

容器在提供隔离的同时,还通过共享这些资源节省开销,这意味着容器比真正的虚拟化的开销要小得多。Linux Container提供了在单一可控主机节点上支持多个相互隔离的server container同时执行,Linux Container有点像chroot,提供了一个拥有自己进程和网络空间的虚拟环境。LXC 通过利用内核的CGroup来提供用户空间的对象,用来保证资源的隔离和对于应用或者系统的资源控制,通过namespaces提供资源隔离。

LXC是一种不同于KVM的另类的虚拟化实现方案,容器有效地将由单个OS管理的资源(计算,存储,网络)划分到孤立的组中,与传统的虚拟化相比,这样不需要指令级模拟。避免了虚拟化中系统调用替换中的复杂性。容器是下列两个技术的结合,在chroot的基础上,使用namespace增强chroot环境的隔离性,使之成为有效的容器:

1)chroot,在linux系统中,根目录就是”/”,但使用chroot可以用任意指定的目录作根目录

2)namespace, 相当于单独的TCP/IP进程,用于网络资源的隔离

通过提供一种创建(创建容器就是将一个名称与一个配置文件关联,lxc-create-n name -f configfile)和进入容器的方式(ssh,VNC (GUI), VT: tty (text),VT:X(GUI),操作系统让应用就像在独立的机器上运行一样,但又能共享很多底层的资源。LXC配置文件的例子如下:

lxc.utsname = my_ssh_container
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br0
lxc.network.ipv4 = 10.0.2.16/24
lxc.network.name = eth0
lxc.mount = ./fstab
lxc.rootfs = ./rootfs

无论配置文件如何,用LXC工具启动的容器有自己的系统进程视图,以及自己的挂载树和可用的进程间通信(IPC)资源视图。除了这些以外,当一个容器启动时,配置中未提到的任何类型的资源都被认为是与主机共享。

通过LXC构建单机集群

LXC随Kernel-2.6.27发布,在Kernel-2.6.29提供完整功能。我所试验的系统是CentOS-6.0。在CentOS上试验LXC是很麻烦的,如果不是必须的话,还是建议在Ubuntu上试验和应用,都很方便。

1. 构建虚拟的根文件系统。虚拟的根文件系统是虚拟操作系统独立的根文件系统,与其他虚拟的根文件系统相隔离。我们采用拷贝宿主主机的文件系统来实现。

1)首先确定容器的根文件系统在宿主操作系统的文件系统中的位置。这里选择的是/lxc/${container_name},执行mkdir –p /lxc/${container_name},也可以放在其他目录比如/var/lxc/${container_name},都一样的。容器名称我这里选择的是cpt, container_name=cpt 因此,实际路径是/lxc/cpt。

2)直接拷贝宿主操作系统的根文件系统。先关闭selinux,否则拷贝/selinux目录时会报错。编辑/etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled. 然后重启。以centos6为例,centos minimal包安装后有如下目录:bin, cgroup, etc, lib, lost+found, mnt, proc ,sbin, srv, tmp, var, boot, dev ,home ,lib64 ,media, opt, root, selinux, sys, usr. 不拷贝sys,proc,dev目录,仅创建sys,proc, dev目录,因为这三个目录不存放在某个磁盘上,而是由核心在内存中产生。其余目录都拷贝过去,不拷贝容器根文件系统所在的目录/lxc.

2. 设置宿主操作系统

1)安装lxc用户态工具。包括gcc ,lxc-0.7.5以及依赖的软件包,创建目录:mkdir -p /usr/local/var/lib/lxc/ 用于存放lxc-create执行后,lxc生成的配置文件。

2)配置网桥。宿主主机和容器间通过bridge来通信,修改/etc/sysconfig/network-scripts/目录下的网卡配置文件。创建/etc/sysconfig/network-scripts/ifcfg-br0,设置相应的DEVICE,IPADDR等选项,修改/etc/sysconfig/network-scripts/ifcfg-eth0文件,去掉IPADDR等内容,设置BRIDGE=br0。然后重启网络/etc/init.d/network restart。具体脚本如下:

etc/sysconfig/network-scripts/ifcfg-br0:

DEVICE=br0
TYPE=Bridge
BOOTPROTO=static
BROADCAST=10.1.255.255
IPADDR=10.1.29.4
NETMASK=255.255.0.0
NETWORK=10.1.0.0
GATEWAY=10.1.0.254
ONBOOT=yes

/etc/sysconfig/network-scripts/ifcfg-eth1:

# Realtek Semiconductor Co., Ltd. RTL8101E/RTL8102E PCI Express Fast Ethernet controller
DEVICE=eth1
#BOOTPROTO=static
HWADDR=E0:CB:4E:B9:EB:77
#TYPE=Ethernet
#IPADDR=10.1.29.4
#NETMASK=255.255.0.0
#NETWORK=10.1.0.0
#GATEWAY=10.1.0.254
#USERCTL=no
#IPV6INIT=no
#PEERDNS=yes
ONBOOT=yes
BRIDGE=br0

3)检查宿主操作系统的/etc/fstab文件   确保宿主文件系统中已经挂载/cgroup,否则用lxc-start容器时,会报spawn错误。要在宿主系统的/etc/fstab中添加none  /cgroup cgroup defaults 0 0这一行。

4)撰写容器配置文件。需要设置容器名称,容器的网络类型,容器的ip地址,容器的虚拟根文件系统的路径等。

5)撰写容器挂载文件系统的配置文件。需要挂载/lxc/cpt/proc,/lxc/cpt/sys等目录,不能挂载{$rootfs}/var/lock/subsys,{$rootfs}/var/run,否则容器启动时,这两个目录会被隐藏,使容器启动时报错,但是这类错误不是重要错误,不会影响容器的主要功能使用。如果容器启动了nfs相关服务,需要挂载/lxc/cpt/var/lib/nfs/rpc_pipefs,挂载语句如下:sunrpc /lxc/cpt/var/lib/nfs/rpc_pipefs rpc_pipefs defaults 0 0。

6)创建容器的虚拟设备。因为容器非运行在实际的硬件上,所以需要创建虚拟设备,通过mknod命令在/lxc/cpt/dev/下创建console, pts, shm, tty等设备。例如:mknod -m 666 /lxc/cpt/dev/null c 1 3

7)其他系统设置(不是必须的)比如修改主机名,修改/etc/hosts等。

3. LXC的系统配置

1)首先切换到容器的虚拟根文件系统中。用chroot切换到容器的虚拟根文件系统中进行: chroot   /lxc/cpt /bin/bash.

2)清空容器的/etc/fstab文件。因为容器启动时,lxc-start会根据配置文件/lxc/fstab.cpt挂载。执行:rm  -f /etc/fstab; touch /etc/fstab。

3)删除容器虚拟文件系统网卡配置文件。lxc-start会根据配置文件/lxc/cpt.conf启动虚拟网卡。执行:rm  -f /etc/sysconfig/network-scripts/ifcfg-eth0。

4)修改容器系统启动配置文件和启动脚本。容器启动和实际操作系统启动还是有不少差别。很多语句不需要执行,对于centos,修改/etc/rc.d/rc.sysinit。一般是清除原文件,重新写,需要删除/var/run下后缀是pid的文件,以及/var/lock/subsys/*下的文件,清空/etc/mtab文件,语句如下:rm -f $(find /var/run -name '*pid'); rm -f /var/lock/subsys/*; rm -f /etc/mtab; touch /etc/mtab。

5)检查/etc/inittab。确保从level 3启动,语句如下: id:3:initdefault:。

6)设置容器启动时需要同时启动的服务用chkconfig命令开启和关闭相关服务。

7)修改主机名和root密码等信息。编辑/etc/sysconfig/network,修改HOSTNAME后的值为自己设定的容器的主机名。执行password命令,修改root密码。修改/etc/hosts文件,配置主机名和ip的对应关系。

8)配置容器完毕,exit退出。

4. 启动容器

1)创建。lxc-create  -n  cpt  -f  /lxc/cpt.conf。lxc-create一定要用-f参数指定配置文件,否则创建的容器的配置文件是空的(/usr/local/var/lxc/cpt/config为空)

2)启动。前台启动:lxc-start -n cpt。后台启动:lxc-start -n -d cpt。

3)停止。lxc-stop –n cpt。

分布式平台的架构与部署

通常的分布式平台都是由一个或者多个管理节点,一个或者多个计算节点构成,以三个节点为例,每个节点需要运行在独立的操作系统上。因此选择二个容器,再加上一个宿主节点,构成有三个节点的集群。创建普通用户,将分布式平台所需要的配置文件模板,库文件,可执行文件拷贝到相应的目录,修改配置,设置好权限,编写启动脚本,即可完成分布式平台的部署。

1. 基本配置步骤如下:

1)先以root身份登录,并创建一个ndsa组和ndsa用户

# groupadd ndsa
# useradd -m ndsa -g ndsa
2)切换到ndsa用户,将压缩包复制到根目录后解压缩,此压缩包包含分布式平台相关的配置文件,库文件,可执行文件。
# su - ndsa
ndsa@:~ > tar xvfz dist2010.tgz

3)修改平台相关配置,编写启动停止脚本。

2. 通过在容器的宿主主机的/etc/rc.local文件中设置相关的启动命令,可以实现启动虚拟机时,启动整个分布式平台,以及相关的管理程序。启动容器和启动分布式平台之间需要间隔几秒,因为容器的启动需要花费时间。

一些命令:

创建容器:lxc-create -n name -f configfile
列出容器: lxc-info -n name
显示容器中的进程:lxc-ps
启动系统容器,系统容器类似于虚拟机,但比虚拟机的隔离级别要低:lxc-start -n name init 
启动应用容器,应用容器只是创建一个隔离一个应用程序的单独的名称容间:lxc-execute -n name cmd
发信号到某个容器的所有进程 :lxc-kill -n name -s SIGNAL
暂停,相当于级容器的所有进程发SIGSTOP信号:lxc-freeze -n name
恢复: lxc-unfreeze -n name
停止容器,将杀死容器内的所有进程:lxc-stop -n name

转载于:https://my.oschina.net/renguijiayi/blog/159558

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: lxc是一种容器技术,它是Linux容器的一种实现。它的底层原理是利用Linux内核的各种特性和机制来实现容器化。具体而言,它使用Linux的cgroups(控制组)、命名空间等特性来隔离进程的各种资源,包括CPU、内存、磁盘IO等,从而实现了进程级别的隔离和资源控制。 从框架的角度来看,lxc采用了一种模块化的架构,将容器相关的功能模块化,每个模块负责不同的功能。这些模块包括容器的创建、启动、停止等管理模块,以及容器的网络、磁盘、内存等资源管理模块。通过这种模块化的设计,lxc能够更加灵活地进行容器的管理和调度。 在研究lxc底层原理和框架时,可以参考lxc的源代码和文档。lxc的源代码位于https://github.com/lxc/lxc,通过仔细阅读源代码可以了解lxc的实现原理和细节。此外,还可以参考lxc的文档,了解如何使用lxc以及lxc的各种配置选项和参数。 研究lxc底层原理和框架可以帮助我们更好地理解容器技术的工作原理,为容器的使用和开发提供更深入的理论依据。同时,通过研究lxc的底层原理和框架,还可以探索容器技术的未来发展方向,并为容器相关的研究和创新提供基础。 ### 回答2: LXC(Linux Containers)是一种用于操作系统级虚拟化的技术,可以在同一主机上运行多个相互隔离的Linux系统。LXC是基于Linux内核的cgroups和namespace功能实现的。cgroups(Control Groups)是用于资源限制和隔离的功能,可以对进程组进行资源的分配和控制;而namespace是一种隔离机制,可以使得每个LXC容器拥有自己独立的进程、网络、文件系统和用户空间等。 LXC底层原理主要包括三个关键部分:命名空间、资源限制和文件系统。 命名空间是LXC实现隔离的主要机制之一。通过使用不同的命名空间,LXC可以为每个容器创建独立的进程、网络和文件系统。这样,不同容器中的进程不会相互干扰,同时也提供了网络和文件系统的隔离性。 资源限制是用于控制容器中资源分配的重要机制。通过使用cgroups功能,LXC可以限制容器中的CPU、内存、磁盘IO和网络带宽等资源的使用。这样可以避免某个容器占用过多的资源导致其他容器受到影响。 文件系统是LXC中的另一个重要组成部分。LXC使用aufs(Another Union File System)或OverlayFS等文件系统来实现容器的文件系统隔离和共享。这样,每个容器都可以有自己独立的文件系统,并可以与主机及其他容器共享特定的目录。 关于LXC框架研究的PDF,可以从互联网上搜索相关论文或者技术文档,在其中寻找关于LXC底层原理和框架的详细介绍。这样的PDF文档可能包含有关LXC的进一步解释、具体实现方法、性能评估等方面的内容。通过研究这些文档,可以深入了解LXC的实现原理和框架设计,以便更好地使用和应用LXC技术。 ### 回答3: LXC是一种轻量级的容器技术,它是基于Linux内核的cgroups和命名空间特性实现的。LXC的底层原理主要包括两个方面:cgroups和命名空间。 cgroups是Linux内核的一个特性,它可以限制和监控进程的资源使用情况,包括CPU、内存、磁盘IO等。通过cgroups,LXC可以控制和分配容器中各个进程的资源使用,并且防止容器之间的资源争抢。 命名空间是Linux内核的另一个特性,它可以隔离进程的全局命名空间,包括PID、网络、文件系统等。通过命名空间,LXC可以为每个容器创建一个独立的虚拟环境,使得容器之间相互隔离,互不干扰。 在LXC的框架研究中,主要包括以下几个组件:容器运行时、容器配置文件、容器网络和存储。 容器运行时是LXC的核心组件,它负责创建和管理容器的生命周期,包括创建、启动、停止和销毁容器。它使用cgroups和命名空间等技术实现容器的隔离和资源管理。 容器配置文件是指LXC中的配置文件,它包含了容器的各项配置信息,如容器的名称、根文件系统的位置、网络设置等。通过配置文件,可以方便地管理和配置容器。 容器网络是指LXC中的网络部分,它可以为容器提供网络连接。LXC支持多种网络模式,如NAT、桥接等,可以根据需求选择合适的网络模式。 容器存储是指LXC中的数据存储部分,它可以为容器提供独立的存储空间。LXC支持使用文件系统或者块设备进行容器的存储,可以根据需求选择合适的存储方式。 总之,LXC是基于Linux内核的容器技术,通过cgroups和命名空间等特性实现容器的隔离和资源管理。在LXC的框架中,包括了容器运行时、容器配置文件、容器网络和存储等组件,通过这些组件可以方便地创建和管理容器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值