Linux中國

在 Snap 中玩轉 OpenStack

OpenStack 非常複雜,許多社區成員都在努力使 OpenStack 的部署和操作更加容易。其中大部分時間都用來改善相關工具,如:Ansible、Puppet、Kolla、Juju、Triple-O 和 Chef (僅舉幾例)。但是,如果我們降低一下標準,並且還能使包的體驗更加簡單,將會怎樣呢?

我們正在努力通過 snap 包來實現這一點。snap 包是一種新興的軟體分發方式,這段來自 snapcraft.io 的介紹很好的總結了它的主要優點:snap 包可以快速安裝、易於創建、安全運行而且能自動地事務化更新,因此你的應用程序總是能保持最新的狀態並且永遠不會被破壞。

捆綁軟體

單個 snap 包可以內嵌多個不同來源的軟體,從而提供一個能夠快速啟動和運行的解決方案。當你安裝 snap 包時,你會發現安裝速度是很快的,這是因為單個 snap 包捆綁了所有它需要的依賴。這和安裝 deb 包有些不同,因為它需要下載所有的依賴然後分別進行安裝。

Snap 包製作簡單

在 Ubuntu 工作的時候,我花了很多時間為 Debian 製作 OpenStack 的安裝包。這是一種很特殊技能,需要花很長時間才能理解其中的細微差別。與 snap 包相比,deb 包和 snap 包在複雜性上的差異有天壤之別。snap 包簡單易行,並且相當有趣。

Snap 包的其它特性

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

OpenStack snap 包介紹

現在,下面這些項目已經有了相應的 snap 包:

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

這些 snpa 包已經能讓我們部署一個簡單可工作的 OpenStack 雲。你可以在 github 上找到所有這些 OpenStack snap 包的源碼。有關 OpenStack snap 包更多的細節,請參考上游存儲庫中各自的 README。在那裡,你可以找到更多有關管理 snap 包的信息,比如覆蓋默認配置、重啟服務、設置別名等等。

想要創建自己的 OpenStack snap 包嗎?

查看 snap cookie 工具。我很快就會寫一篇博文,告訴你如何使用 snap cookie 工具。它非常簡單,並且能幫助你在任何時候創建一個新的 OpenStack snap 包。

測試 OpenStack snap 包

我們已經用簡單的腳本初步測試了 OpenStack snap 包。這個腳本會在單個節點上安裝 sanp 包,還會在安裝後提供額外的配置服務。來嘗試下吧:

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

這樣,我們就已經在 Ubuntu Xenial(16.04) 上做了所有的測試。要注意的是,這將在你的系統上安裝和配置相當多的軟體,因此你最好在可自由使用的機器上運行它。

追蹤 OpenStack

現在,你可以從 snap 商店的邊緣通道來安裝 snap 包,比如:

sudo snap install --edge keystone

OpenStack 團隊正在努力使 CI/CD 配置到位,以便讓 snap 包的發布能夠交叉追蹤 OpenStack 的發布(比如一個追蹤 Ocata,另一個追蹤 Pike 等)。每個 軌道 track 都有 4 個不同的通道。每個軌道的邊緣通道將包含 OpenStack 項目對應分支最近的內容,測試、候選和穩定通道被保留用於已發布的版本。這樣我們將看到如下的用法:

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

其它

我們可以使用多個環境變數來簡化 snap 包的製作。這裡 有相關的說明。實際上,你無需深入的研究他們,但是在安裝完 snap 包後,你也許會想要了解這些位置:

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

這是 snap 包和它所有的文件掛載的位置。所有東西都是只讀的。比如我當前安裝的 keystone,$SNAP 就是 /snap/keystone/91。幸好,你不需要知道當前版本號,因為在 /snap/keystone/ 中有一個軟鏈接(LCTT 譯註:/snap/keystone/current/)指向當前正在使用版本對應的文件夾。

$ 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

這個目錄用於存放系統數據,對於 snap 包的多個修訂版本這些數據是共用的。在這裡,你可以覆蓋默認配置文件和訪問日誌文件。

$ 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

嚴格限制

每個 snap 包都是在一個由 seccomp 和 AppArmor 策略構建的嚴格限制的環境中運行的。更多關於 snap 約束的細節可以在 這裡 查看。

snap 包即將到來的新特性和更新

我正在期待 snap 包一些即將到來的新特性和更新(LCTT 譯註:此文發表於 7 月 6 日):

  • 我們正在致力於實現 libvirt AppArmor 策略,這樣 nova-hypervisor 的 snap 包就能夠訪問 qcow2 的 支持文件 backing files
    • 現在,作為一種變通方法,你可以將 virt-aa-helper 放在 complain 模式下:sudo aa-complain /usr/lib/libvirt/virt-aa-helper
  • 我們還在為 snapd 開發額外的介面策略,以便為部署的實例啟用網路連接。
    • 現在你可以在 devmode 模式下安裝 nova-hypervisor snap 包,它會禁用安全限制:snap install -devmode -edge nova-hypervisor
  • 自動連接 nova-hypervisor 的介面。我們正在努力實現在安裝時自動定義 nova-hypervisor 介面。
    • 定義 AppArmor 和 seccomp 策略的介面可以允許 snap 包訪問系統的資源。
    • 現在,你可以手動連接需要介面,在 nova-hypervisor snap 包的 README 中有相關的描述。
  • 命令自動定義別名。我們正在努力實現 snap 包在安裝時為命令自動定義別名。
    • 這使得我們可以使用傳統的命令名。安裝 snap 包後,你將可以使用 nova-manage db sync 而無需再用 nova.manage db sync
    • 現在,你可以在安裝 snap 包後手動設置別名,比如:snap alias nova.manage nova-manage。如想獲取更多細節請查看 snap 包的 README 。
  • 守護進程自動定義別名。當前 snappy 僅支持為命令(非守護進程)定義別名。一旦針對守護進程的別名可用了,我們將設置它們在安裝的時候自動配置。
    • 這使得我們可以使用額外的單元文件名。我們可以使用 systemctl restart nova-compute 而無需再用 systemctl restart snap.nova.nova-compute
  • snap 包資產跟蹤。這使得我們可以追蹤用來構建 snap 包的版本以便在將來構建時重複使用。

如果你想多聊一些關於 snap 包的內容,你可以在 freenode 的 #openstack-snaps 這樣的 IRC 上找到我們。我們歡迎你的反饋和貢獻!感謝並祝你玩得開心!Corey

作者簡介:

Corey Bryant 是 Ubuntu 的核心開發者和 Canonical 公司 OpenStack 工程團隊的軟體工程師,他主要專註於為 Ubuntu 提供 OpenStack 的安裝包以及為 Juju 進行 OpenStack 的魅力開發。他對開源軟體充滿熱情,喜歡與來自世界各地的人一起工作。

譯者簡介:

snapcraft.io 的釘子戶,對 Ubuntu Core、Snaps 和 Snapcraft 有著濃厚的興趣,並致力於將這些還在快速發展的新技術通過翻譯或原創的方式介紹到中文世界。有興趣的小夥伴也可以關註譯者個人的公眾號: Snapcraft,最近會在上面連載幾篇有關 Core snap 發布策略、交付流程和驗證流程的文章,歡迎圍觀 :)

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

作者:Corey Bryant 譯者:Snapcrafter 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
2
感覺很糟
1
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國