在 Snap 中玩轉(zhuǎn) OpenStack

在 Snap 中玩轉(zhuǎn) OpenStack

OpenStack 非常復(fù)雜,許多社區(qū)成員都在努力使 OpenStack 的部署和操作更加容易。其中大部分時(shí)間都用來(lái)改善相關(guān)工具,如:Ansible、Puppet、Kolla、Juju、Triple-O 和 Chef (僅舉幾例)。但是,如果我們降低一下標(biāo)準(zhǔn),并且還能使包的體驗(yàn)更加簡(jiǎn)單,將會(huì)怎樣呢?

我們正在努力通過(guò) snap 包來(lái)實(shí)現(xiàn)這一點(diǎn)。snap 包是一種新興的軟件分發(fā)方式,這段來(lái)自 snapcraft.io 的介紹很好的總結(jié)了它的主要優(yōu)點(diǎn):snap 包可以快速安裝、易于創(chuàng)建、安全運(yùn)行而且能自動(dòng)地事務(wù)化更新,因此你的應(yīng)用程序總是能保持最新的狀態(tài)并且永遠(yuǎn)不會(huì)被破壞。

捆綁軟件

單個(gè) snap 包可以內(nèi)嵌多個(gè)不同來(lái)源的軟件,從而提供一個(gè)能夠快速啟動(dòng)和運(yùn)行的解決方案。當(dāng)你安裝 snap 包時(shí),你會(huì)發(fā)現(xiàn)安裝速度是很快的,這是因?yàn)閱蝹€(gè) snap 包捆綁了所有它需要的依賴。這和安裝 deb 包有些不同,因?yàn)樗枰螺d所有的依賴然后分別進(jìn)行安裝。

Snap 包制作簡(jiǎn)單

在 Ubuntu 工作的時(shí)候,我花了很多時(shí)間為 Debian 制作 OpenStack 的安裝包。這是一種很特殊技能,需要花很長(zhǎng)時(shí)間才能理解其中的細(xì)微差別。與 snap 包相比,deb 包和 snap 包在復(fù)雜性上的差異有天壤之別。snap 包簡(jiǎn)單易行,并且相當(dāng)有趣。

Snap 包的其它特性

  • 每個(gè) snap 包都安裝在其獨(dú)有的只讀 squashfs 文件系統(tǒng)中。
  • 每個(gè) snap 包都運(yùn)行在一個(gè)由 AppArmor 和 seccomp 策略構(gòu)建的嚴(yán)格沙箱環(huán)境中。
  • snap 包能事務(wù)更新。新版本的 snap 包會(huì)安裝到一個(gè)新的只讀 squashfs 文件系統(tǒng)中。如果升級(jí)失敗,它將回滾到舊版本。
  • 當(dāng)有新版本可用時(shí),snap 包將自動(dòng)更新。
  • OpenStack 的 snap 包能保證與 OpenStack 的上游約束保持一致。打包的人不需要再為 OpenStack 依賴鏈維護(hù)單獨(dú)的包。這真是太爽了!

OpenStack snap 包介紹

現(xiàn)在,下面這些項(xiàng)目已經(jīng)有了相應(yīng)的 snap 包:

  • Keystone —— 這個(gè) snap 包為 OpenStack 提供了身份鑒證服務(wù)。
  • Glance —— 這個(gè) snap 包為 OpenStack 提供了鏡像服務(wù)。
  • Neutron —— 這個(gè) snap 包專門提供了 neutron-server 過(guò)程,作為 OpenStack 部署過(guò)程的一個(gè) snap 包。
  • Nova —— 這個(gè) snap 包提供 OpenStack 部署過(guò)程中的 Nova 控制器組件。
  • Nova-hypervisor —— 這個(gè) snap 包提供 OpenStack 部署過(guò)程中的 hypervisor 組件,并且配置使用通過(guò) deb 包安裝的 Libvirt/KVM + Open vSwitch 組合。這個(gè) snap 包同時(shí)也包含 nava-lxd,這允許我們使用 nova-lxd 而不用 KVM。

