个性化阅读
专注于IT技术分析

Linux虚拟化:Linux容器(lxc)详细指南

先决条件:

  • 之前我说过chroot jail和使用cgroups进行资源限制.
    如果你还没有阅读它们, 那么我强烈建议你先阅读它们, 然后再继续。
  • 参考docker团队非常好的演讲。
    这将刷新上面学到的一些概念。该视频充当本文与上述早期文章中讨论的主题之间的桥梁。这说明了容器如何有用以及内部如何使用chroot和cgroup。

虚拟化简介

操作系统级虚拟化是一种服务器虚拟化方法, 其中操作系统的内核允许存在多个隔离的用户空间实例, 而不仅仅是一个实例。从其所有者和用户的角度来看, 此类实例有时被称为容器, 软件容器, 虚拟化引擎(VE)或 jail(FreeBSD jail或chroot jail), 看起来和感觉上像是一台真正的服务器。

上面的定义总结了有关容器的广泛概念, 但更准确地说, 传统的虚拟机使用了一种运行在内核之上的称为虚拟机监控程序的东西。该虚拟机监控程序通过监视其资源使用情况和访问模式, 为其上运行的应用程序提供虚拟化。这会导致大量开销, 从而导致不必要的性能损失。另一方面, 操作系统级虚拟化的工作方式有所不同。它使用名称空间和cgroup来限制应用程序的功能, 包括资源的使用。这是linux内核提供的功能。这几乎没有开销。

Linux虚拟化:Linux容器(lxc)1

该方法非常有效, Docker可以在内部使用这些容器来提供隔离的环境, 这对于部署多个集成系统非常有用。他们甚至必须创建自己的容器库。 Google在共享硬件上的容器上运行自己的服务。

安装

要在Ubuntu中安装lxc,

$ sudo apt-get install lxc lxctl lxc-templates

该软件包安装了LXC的要求, 一些模板, 并且还设置了容器的网络结构。

运行lxc-checkconfig以检查内核配置是否准备就绪。

$ sudo lxc-checkconfig
    Kernel configuration not found at /proc/config.gz; searching...
    Kernel configuration found at /boot/config-4.4.0-24-generic
    --- Namespaces ---
    Namespaces: enabled
    Utsname namespace: enabled
    Ipc namespace: enabled
    Pid namespace: enabled
    User namespace: enabled
    Network namespace: enabled
    Multiple /dev/pts instances: enabled

    --- Control groups ---
    Cgroup: enabled
    Cgroup clone_children flag: enabled
    Cgroup device: enabled
    Cgroup sched: enabled
    Cgroup cpu account: enabled
    Cgroup memory controller: enabled
    Cgroup cpuset: enabled

    --- Misc ---
    Veth pair device: enabled
    Macvlan: enabled
    Vlan: enabled
    Bridges: enabled
    Advanced netfilter: enabled
    CONFIG_NF_NAT_IPV4: enabled
    CONFIG_NF_NAT_IPV6: enabled
    CONFIG_IP_NF_TARGET_MASQUERADE: enabled
    CONFIG_IP6_NF_TARGET_MASQUERADE: enabled
    CONFIG_NETFILTER_XT_TARGET_CHECKSUM: enabled
    FUSE (for use with lxcfs): enabled

    --- Checkpoint/Restore ---
    checkpoint restore: enabled
    CONFIG_FHANDLE: enabled
    CONFIG_EVENTFD: enabled
    CONFIG_EPOLL: enabled
    CONFIG_UNIX_DIAG: enabled
    CONFIG_INET_DIAG: enabled
    CONFIG_PACKET_DIAG: enabled
    CONFIG_NETLINK_DIAG: enabled
    File capabilities: enabled

注意 :在引导新内核之前, 你可以检查其配置用法:CONFIG = / path / to / config / usr / bin / lxc-checkconfig

你还应该看到类似于上面的输出。

lxc提供了许多现成的模板, 这些模板对于快速部署确实很有帮助。

