我试图设置一个服务器,我将运行多个应用程序。 大多是内部的,但也可以是像Redmine这样的开源项目。 他们都将是在无头浏览器上运行的Rails / Ruby应用程序/testing脚本。 本质上,我试图在内部设置一个类似heroku的环境,并希望在这些正在运行的进程之间进行某种进程隔离。 我第一次偶然发现了chroot监狱,然后学习了LXC。 LXC似乎提供了一个更好的控制平原chroot监狱。 我有一个nginx前端,我想在孤立的容器中运行Web服务器应用程序进程(thin / mongrel / webrick)。 通常我们只需从本地IP地址开始这些进程,并为它们提供nginx代理。 什么是最好的方法来完成这个工作? 人们是否为容器设置了静态桥接IP,并让nginx指向它? 如何确保运行在容器中的web服务器只能在外部访问? 关于LXC的文档似乎有点稀疏。 指点一些很好的教程或HOWTOs将不胜感激。 我的目标部署环境是一个Lucid 64位框。 PS我不是一个Linux大师。 所以,温柔。
我试图构build一个运行短期(CI和testing版本)的软件组件的系统,根据我的要求,每个系统都必须在私有主机上运行。 我将这个定义也纳入了paravirtualsation选项,因为它似乎会为我节省很多头痛。 我正在Mac上工作,所以几乎所有的技术都已经出来了, libvirt和quemu等等都不适合我。 不过,我正在计划部署到Debian; 所以在Debian上运行的任何东西都回来了,只要我可以脚本configuration主机以及它的来宾域。 我希望的设置是,我可以用来引导一个Debian安装程序,这意味着在启动时,机器会自动configuration(厨师,木偶,巴布什卡,不介意,真的) – 部分configuration应该build立一个可用于启动容器的模板rootfs。 容器本身也需要configuration,所以当容器出现时,它知道需要做什么工作,可以完成工作,然后退出。 总之,这是我需要的工作stream程: 启动一台机器(虚拟或其他),并准备好工作。 这个工作应该由厨师/ puppet / babushka / etc安装的脚本来完成 当工作进入时,应该开始一个虚拟机来完成这项工作。 虚拟机应该完成这些工作,退出并将其资源释放给父母/主机。 (重要的是,这可以在合理的硬件上扩展到至less数百个虚拟机) 我已经到了一个地步,我已经尝试了以下内容,并放弃它们,原因如下: 对于主机 使用Instalinux(LinuxCOE支持)的Pre-seed Debian微型ISO映像( 坏的: 根本没有工作(“找不到内核模块”)(因为Instalinux映像与FTP库不同步,显然这个解决scheme非常脆弱,它也不允许有太多的安装后的范围,并将已知的SSH密钥,主机密钥等放在机器上,似乎像火和忘了,最后我会有一个运行的机器,但没有访问它 。) Pre-seed Debian netinst ISO( Bad : 与上面相同的问题,除了至less安装通常会完成,因为ISO和FTP存储库之间没有内核不一致,安装后的范围仍然有限 好 : 绝对可靠和可重复的,很容易扔在任何虚拟技术堆栈在Mac上,或裸机上,可以在任何地方工作,但我不能后安装它足够 ) build立rootfs的各种方法,并将其编译为可引导的硬盘映像( 不好 : 我能做的工作很脆弱,难以安装到真机上,而且是一个复杂的构build过程。 我可以得到它的工作,这似乎提供了预先configuration的机器,以ssh键,主机密钥,主机名,从Git安装的软件给定的规范的最大范围和其他任何,但问题是如何打包它分发,或如何脚本的娱乐。 ) 我真的不确定用什么技术将虚拟机从无到有,运行有用的系统。 似乎有三个步骤给我a)操作系统,b)系统configuration(用户等),然后c)文件系统的变化。 对于客人(虚拟)机器: 很多东西,大多数我认为这里的答案是使用debootstrap创build的只读rootfs,以及包含要为此特定实例(作业清单)完成的工作的LXC容器上的特殊分区。 插入所有关于构build操作系统,启动,创build用户,从git检出软件以及开展工作的所有常见警告。 我真的不确定要达到什么样的工具,好像这个问题应该很好的解决。 但是我不知道从哪里开始。 大多数人似乎build议主机应该select一种虚拟化技术,启动一台机器到一个工作状态,然后快照(libvirt似乎是这方面的合乎逻辑的最爱)。 使用快照启动任何后续安装以进行testing或生产。 对于来宾机器,lxc似乎提供了最简单的select,除了背景容器,并且稍后通过控制台连接到现有的所有内核之外,可用于稳定Debian的最新版本的lxc已经超过18个月,而且缺less很多被广泛使用的特征。 […]
现在我正在使用Linux VServer进行VPS托pipe。 但是它缺less一些我需要的function(例如,CPU使用率虚拟化,guest虚拟机的配额支持等),所以我正考虑切换到OpenVZ或直接转换到LXC。 我在某处阅读LXC不被认为是安全的(例如http://en.gentoo-wiki.com/wiki/LXC#MAJOR_Temporary_Problems_with_LXC_-_READ_THIS ) – 这是真的吗? 由于我不了解谁来pipe理客人,所以我必须要保证安全。
更新: 我find了解决scheme: http : //www.linuxfoundation.org/collaborate/workgroups/networking/bridge#No_traffic_gets_trough_.28except_ARP_and_STP.29 # cd /proc/sys/net/bridge # ls bridge-nf-call-arptables bridge-nf-call-iptables bridge-nf-call-ip6tables bridge-nf-filter-vlan-tagged # for f in bridge-nf-*; do echo 0 > $f; done 但我想对此有专家意见:禁用所有bridge-nf- *是否安全? 他们在这里干什么? 更新结束 我需要将LXC容器连接到我的主机的物理接口(eth0),阅读大量教程,文档和博客文章。 我需要容器有自己的公共IP(我以前做过KVM / libvirt)。 经过两天的search和尝试,我仍然无法使用LXC容器。 主机运行一个新鲜安装的Ubuntu服务器Quantal(12.10)只有libvirt(我没有在这里使用)和lxc安装。 我创build了容器: lxc-create -t ubuntu -n mycontainer 所以他们也运行Ubuntu 12.10。 / var / lib / lxc / mycontainer / config的内容是: lxc.utsname = […]
在Ubuntu 14.04上,我创build了一个可以手动启动和停止的非特权容器。 但我希望这个系统开始和停止。 我已经将以下内容添加到容器的configuration中: lxc.start.auto = 1 lxc.start.delay = 5 但是,系统脚本似乎没有select无特权的容器。 在linuxcontainers.org上有一个与此相关的线程 ,但该解决scheme似乎仅限于root用户。 有一个干净的方式来做这个非root用户(根用户的同意)?
我不是LXC的专家,但据我所知,它真的和linux-vserver类似。 如果这是正确的,我想知道为什么在已经拥挤的虚拟化阵营中还有另一个玩家呢? LXC提供(或承诺)linux-vserver没有的东西? 我是一个很长时间的linux-vserver用户,我记得那是在很多年前,所有这些虚拟化的炒作。 最近发展缓慢,但从来没有完全停止 – 我知道,因为开发人员帮助我把它带回到Linux / hppa(至less在Gentoo)有用的状态。 他们经常使用所有最新的好东西(LXC使用的相同的容器基础设施),甚至与GRsecurity集成来针对最新的内核推出补丁。 开始LXC工作的人可能有充分的理由这样做,而不是join已经build立好的linux-vserver基础? 那我想知道 这是关于主线整合吗? 那么为什么不适应linux-vserver进行整合,就像Xen用XenLinux一样呢?
在较重的虚拟化(Xen DomU,KVM,Hyper-V,VMVare)下可以使用LXC吗? 我想使用它作为安全(隔离)工具,限制资源消耗的能力对我来说并不重要。 如果能够以直接的方式完成,我只是感兴趣。 类似于在非虚拟化服务器上使用LXC。 我不想在生产服务器上使用过于棘手的设置。
一个Ubuntu服务器托pipe3个应用程序全部在不同的域。 每个应用程序都有自己的开发者 应用程序开发人员属于Linux“sftp”组。 chroot允许每个应用程序开发者的密码sftp访问。 /home/app1/prod /home/app2/prod /home/app3/prod 在sshd_config Match Group sftp PasswordAuthentication yes ChrootDirectory %h ForceCommand internal-sftp AllowTcpForwarding no 我们担心的是一个应用程序中的编程漏洞会导致其他两个应用程序出现问题。 我们应该使用lxc容器而不是chroot吗? 为什么? lxc容器的更改对于应用程序开发人员是否透明?
编辑2:此问题似乎也存在以及3.8.0-25 – generics#37 – Ubuntu的SMP 编辑:我修改了原来的标题“为什么会通过写入与dd文件触发Linux内存不足的经理”的问题? 以更好地反映我担心的一般问题如下: 当我写一个超过内存限制(设置为300MB)的文件时,我遇到了一个麻烦的情况,即OOM杀手在我的LXC容器中进行了严酷的查杀过程。 当我在Xen虚拟机(EC2 t1.micro)上运行应用程序时,实际上只有512 MB内存,所以这个问题不会发生,所以文件缓冲方面似乎存在一些问题,涉及容器内存限制。 作为一个简单的例子,我可以演示一个由dd编写的大文件如何导致问题。 再次,这个问题困扰所有的应用程序。 我正在寻求解决应用程序的caching的一般问题变得太大, 我明白我可以如何做“dd”的工作。 场景: 我有一个LXC容器,其中memory.limit_in_bytes设置为300 MB。 我试图dd一个〜500 MB的文件,如下所示: dd if=/dev/zero of=test2 bs=100k count=5010 大概有20%的时间,Linux OOMpipe理器被这个命令触发,一个进程被终止。 不用说,这是非常意想不到的行为; dd是为了模拟在容器内部运行的程序写入的实际“有用的”文件。 详细信息:虽然文件caching变大(260 MB),rss和文件映射似乎保持相当低。 下面是在写入过程中可能看起来像memory.stat的一个例子: cache 278667264 rss 20971520 mapped_file 24576 pgpgin 138147 pgpgout 64993 swap 0 pgfault 55054 pgmajfault 2 inactive_anon 10637312 active_anon 10342400 inactive_file 278339584 active_file […]
我想用lxc-execute来隔离进程。 有没有可能设置带宽,CPU和内存限制? 我看了一下lxc.conf的文件,但是我没有发现它的详尽性。