LXD 2.0 系列(十一):LXD 和 OpenStack
這是 LXD 2.0 系列介紹文章的第十一篇。
- LXD 入門(mén)
- 安裝與配置
- 你的***個(gè) LXD 容器
- 資源控制
- 鏡像管理
- 遠(yuǎn)程主機(jī)及容器遷移
- LXD 中的 Docker
- LXD 中的 LXD
- 實(shí)時(shí)遷移
- LXD 和 Juju
介紹
首先對(duì)這次的延期抱歉。為了讓一切正常我花了很長(zhǎng)時(shí)間。我***次嘗試是使用 devstack 時(shí)遇到了一些必須解決問(wèn)題。 然而即使這樣,我還是不能夠使網(wǎng)絡(luò)正常。
我終于放棄了 devstack,并使用用戶(hù)友好的 Juju 嘗試使用 “conjure-up” 部署完整的 Ubuntu OpenStack。它終于工作了!
下面是如何運(yùn)行一個(gè)完整的 OpenStack,使用 LXD 容器而不是 VM,并在 LXD 容器中運(yùn)行所有這些(嵌套的!)。
要求
這篇文章假設(shè)你有一個(gè)可以工作的 LXD 設(shè)置,提供容器網(wǎng)絡(luò)訪(fǎng)問(wèn),并且你有一個(gè)非常強(qiáng)大的 CPU,大約 50GB 給容器空間和至少 16G B的內(nèi)存。
記住,我們?cè)谶@里運(yùn)行一個(gè)完整的 OpenStack,這東西不是很輕量!
設(shè)置容器
OpenStack 由大量不同做不同事情的組件組成。 一些需要一些額外的特權(quán),為了可以使設(shè)置更簡(jiǎn)單,我們將使用特權(quán)容器。
我們將配置支持嵌套的容器,預(yù)加載所有需要的內(nèi)核模塊,并允許它訪(fǎng)問(wèn) /dev/mem(顯然是需要的)。
請(qǐng)注意,這意味著 LXD 容器的大部分安全特性對(duì)該容器被禁用。 然而由 OpenStack 自身產(chǎn)生的容器將是無(wú)特權(quán)的,并且可以正常使用 LXD 的安全特性。
- lxc launch ubuntu:16.04 openstack -c security.privileged=true -c security.nesting=true -c "linux.kernel_modules=iptable_nat, ip6table_nat, ebtables, openvswitch"
- lxc config device add openstack mem unix-char path=/dev/mem
LXD 中有一個(gè)小 bug,它會(huì)嘗試加載已經(jīng)加載到主機(jī)上的內(nèi)核模塊。這已在LXD 2.5中得到修復(fù),并將在LXD 2.0.6 中修復(fù),但在此之前,可以使用以下方法:
- lxc exec openstack -- ln -s /bin/true /usr/local/bin/modprobe
我們需要加幾條 PPA 并安裝 conjure-up,它是我們用來(lái)安裝 OpenStack 的部署工具。
- lxc exec openstack -- apt-add-repository ppa:conjure-up/next -y
- lxc exec openstack -- apt-add-repository ppa:juju/stable -y
- lxc exec openstack -- apt update
- lxc exec openstack -- apt dist-upgrade -y
- lxc exec openstack -- apt install conjure-up -y
***一步是在容器內(nèi)部配置 LXD 網(wǎng)絡(luò)。
所有問(wèn)題都選擇默認(rèn),除了:
- 使用 dir 存儲(chǔ)后端( zfs 不在嵌套容器中用)
- 不要配置 IPv6 網(wǎng)絡(luò)(conjure-up/juju 不太兼容它)
- lxc exec openstack -- lxd init
現(xiàn)在配置完容器了,現(xiàn)在我們部署 OpenStack!
用 conjure-up 部署 OpenStack
如先前提到的,我們用 conjure-up 部署 OpenStack。
這是一個(gè)很棒的用戶(hù)友好的可以與 Juju 交互來(lái)部署復(fù)雜服務(wù)的工具。
首先:
- lxc exec openstack -- sudo -u ubuntu -i conjure-up
- 選擇 “OpenStack with NovaLXD”
- 選擇 “localhost” 作為部署目標(biāo)(使用 LXD)
- 點(diǎn)擊 “Deploy all remaining applications”
接下來(lái)會(huì)部署 OpenStack。整個(gè)過(guò)程會(huì)花費(fèi)一個(gè)多小時(shí),這取決于你運(yùn)行的機(jī)器。你將看到所有服務(wù)會(huì)被分配一個(gè)容器,然后部署并最終互連。
Conjure-Up deploying OpenStack
部署完成后會(huì)顯示一個(gè)安裝完成的界面。它會(huì)導(dǎo)入一些初始鏡像、設(shè)置 SSH 權(quán)限、配置網(wǎng)絡(luò)***會(huì)顯示面板的 IP 地址。
訪(fǎng)問(wèn)面板并生成一個(gè)容器
面板運(yùn)行在一個(gè)容器中,因此你不能直接從瀏覽器中訪(fǎng)問(wèn)。
最簡(jiǎn)單的方法是設(shè)置一條 NAT 規(guī)則:
- lxc exec openstack -- iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to <IP>
其中 <ip> 是 conjure-up 在安裝結(jié)束時(shí)給你的面板 IP 地址。
你現(xiàn)在可以獲取 “openstack” 容器的 IP 地址(來(lái)自 lxc info openstack),并將瀏覽器指向:http://<container ip>/horizon 。
***次加載可能需要幾分鐘。 一旦顯示了登錄界面,輸入默認(rèn)登錄名和密碼(admin/openstack),你就會(huì)看到OpenStack的歡迎面板!
oslxd-dashboard
現(xiàn)在可以選擇左邊的 “Project” 選項(xiàng)卡,進(jìn)入 “Instances” 頁(yè)面。 要啟動(dòng)一個(gè)使用 nova-lxd 的新實(shí)例,點(diǎn)擊 “Launch instance”,選擇你想要的鏡像,網(wǎng)絡(luò)等,接著你的實(shí)例就產(chǎn)生了。
一旦它運(yùn)行后,你可以為它分配一個(gè)浮動(dòng) IP,它將允許你從你的 “openstack” 容器中訪(fǎng)問(wèn)你的實(shí)例。
總結(jié)
OpenStack 是一個(gè)非常復(fù)雜的軟件,你也不會(huì)想在家里或在單個(gè)服務(wù)器上運(yùn)行它。 但是,不管怎樣在你的機(jī)器上包含這些服務(wù)在一個(gè)容器中都是非常有趣的。
conjure-up 是部署這種復(fù)雜軟件的一個(gè)很好的工具,背后使用 Juju 驅(qū)動(dòng)部署,為每個(gè)單獨(dú)的服務(wù)使用 LXD 容器,***是實(shí)例本身。
它也是少數(shù)幾個(gè)容器嵌套多層并實(shí)際上有意義的情況之一!
額外信息
conjure-up 網(wǎng)站: http://conjure-up.io
Juju 網(wǎng)站: http://www.ubuntu.com/cloud/juju
LXD 的主站在: https://linuxcontainers.org/lxd
LXD 的 GitHub 倉(cāng)庫(kù): https://github.com/lxc/lxd
LXD 的郵件列表: https://lists.linuxcontainers.org
LXD 的 IRC 頻道: #lxcontainers on irc.freenode.net
如果你不想或者不能在你的機(jī)器上安裝 LXD ,你可以在 web 上試試在線(xiàn)版的 LXD。
作者簡(jiǎn)介:
我是Stéphane Graber。我是LXC和LXD項(xiàng)目的***,目前在加拿大魁北克蒙特利爾的家所在的Canonical有限公司擔(dān)任LXD的技術(shù)主管。