這些 snpa 包已經(jīng)能讓我們部署一個(gè)簡(jiǎn)單可工作的 OpenStack 云。你可以在 github 上找到所有這些 OpenStack snap 包的源碼。有關(guān) OpenStack snap 包更多的細(xì)節(jié),請(qǐng)參考上游存儲(chǔ)庫(kù)中各自的 README。在那里,你可以找到更多有關(guān)管理 snap 包的信息,比如覆蓋默認(rèn)配置、重啟服務(wù)、設(shè)置別名等等。

想要?jiǎng)?chuàng)建自己的 OpenStack snap 包嗎?

查看 snap cookie 工具。我很快就會(huì)寫一篇博文,告訴你如何使用 snap cookie 工具。它非常簡(jiǎn)單,并且能幫助你在任何時(shí)候創(chuàng)建一個(gè)新的 OpenStack snap 包。

測(cè)試 OpenStack snap 包

我們已經(jīng)用簡(jiǎn)單的腳本初步測(cè)試了 OpenStack snap 包。這個(gè)腳本會(huì)在單個(gè)節(jié)點(diǎn)上安裝 sanp 包,還會(huì)在安裝后提供額外的配置服務(wù)。來(lái)嘗試下吧:

git clone https://github.com/openstack-snaps/snap-test
cd snap-test
./snap-deploy

這樣,我們就已經(jīng)在 Ubuntu Xenial(16.04) 上做了所有的測(cè)試。要注意的是,這將在你的系統(tǒng)上安裝和配置相當(dāng)多的軟件,因此你最好在可自由使用的機(jī)器上運(yùn)行它。

追蹤 OpenStack

現(xiàn)在,你可以從 snap 商店的邊緣通道來(lái)安裝 snap 包,比如:

sudo snap install --edge keystone

OpenStack 團(tuán)隊(duì)正在努力使 CI/CD 配置到位,以便讓 snap 包的發(fā)布能夠交叉追蹤 OpenStack 的發(fā)布(比如一個(gè)追蹤 Ocata,另一個(gè)追蹤 Pike 等)。每個(gè)<ruby>軌道<rt>track</rt></ruby>都有 4 個(gè)不同的通道。每個(gè)軌道的邊緣通道將包含 OpenStack 項(xiàng)目對(duì)應(yīng)分支最近的內(nèi)容,測(cè)試、候選和穩(wěn)定通道被保留用于已發(fā)布的版本。這樣我們將看到如下的用法:

sudo snap install --channel=ocata/stable keystone
sudo snap install --channel=pike/edge keystone

其它

我們可以使用多個(gè)環(huán)境變量來(lái)簡(jiǎn)化 snap 包的制作。這里 有相關(guān)的說(shuō)明。實(shí)際上,你無(wú)需深入的研究他們,但是在安裝完 snap 包后,你也許會(huì)想要了解這些位置:

$SNAP == /snap/<snap-name>/current

這是 snap 包和它所有的文件掛載的位置。所有東西都是只讀的。比如我當(dāng)前安裝的 keystone,$SNAP 就是 /snap/keystone/91。幸好,你不需要知道當(dāng)前版本號(hào),因?yàn)樵?/snap/keystone/ 中有一個(gè)軟鏈接(LCTT 譯注:/snap/keystone/current/)指向當(dāng)前正在使用版本對(duì)應(yīng)的文件夾。

$ ls /snap/keystone/current/
bin                     etc      pysqlite2-doc        usr
command-manage.wrapper  include  snap                 var
command-nginx.wrapper   lib      snap-openstack.yaml
command-uwsgi.wrapper   meta     templates

