
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。
- 現(xiàn)在,作為一種變通方法,你可以將 virt-aa-helper 放在 complain 模式下:
- 我們還在為 snapd 開發(fā)額外的接口策略,以便為部署的實(shí)例啟用網(wǎng)絡(luò)連接。
- 現(xiàn)在你可以在 devmode 模式下安裝 nova-hypervisor snap 包,它會(huì)禁用安全限制:
snap install -devmode -edge nova-hypervisor。
- 現(xiàn)在你可以在 devmode 模式下安裝 nova-hypervisor snap 包,它會(huì)禁用安全限制:
- 自動(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 。
- 這使得我們可以使用傳統(tǒng)的命令名。安裝 snap 包后,你將可以使用
- 守護(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/

作者:Corey Bryant
譯者:Snapcrafter
校對(duì):wxy
本文由 LCTT 原創(chuàng)編譯,Linux中國(guó) 榮譽(yù)推出