閱讀230 返回首頁    go 阿裏雲 go 技術社區[雲棲]


LXD 2.0 係列(十一):LXD 和 OpenStack

這是 LXD 2.0 係列介紹文章的第十一篇。

  1. LXD 入門
  2. 安裝與配置
  3. 你的第一個 LXD 容器
  4. 資源控製
  5. 鏡像管理
  6. 遠程主機及容器遷移
  7. LXD 中的 Docker
  8. LXD 中的 LXD
  9. 實時遷移
  10. LXD 和 Juju
  11. LXD 和 OpenStack
  12. 調試,及給 LXD 做貢獻

介紹

首先對這次的延期抱歉。為了讓一切正常我花了很長時間。我第一次嚐試是使用 devstack 時遇到了一些必須解決問題。 然而即使這樣,我還是不能夠使網絡正常。

我終於放棄了 devstack,並使用用戶友好的 Juju 嚐試使用 “conjure-up” 部署完整的 Ubuntu OpenStack。它終於工作了!

下麵是如何運行一個完整的 OpenStack,使用 LXD 容器而不是 VM,並在 LXD 容器中運行所有這些(嵌套的!)。

要求

這篇文章假設你有一個可以工作的 LXD 設置,提供容器網絡訪問,並且你有一個非常強大的 CPU,大約 50GB 給容器空間和至少 16G B的內存。

記住,我們在這裏運行一個完整的 OpenStack,這東西不是很輕量!

設置容器

OpenStack 由大量不同做不同事情的組件組成。 一些需要一些額外的特權,為了可以使設置更簡單,我們將使用特權容器。

我們將配置支持嵌套的容器,預加載所有需要的內核模塊,並允許它訪問 /dev/mem(顯然是需要的)。

請注意,這意味著 LXD 容器的大部分安全特性對該容器被禁用。 然而由 OpenStack 自身產生的容器將是無特權的,並且可以正常使用 LXD 的安全特性。


  1. lxc launch ubuntu:16.04 openstack -c security.privileged=true -c security.nesting=true -c "linux.kernel_modules=iptable_nat, ip6table_nat, ebtables, openvswitch"
  2. lxc config device add openstack mem unix-char path=/dev/mem

LXD 中有一個小 bug,它會嚐試加載已經加載到主機上的內核模塊。這已在LXD 2.5中得到修複,並將在LXD 2.0.6 中修複,但在此之前,可以使用以下方法:


  1. lxc exec openstack -- ln -s /bin/true /usr/local/bin/modprobe

我們需要加幾條 PPA 並安裝 conjure-up,它是我們用來安裝 OpenStack 的部署工具。


  1. lxc exec openstack -- apt-add-repository ppa:conjure-up/next -y
  2. lxc exec openstack -- apt-add-repository ppa:juju/stable -y
  3. lxc exec openstack -- apt update
  4. lxc exec openstack -- apt dist-upgrade -y
  5. lxc exec openstack -- apt install conjure-up -y

最後一步是在容器內部配置 LXD 網絡。

所有問題都選擇默認,除了:

  • 使用 dir 存儲後端( zfs 不在嵌套容器中用)
  • 不要配置 IPv6 網絡(conjure-up/juju 不太兼容它)

  1. lxc exec openstack -- lxd init

現在配置完容器了,現在我們部署 OpenStack!

用 conjure-up 部署 OpenStack

如先前提到的,我們用 conjure-up 部署 OpenStack。

這是一個很棒的用戶友好的可以與 Juju 交互來部署複雜服務的工具。

首先:


  1. lxc exec openstack -- sudo -u ubuntu -i conjure-up
  • 選擇 “OpenStack with NovaLXD”
  • 選擇 “localhost” 作為部署目標(使用 LXD)
  • 點擊 “Deploy all remaining applications”

接下來會部署 OpenStack。整個過程會花費一個多小時,這取決於你運行的機器。你將看到所有服務會被分配一個容器,然後部署並最終互連。

Conjure-Up deploying OpenStack

Conjure-Up deploying OpenStack

部署完成後會顯示一個安裝完成的界麵。它會導入一些初始鏡像、設置 SSH 權限、配置網絡最後會顯示麵板的 IP 地址。

訪問麵板並生成一個容器

麵板運行在一個容器中,因此你不能直接從瀏覽器中訪問。

最簡單的方法是設置一條 NAT 規則:


  1. lxc exec openstack -- iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to <IP>

其中 <ip> 是 conjure-up 在安裝結束時給你的麵板 IP 地址。

你現在可以獲取 “openstack” 容器的 IP 地址(來自 lxc info openstack),並將瀏覽器指向:https://<container ip>/horizon 。

第一次加載可能需要幾分鍾。 一旦顯示了登錄界麵,輸入默認登錄名和密碼(admin/openstack),你就會看到OpenStack的歡迎麵板!

oslxd-dashboard

oslxd-dashboard

現在可以選擇左邊的 “Project” 選項卡,進入 “Instances” 頁麵。 要啟動一個使用 nova-lxd 的新實例,點擊 “Launch instance”,選擇你想要的鏡像,網絡等,接著你的實例就產生了。

一旦它運行後,你可以為它分配一個浮動 IP,它將允許你從你的 “openstack” 容器中訪問你的實例。

總結

OpenStack 是一個非常複雜的軟件,你也不會想在家裏或在單個服務器上運行它。 但是,不管怎樣在你的機器上包含這些服務在一個容器中都是非常有趣的。

conjure-up 是部署這種複雜軟件的一個很好的工具,背後使用 Juju 驅動部署,為每個單獨的服務使用 LXD 容器,最後是實例本身。

它也是少數幾個容器嵌套多層並實際上有意義的情況之一!

原文發布時間為:2017-03-08

本文來自雲棲社區合作夥伴“Linux中國”

最後更新:2017-05-24 16:32:00

  上一篇:go  Azure 雲 Linux 安全建議
  下一篇:go  LXD 2.0 係列(十二):調試,及給 LXD 做貢獻