OpenStack 非常復(fù)雜,許多社區(qū)成員都在努力使 OpenStack 的部署和操作更加容易遂鹊。其中大部分時(shí)間都用來改善相關(guān)工具振乏,如:Ansible、Puppet秉扑、Kolla慧邮、Juju、Triple-O 和 Chef (僅舉幾例)。但是误澳,如果我們降低一下標(biāo)準(zhǔn)拉鹃,并且還能使包的體驗(yàn)更加簡(jiǎn)單差导,將會(huì)怎樣呢郑叠?
我們正在努力通過 snap 包來實(shí)現(xiàn)這一點(diǎn)秋泳。snap 包是一種新興的軟件分發(fā)方式,這段來自 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è)不同來源的軟件铁瞒,從而提供一個(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 過程煤裙,作為 OpenStack 部署過程的一個(gè) snap 包掩完。 -
Nova
—— 這個(gè) snap 包提供 OpenStack 部署過程中的 Nova 控制器組件噪漾。 -
Nova-hypervisor
—— 這個(gè) snap 包提供 OpenStack 部署過程中的 hypervisor 組件,并且配置使用通過 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ù)况毅。來嘗試下吧:
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 商店的邊緣通道來安裝 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)境變量來簡(jiǎn)化 snap 包的制作红氯。這里 有相關(guān)的說明框咙。實(shí)際上,你無需深入的研究他們痢甘,但是在安裝完 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 包即將到來的新特性和更新
我正在期待 snap 包一些即將到來的新特性和更新(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
而無需再用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
而無需再用systemctl restart snap.nova.nova-compute
获询。
- 這使得我們可以使用額外的單元文件名旁振。我們可以使用
- snap 包資產(chǎn)跟蹤涨岁。這使得我們可以追蹤用來構(gòu)建 snap 包的版本以便在將來構(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ì)開源軟件充滿熱情,喜歡與來自世界各地的人一起工作琐馆。
譯者簡(jiǎn)介:
snapcraft.io 的釘子戶规阀,對(duì) Ubuntu Core、Snaps 和 Snapcraft 有著濃厚的興趣瘦麸,并致力于將這些還在快速發(fā)展的新技術(shù)通過翻譯或原創(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ù)推出