$ ls /snap/keystone/current/bin/
alembic                oslo-messaging-send-notification
convert-json           oslo-messaging-zmq-broker
jsonschema             oslo-messaging-zmq-proxy
keystone-manage        oslopolicy-checker
keystone-wsgi-admin    oslopolicy-list-redundant
keystone-wsgi-public   oslopolicy-policy-generator
lockutils-wrapper      oslopolicy-sample-generator
make_metadata.py       osprofiler
mako-render            parse_xsd2.py
mdexport.py            pbr
merge_metadata.py      pybabel
migrate                snap-openstack
migrate-repository     sqlformat
netaddr                uwsgi
oslo-config-generator

$ ls /snap/keystone/current/usr/bin/
2to3               idle     pycompile     python2.7-config
2to3-2.7           pdb      pydoc         python2-config
cautious-launcher  pdb2.7   pydoc2.7      python-config
compose            pip      pygettext     pyversions
dh_python2         pip2     pygettext2.7  run-mailcap
easy_install       pip2.7   python        see
easy_install-2.7   print    python2       smtpd.py
edit               pyclean  python2.7

$ ls /snap/keystone/current/lib/python2.7/site-packages/
...

$SNAP_COMMON == /var/snap/<snap-name>/common

這個(gè)目錄用于存放系統(tǒng)數(shù)據(jù),對(duì)于 snap 包的多個(gè)修訂版本這些數(shù)據(jù)是共用的。在這里,你可以覆蓋默認(rèn)配置文件和訪問日志文件。

$ ls /var/snap/keystone/common/
etc  fernet-keys  lib  lock  log  run

$ sudo ls /var/snap/keystone/common/etc/
keystone  nginx  uwsgi

$ ls /var/snap/keystone/common/log/
keystone.log  nginx-access.log  nginx-error.log  uwsgi.log

嚴(yán)格限制

每個(gè) snap 包都是在一個(gè)由 seccomp 和 AppArmor 策略構(gòu)建的嚴(yán)格限制的環(huán)境中運(yùn)行的。更多關(guān)于 snap 約束的細(xì)節(jié)可以在 這里 查看。

snap 包即將到來(lái)的新特性和更新

我正在期待 snap 包一些即將到來(lái)的新特性和更新(LCTT 譯注:此文發(fā)表于 7 月 6 日):

  • 我們正在致力于實(shí)現(xiàn) libvirt AppArmor 策略,這樣 nova-hypervisor 的 snap 包就能夠訪問 qcow2 的<ruby>支持文件<rt>backing files</rt></ruby>。
    • 現(xiàn)在,作為一種變通方法,你可以將 virt-aa-helper 放在 complain 模式下:sudo aa-complain /usr/lib/libvirt/virt-aa-helper
  • 我們還在為 snapd 開發(fā)額外的接口策略,以便為部署的實(shí)例啟用網(wǎng)絡(luò)連接。
    • 現(xiàn)在你可以在 devmode 模式下安裝 nova-hypervisor snap 包,它會(huì)禁用安全限制:snap install -devmode -edge nova-hypervisor。
  • 自動(dòng)連接 nova-hypervisor 的接口。我們正在努力實(shí)現(xiàn)在安裝時(shí)自動(dòng)定義 nova-hypervisor 接口。
    • 定義 AppArmor 和 seccomp 策略的接口可以允許 snap 包訪問系統(tǒng)的資源。
    • 現(xiàn)在,你可以手動(dòng)連接需要接口,在 nova-hypervisor snap 包的 README 中有相關(guān)的描述。
  • 命令自動(dòng)定義別名。我們正在努力實(shí)現(xiàn) snap 包在安裝時(shí)為命令自動(dòng)定義別名。
    • 這使得我們可以使用傳統(tǒng)的命令名。安裝 snap 包后,你將可以使用 nova-manage db sync 而無(wú)需再用 nova.manage db sync
    • 現(xiàn)在,你可以在安裝 snap 包后手動(dòng)設(shè)置別名,比如:snap alias nova.manage nova-manage。如想獲取更多細(xì)節(jié)請(qǐng)查看 snap 包的 README 。
  • 守護(hù)進(jìn)程自動(dòng)定義別名。當(dāng)前 snappy 僅支持為命令(非守護(hù)進(jìn)程)定義別名。一旦針對(duì)守護(hù)進(jìn)程的別名可用了,我們將設(shè)置它們?cè)诎惭b的時(shí)候自動(dòng)配置。
    • 這使得我們可以使用額外的單元文件名。我們可以使用 systemctl restart nova-compute 而無(wú)需再用 systemctl restart snap.nova.nova-compute。
  • snap 包資產(chǎn)跟蹤。這使得我們可以追蹤用來(lái)構(gòu)建 snap 包的版本以便在將來(lái)構(gòu)建時(shí)重復(fù)使用。

