首頁 > 軟體

在 Snap 中玩轉 OpenStack

2020-06-16 17:08:56

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 包,還會在安裝後提供額外的設定服務。來嘗試下吧:

  1. gitclone https://github.com/openstack-snaps/snap-test
  2. cd snap-test
  3. ./snap-deploy

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

 

追蹤 OpenStack

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

  1. sudo snap install --edge keystone

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

  1. sudo snap install --channel=ocata/stable keystone
  2. 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/)指向當前正在使用版本對應的資料夾。

  1. $ ls/snap/keystone/current/
  2. bin etc pysqlite2-doc usr
  3. command-manage.wrapper include snap var
  4. command-nginx.wrapper lib snap-openstack.yaml
  5. command-uwsgi.wrapper meta templates
  6. $ ls/snap/keystone/current/bin/
  7. alembic oslo-messaging-send-notification
  8. convert-json oslo-messaging-zmq-broker
  9. jsonschema oslo-messaging-zmq-proxy
  10. keystone-manage oslopolicy-checker
  11. keystone-wsgi-admin oslopolicy-list-redundant
  12. keystone-wsgi-public oslopolicy-policy-generator
  13. lockutils-wrapper oslopolicy-sample-generator
  14. make_metadata.py osprofiler
  15. mako-render parse_xsd2.py
  16. mdexport.py pbr
  17. merge_metadata.py pybabel
  18. migrate snap-openstack
  19. migrate-repository sqlformat
  20. netaddr uwsgi
  21. oslo-config-generator
  22. $ ls/snap/keystone/current/usr/bin/
  23. 2to3 idle pycompile Python2.7-config
  24. 2to3-2.7 pdb pydoc python2-config
  25. cautious-launcher pdb2.7 pydoc2.7 python-config
  26. compose pip pygettext pyversions
  27. dh_python2 pip2 pygettext2.7 run-mailcap
  28. easy_install pip2.7 python see
  29. easy_install-2.7print python2 smtpd.py
  30. edit pyclean python2.7
  31. $ ls/snap/keystone/current/lib/python2.7/site-packages/
  32. ...

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

這個目錄用於存放系統資料,對於 snap 包的多個修訂版本這些資料是共用的。在這裡,你可以覆蓋預設組態檔和存取紀錄檔檔案。

  1. $ ls/var/snap/keystone/common/
  2. etc fernet-keys lib lock log run
  3. $ sudols/var/snap/keystone/common/etc/
  4. keystone nginx uwsgi
  5. $ ls/var/snap/keystone/common/log/
  6. 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中國 榮譽推出

本文永久更新連結地址http://www.linuxidc.com/Linux/2017-08/146557.htm


IT145.com E-mail:sddin#qq.com