基于容器的虚拟化称为Linux容器(LXC),它可能是传统hypervisor之外很有效的一个替代选择。然而如果配置不正确,虚拟容器可能会耗尽所有资源、导致其他进程无法获取到资源,对性能造成潜在的影响,比传统的hypervisor不再有任何优势。为避免该问题,管理员可以使用cgroups对进程能够使用的资源进行限制以确保虚拟环境高效运行。 什么是cgroups? cgroups是一种技术,允许管理员创建资源组并对特定进程能够使用的资源进行限制。
不使用cgroups,虚拟容器可能会耗尽资源导致其他进程无法获取到。使用cgroups,管理员能够限制特定容器能够使用的资源。这些限制在主机操作系统上创……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
基于容器的虚拟化称为Linux容器(LXC),它可能是传统hypervisor之外很有效的一个替代选择。然而如果配置不正确,虚拟容器可能会耗尽所有资源、导致其他进程无法获取到资源,对性能造成潜在的影响,比传统的hypervisor不再有任何优势。为避免该问题,管理员可以使用cgroups对进程能够使用的资源进行限制以确保虚拟环境高效运行。
什么是cgroups?
cgroups是一种技术,允许管理员创建资源组并对特定进程能够使用的资源进行限制。不使用cgroups,虚拟容器可能会耗尽资源导致其他进程无法获取到。使用cgroups,管理员能够限制特定容器能够使用的资源。这些限制在主机操作系统上创建,适用于组内的所有虚拟容器。
在LXC中启动容器
创建LXC虚拟容器后,系统会拷贝容器的文件到形成容器的chroot环境。接下来,容器在主机操作系统之上启动,主机操作系统会对容器使用的资源进行控制。当你启动新容器时,Linux为该容器创建了一个cgroup,可限制容器能够使用的资源。
为调整这些资源,管理员能够在cgroup配置文件中对限制进行定义。可以在主机操作系统的文件系统挂载点下访问这些配置文件。例如,SUSE Linux Enterprise Server 11.3的配置文件位于/sys/fs/cgroup目录下。每种资源都有其自己的子目录。你可以修改这些文件来对虚拟容器能够使用的资源进行限制。
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,noexec,nosuid,nodev,cpuset)
cgroup on /sys/fs/cgroup/cpu type cgroup (rw,noexec,nosuid,nodev,cpu)
cgroup on /sys/fs/cgroup/cpuacct type cgroup (rw,noexec,nosuid,nodev,cpuacct)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,noexec,nosuid,nodev,memory)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,noexec,nosuid,nodev,devices)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,noexec,nosuid,nodev,freezer)
cgroup on /sys/fs/cgroup/net_cls type cgroup (rw,noexec,nosuid,nodev,net_cls)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,noexec,nosuid,nodev,blkio)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,noexec,nosuid,nodev,perf_event)
让我们一起看一下如何修改这些限制。内存访问是通过配置文件/sys/fs/cgroup/memory进行控制的。在遍历该目录时,你将会发现一个名为lxc的子目录,在该目录下会为每个容器创建一个子目录。有两个非常有趣的控制文件:memory.max_usage_in_bytes 和memory.usage_in_bytes。
lin:/sys/fs/cgroup/memory/lxc/sles-lxc1 # ls
cgroup.clone_children memory.max_usage_in_bytes memory.swappiness
cgroup.event_control memory.move_charge_at_immigrate memory.usage_in_bytes
cgroup.procs memory.numa_stat memory.use_hierarchy
memory.failcnt memory.oom_control notify_on_release
memory.force_empty memory.soft_limit_in_bytes tasks
memory.limit_in_bytes memory.stat
lin:/sys/fs/cgroup/memory/lxc/sles-lxc1 # cat memory.max_usage_in_bytes
15302656
lin:/sys/fs/cgroup/memory/lxc/sles-lxc1 # cat memory.usage_in_bytes
13897728
在上述列表中你可以看到max_usage_in_bytes参数当前设置为15MB,目前大约使用了14MB。如果你想增加容器可用的内存,你还可以在文件中设置一个新值。例如,如果你想容器有30MB的可用RAM,可以使用命令echo 30605312 > memory.max_usage_in_bytes。
在创建另一个容器时,会生成另一个配置文件。该文件通常在/etc/lxc目录下的一个与容器名相同的子目录下。该容器完整的配置存储在该文件下,包括其cgroup设置。管理员能够限制虚拟容器能够使用的特定资源。例如,你想使内存限制永久生效,那么可以在配置文件的末尾增加一行,为参数lxc.cgroup.memory.max_usage_in_bytes设置一个具体的值。下次你启动虚拟容器时,虚拟容器能够使用的最大内存就由该参数控制了。
除限制特定容器能够使用的资源之外,cgroups还能够限制容器对特定设备的访问。在容器配置文件中可以看到如下示例,显示了设备访问属性。
lxc.cgroup.devices.allow = c 5:0 rwm
lxc.cgroup.devices.allow = c 4:0 rwm
lxc.cgroup.devices.allow = c 4:1 rwm
# /dev/{,u}random
lxc.cgroup.devices.allow = c 1:9 rwm
lxc.cgroup.devices.allow = c 1:8 rwm
lxc.cgroup.devices.allow = c 136:* rwm
lxc.cgroup.devices.allow = c 5:2 rwm
# rtc
lxc.cgroup.devices.allow = c 254:0 rwm
管理员能够很轻松地增加以上配置,定义虚拟容器能够访问哪些设备以创建更加安全的环境。
相关推荐
-
五分钟搞定Linux容器
在本文中你将了解了如何使用systemd-nspawn创建Linux容器,并不需要做任何复杂的工作。默认需要的仅仅是最新操作系统的一部分。
-
vSphere集成容器与其他容器有何不同?
Docker是真正推动容器技术的第一家公司,但现在越来越多的公司开始部署他们自己的容器技术。vSphere集成容器技术粉墨登场,加入到容器技术热潮中。
-
微软Hyper-V Container:最新的Docker追随者
微软最新推出的Hyper-V Container工具可以实现更好的应用程序隔离性,为以Docker为代表的Linux容器技术带来了很大压力。
-
红帽发布企业Linux 7原子主机 变革Linux容器企业市场
红帽宣布,推出为下一代应用和Linux容器而设的操作系统——红帽企业Linux 7原子主机(Atomic Host) 。