$ ls -l /usr/share/lxc/templates/
    total 404
    -rwxr-xr-x 1 root root 12973 May 18 14:48 lxc-alpine
    -rwxr-xr-x 1 root root 13713 May 18 14:48 lxc-altlinux
    -rwxr-xr-x 1 root root 11090 May 18 14:48 lxc-archlinux
    -rwxr-xr-x 1 root root 12159 May 18 14:48 lxc-busybox
    -rwxr-xr-x 1 root root 29503 May 18 14:48 lxc-centos
    -rwxr-xr-x 1 root root 10374 May 18 14:48 lxc-cirros
    -rwxr-xr-x 1 root root 19732 May 18 14:48 lxc-debian
    -rwxr-xr-x 1 root root 17890 May 18 14:48 lxc-download
    -rwxr-xr-x 1 root root 49600 May 18 14:48 lxc-fedora
    -rwxr-xr-x 1 root root 28384 May 18 14:48 lxc-gentoo
    -rwxr-xr-x 1 root root 13868 May 18 14:48 lxc-openmandriva
    -rwxr-xr-x 1 root root 15932 May 18 14:48 lxc-opensuse
    -rwxr-xr-x 1 root root 41720 May 18 14:48 lxc-oracle
    -rwxr-xr-x 1 root root 11205 May 18 14:48 lxc-plamo
    -rwxr-xr-x 1 root root 19250 May 18 14:48 lxc-slackware
    -rwxr-xr-x 1 root root 26862 May 18 14:48 lxc-sparclinux
    -rwxr-xr-x 1 root root  6862 May 18 14:48 lxc-sshd
    -rwxr-xr-x 1 root root 25602 May 18 14:48 lxc-ubuntu
    -rwxr-xr-x 1 root root 11439 May 18 14:48 lxc-ubuntu-cloud

我们首先用“ubuntu”模板创建一个名为“my_container”的新容器。

这将需要一些时间, 并为你创建一个容器。是!就这么简单。

完成后, 最后几行显示容器根用户的密码。看起来与此类似,

$ sudo lxc-create -n my_container -t ubuntu
    .....
    .....
    ##
    # The default user is 'ubuntu' with password 'ubuntu'!
    # Use the 'sudo' command to run tasks as root in the container.
    ##

我们可以使用lxc-ls检查容器的状态。这将显示容器处于停止状态。

$ sudo lxc-ls --fancy
    NAME            STATE    IPV4  IPV6  AUTOSTART
    ----------------------------------------------
    my_container    STOPPED  -     -     NO

现在要启动容器, 请运行lxc-start。 -d参数创建一个守护程序。

$ sudo lxc-start -n my_container -d

使用lxc-ls检查容器的状态以验证其运行情况。我们可以使用lxc-console访问控制台。使用我们上面收到的凭据来访问控制台。

$ sudo lxc-console -n my_container

登录后, 在容器上运行以下命令,

$ top

然后在host-pc上运行以下命令以查看正在运行的进程的列表。

$ ps auxf

在某个地方, 你会发现一个与此相似的进程树,

容器的进程树

令人惊讶的是, 但是容器上的所有进程只是主机上的简单进程。重要的是所有这些都由内核隔离和监视。因此, 你可以将它们视为主机PC上的简单进程, 甚至可以杀死它们(仅当你具有足够的特权时)

你可以通过键入以下内容退出控制台并返回到主机Ctrl-A其次是问.

要获取有关正在运行的容器使用的更多信息,

$ sudo lxc-info -n my_container

你可以通过直接从主机访问此容器的根文件系统。你将需要root权限才能这样做。

$ sudo su
    $ cd /var/lib/lxc/my_container/rootfs

而已。现在, 这就像一个全新的操作系统。你可以在此容器上运行任何服务。

将容器视为独立的操作系统, 可以在其中运行任何所需的操作。唯一使特别的是, 所有容器都在同一硬件上运行。因此, 实际上, 公司/机构购买重型共享计算机, 然后根据所需的多种服务来部署具有资源限制的容器。这使得它具有可伸缩性且易于管理。

要停止容器运行,

$ sudo lxc-stop -n my_container

要删除容器使用,

$ sudo lxc-destroy -n my_container

注意:

lxc提供了一个包装器和易于使用的API来使用内核功能。它在任何意义上都不等同于容器。

阅读文档以获取有关容器工作的更多详细信息。有很多命令非常有用, 可以使设置容器更加容易。

参考文献:

https://wiki.archlinux.org/index.php/Linux_Containers

https://linuxcontainers.org/lxc/introduction/

http://www.ubuntu.com/cloud/lxd

如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。

赞(0) 打赏
未经允许不得转载:srcmini » Linux虚拟化:Linux容器(lxc)详细指南
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

微信扫一扫打赏