试图保持在红帽的青睐范围内并仍然计划系统寿命是很棘手的......
一年多来,我一直是Linux Containers (LXC)的支持者。我的初始安装基于从在线教程中收集的信息,例如this one和this one。这个中心的周围lxc-create,lxc-start|stop并且lxc-destroy命令和修改现有OpenVZ的模板。
这运行良好,并在生产中愉快地运行。但是,我提出了一些额外的系统,并决定查看 Red Hat 当前有关 EL6 容器的文档。看到他们在这方面的官方立场,我感到很惊讶。
在RHEL 6 是否提供使用 Linux 容器所需的 LXC 工具?,Red Hat 将 LXC 描述为技术预览并建议使用 libvirt 来管理创建和管理容器。
然而,Oracle在其 Unbreakable Linux 中提倡一种完全不同的容器化技术。
libvirt 方法中似乎缺少一些功能,但是我最初使用 lxc-* 命令的方法有点像手动过程……我不太清楚在 EL6 上管理容器的方法或“可接受”方法.
我已经使用 lxc-clone 命令克隆了我的基于 lvm 的容器(test_lvm 被复制以创建 u33)。容器工作正常,但输出sudo lvs让我困惑:
LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert
test_lvm containers -wi-a---- 1.00g
u33 containers -wi-ao--- 1.00g
Run Code Online (Sandbox Code Playgroud)
什么是Ø属性?在文档中什么也没找到。
我只是在我的 Debian 虚拟服务器上添加了一些问题,然后从头开始重新安装所有这些问题。但是,我仍然可以访问旧版本,并且可以检索已安装软件包的列表。
为了方便以后恢复虚拟服务器的过程,我想为我的每台服务器创建一个特定包的列表。
为了更好地解释我想要实现的目标。我已经有了一个自动化过程来创建一个新的虚拟服务器,其中包含一些随处使用的基本包和配置。现在我想用这个“骨架”保存增量以简化特定服务器的重新安装。
一个真正的好处是还可以从默认值中保存更改的配置文件,但我只能使用包列表。
简而言之,我想要一种方法来创建安装在主机上但不在另一个主机上的软件包列表。
如果列表只包含手动安装的包而不包含所有依赖项的列表,那就太好了。
如果您有一些旨在完成此特定任务的现有工具,请随时提出它们,但我希望使依赖关系尽可能小。有关信息,它们不完全是虚拟服务器,而是 LXC 容器。
一台 ubuntu 服务器在不同的域中托管 3 个应用程序。
每个应用程序都有自己的开发人员。
应用程序开发人员属于 linux "sftp" 组。
chroot允许每个应用程序开发人员使用密码 sftp 访问。
/home/app1/prod
/home/app2/prod
/home/app3/prod
Run Code Online (Sandbox Code Playgroud)
在 sshd_config
Match Group sftp
PasswordAuthentication yes
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
Run Code Online (Sandbox Code Playgroud)
我们担心一个应用程序中的编程漏洞会导致其他两个应用程序出现问题。
我们应该使用 lxc 容器而不是 chroot 吗?为什么?对 lxc 容器的更改对应用程序开发人员是透明的吗?
Microsoft Windows 是否有类似 Ubuntu 的 LXC 容器虚拟化技术的等效产品?
假设我们有一个安装了 lxc 的服务器,以及一个用作基础 img 的 lxc 容器/var/lib/lxc/ubuntu_base。为简单起见,让我们忘记复制基础 img 后的配置更改。
有些人建议使用子卷和快照来制作新容器,但可以轻松地执行 cp --reflink 并获得类似的结果。
那么管理多个容器的正确方法(或哪种更好)是什么?
这种方式看起来最好,但是像 lxc-destroy 这样的命令将不起作用,因为它无法删除目录。
btrfs subvolume snapshot /var/lib/lxc/ubuntu_base /var/lib/lxc/container_1
Run Code Online (Sandbox Code Playgroud)
我不确定这个或快照之间是否有任何性能差异
cp --reflink=always /var/lib/lxc/ubuntu_base /var/lib/lxc/container_1
Run Code Online (Sandbox Code Playgroud)
编辑:
我在 reflink 选项中看到的一件事是,如果其他容器正在运行,则无法删除基本容器,因为/proc和/dev已安装且从未更改,因此引用始终相同。但是关闭所有复制的容器似乎有帮助。
这个问题类似于Openvpn 的在 lxc 来宾中没有 tun 设备。LXC 已经发展,最近推出了无特权的 LXC 容器,它提供了另一层防止越狱的安全性。
我需要在一个非特权容器中创建一个 OpenVPN 服务器。我不知道如何让容器创建一个私有的 tun 网络设备。
我确实附加lxc.cgroup.devices.allow = c 10:200 rwm到~/.local/share/lxc/mylxc/config.
启动容器后,mknod /dev/net/tun c 10 200返回mknod: '/dev/net/tun': Operation not permitted容器内部。
我使用 vanilla Ubuntu 14.04 64bit 作为主机和一个容器
lxc-create -t download -n mylxc -- -d ubuntu -r trusty -a amd64
Run Code Online (Sandbox Code Playgroud)
有没有人设法让/dev/tun设备在非特权 LXC 下运行?
我们正在开发针对 Debian Lenny(和其他一些)的服务器产品。但是,由于驱动程序的需要,开发人员的个人选择等,我们在硬件上运行 Ubuntu (12.04)。
是否可以在 Ubuntu 12.04 上的 LXC 容器中运行 Debian Lenny?
EDIT2:这个问题在 3.8.0-25-generic #37-Ubuntu SMP 下似乎也存在
编辑:我修改了原标题“为什么用 dd 写入文件会触发 Linux 内存不足管理器”中的问题?为了更好地反映我担心下面描述的一般问题:
我遇到了一个麻烦的场景,当我编写一个大小超过内存限制(设置为 300MB)的文件时,OOM 杀手很难杀死我的 LXC 容器中的进程。当我在实际只有 512 MB RAM 的 Xen 虚拟机(EC2 t1.micro)上运行应用程序时,不会出现该问题,因此文件缓冲似乎存在一些与容器内存限制相关的问题。
作为一个简单的例子,我可以演示 dd 写入的大文件如何导致问题。同样,这个问题困扰着所有应用程序。我正在寻求解决应用程序缓存变得太大的一般问题;我了解如何使“dd”工作。
设想:
我有一个 LXC 容器,其中 memory.limit_in_bytes 设置为 300 MB。
我尝试添加一个 ~500 MB 的文件,如下所示:
dd if=/dev/zero of=test2 bs=100k count=5010
Run Code Online (Sandbox Code Playgroud)
大约 20% 的时间,Linux OOM 管理器被此命令触发并杀死一个进程。不用说,这是非常意外的行为;dd 旨在模拟由在容器内运行的程序写入的实际“有用”文件。
详细信息:虽然文件缓存变大 (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 319488
unevictable …Run Code Online (Sandbox Code Playgroud)