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。它将默认使用与主机系统相同的发行版和体系结构。我们还安装了附加软件包 bsdmainutils 和 git,因为我们需要它们来运行 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。
下载 DevStack
git clone https://opendev.org/openstack/devstack
配置
如果您希望配置 devstack 的行为,请参阅 最小配置。
开始安装
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.conf的activation部分,除非您在容器中挂载 devtmpfs。
无法将卷附加到实例¶
由于 Linux iSCSI 实现的某些部分不了解网络命名空间,因此无法将 cinder 卷附加到 nova 实例。可以通过使用网络直通而不是单独的网络命名空间来解决此问题,但这种设置会大大降低容器的隔离性(例如,在容器中发出的
halt命令将导致主机系统关闭)。