如果你想多聊一些關(guān)于 snap 包的內(nèi)容,你可以在 freenode 的 #openstack-snaps 這樣的 IRC 上找到我們。我們歡迎你的反饋和貢獻(xiàn)!感謝并祝你玩得開心!Corey


作者簡(jiǎn)介:

Corey Bryant 是 Ubuntu 的核心開發(fā)者和 Canonical 公司 OpenStack 工程團(tuán)隊(duì)的軟件工程師,他主要專注于為 Ubuntu 提供 OpenStack 的安裝包以及為 Juju 進(jìn)行 OpenStack 的魅力開發(fā)。他對(duì)開源軟件充滿熱情,喜歡與來(lái)自世界各地的人一起工作。

譯者簡(jiǎn)介:

snapcraft.io 的釘子戶,對(duì) Ubuntu Core、Snaps 和 Snapcraft 有著濃厚的興趣,并致力于將這些還在快速發(fā)展的新技術(shù)通過(guò)翻譯或原創(chuàng)的方式介紹到中文世界。有興趣的小伙伴也可以關(guān)注譯者個(gè)人的公眾號(hào): Snapcraft,最近會(huì)在上面連載幾篇有關(guān) Core snap 發(fā)布策略、交付流程和驗(yàn)證流程的文章,歡迎圍觀 :)


via: https://insights.ubuntu.com/2017/07/06/openstack-in-a-snap/

此文由 Snapcraft 公眾號(hào)翻譯,歡迎關(guān)注 : )

作者:Corey Bryant
譯者:Snapcrafter
校對(duì):wxy

本文由 LCTT 原創(chuàng)編譯,Linux中國(guó) 榮譽(yù)推出

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第一章 OpenStack基礎(chǔ) OpenStack管理的資源及提供的服務(wù)OpenStack做為一個(gè)操作系統(tǒng),...
    sgt_tiger閱讀 13,223評(píng)論 4 72
  • Nova Nova,即計(jì)算服務(wù),是OpenStack計(jì)算的彈性控制器。Nova可以說(shuō)是整個(gè)云平臺(tái)最重要的組件,Op...
    邵勝奧閱讀 4,374評(píng)論 0 8
  • Openstack Mitaka安裝部署教程 一、實(shí)驗(yàn)環(huán)境: 系統(tǒng):centos7.2-minimal 網(wǎng)絡(luò):管理...
    指間_流年閱讀 2,322評(píng)論 0 0
  • 老公是我生活的必須品,我似乎不能沒有他,因?yàn)閯e人的生活里面都有這樣的角色。 和別人不同,至少缺少這么一樣,我會(huì)沒有...
    曼谷123閱讀 395評(píng)論 0 0
  • 弗洛伊德人格理論認(rèn)為,一個(gè)嬰兒剛生下來(lái)是只有"本我"而沒有"自我"的,只有當(dāng)他開始探尋"我是誰(shuí)"這個(gè)概念的時(shí)候,他...
    道衡閱讀 19,844評(píng)論 19 21

友情鏈接更多精彩內(nèi)容