All-In-One 单个 LXC 容器

本指南将引导您完成在 LXC 容器而非虚拟机中部署 OpenStack 的过程。

在容器而非虚拟机中运行 devstack 的主要优点是更快的性能和更低的内存开销,同时仍然提供适当的隔离级别。当您想要模拟在多个节点上运行 OpenStack 时,这尤其有用。

警告

容器提供的隔离级别不如虚拟机。

注意

并非所有 OpenStack 功能都支持在容器内运行。有关详细信息,请参阅下面的限制部分。建议初学者使用 OpenStack 在虚拟机中

先决条件

本指南适用于 Ubuntu 14.04,但应可适用于任何现代 Linux 发行版。

安装 LXC 包

sudo apt-get install lxc

您可以使用 lxc-checkconfig 命令来验证当前运行的内核是否支持容器化功能。

容器设置

配置

为了成功运行 stack.sh 并允许使用 KVM 运行您在容器中启动的虚拟机,我们需要使用以下附加配置选项。将以下内容放在名为 devstack-lxc.conf 的文件中

# Permit access to /dev/loop*
lxc.cgroup.devices.allow = b 7:* rwm

# Setup access to /dev/net/tun and /dev/kvm
lxc.mount.entry = /dev/net/tun dev/net/tun none bind,create=file 0 0
lxc.mount.entry = /dev/kvm dev/kvm none bind,create=file 0 0

# Networking
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = lxcbr0

创建容器

使用 lxc-create 命令创建 LXC 容器的配置和 rootfs。

我们将把我们的容器命名为 devstack 并使用 ubuntu 模板,该模板将使用 debootstrap 构建 Ubuntu rootfs。它将默认使用与主机系统相同的发行版和体系结构。我们还安装了附加软件包 bsdmainutilsgit,因为我们需要它们来运行 devstack

sudo lxc-create -n devstack -t ubuntu -f devstack-lxc.conf -- --packages=bsdmainutils,git

第一次构建 rootfs 需要几分钟才能下载、解包和配置 Ubuntu 最小安装所需的所有软件包。LXC 将缓存此内容,后续容器的创建只需几秒钟。

注意

为了加快初始 rootfs 的创建,您可以通过附加 --mirror= 然后 Ubuntu 镜像的 URL 来指定镜像以从其下载 Ubuntu 包。要查看其他模板选项,您可以运行 lxc-create -t ubuntu -h

启动容器

要启动容器,请运行

sudo lxc-start -n devstack

稍后您应该会看到容器的登录提示。您可以使用用户名 ubuntu 和密码 ubuntu 登录。

您也可以通过 ssh 方式进入您的容器。在您的主机上,运行 sudo lxc-info -n devstack 以获取 IP 地址(例如 ssh ubuntu@$(sudo lxc-info -n devstack | awk '/IP/ { print $2 }'))。

运行 Devstack

您现在应该已登录到您的容器,并且几乎可以运行 devstack 了。本节中的所有命令都应在您的容器内运行。

提示

通过确保您的 apt sources.list 配置为使用快速镜像,可以大大减少初始 devstack 设置的运行时间。检查并更新 /etc/apt/sources.list(如果需要),然后运行 apt-get update

  1. 下载 DevStack

    git clone https://opendev.org/openstack/devstack
    
  2. 配置

    如果您希望配置 devstack 的行为,请参阅 最小配置

  3. 开始安装

    cd devstack
    ./stack.sh
    

清理

停止容器

lxc-stop -n devstack

删除容器

lxc-destroy -n devstack

限制

并非所有 OpenStack 功能在从容器内运行时都能正常工作或根本无法工作。

Cinder

无法创建基于 LVM 的卷

在我们的配置中,我们尚未授权访问 device-mapper 或 LVM 设备。这样做将允许您的容器访问和控制主机上的 LVM。要启用,请在运行 lxc-create 之前将以下内容添加到您的 devstack-lxc.conf

lxc.cgroup.devices.allow = c 10:236 rwm
lxc.cgroup.devices.allow = b 252:* rwm

此外,您还需要将 udev_rules = 0 设置在 /etc/lvm/lvm.confactivation 部分,除非您在容器中挂载 devtmpfs。

无法将卷附加到实例

由于 Linux iSCSI 实现的某些部分不了解网络命名空间,因此无法将 cinder 卷附加到 nova 实例。可以通过使用网络直通而不是单独的网络命名空间来解决此问题,但这种设置会大大降低容器的隔离性(例如,在容器中发出的 halt 命令将导致主机系统关闭)。