LXD 2.15 中的存儲管理
長久以來 LXD 已經支持多種存儲驅動。用戶可以在 zfs、btrfs、lvm 或純目錄存儲池之間進行選擇,但他們只能使用單個存儲池。一個被頻繁被提到的需求是不僅支持單個存儲池,還支持多個存儲池。這樣,用戶可以維護一個由 SSD 支持的 zfs 存儲池用於 I/O 密集型容器,另一個簡單的基於目錄的存儲池用於其他容器。幸運的是,現在這是可能的,因為 LXD 在幾個版本後有了自己的存儲管理 API。
創建存儲池
新安裝 LXD 沒有定義任何存儲池。如果你運行 lxd init
,LXD 將提供為你創建一個存儲池。由 lxd init
創建的存儲池將是創建容器的默認存儲池。
創建更多的存儲池
我們的客戶端工具使得創建額外的存儲池變得非常簡單。為了創建和管理新的存儲池,你可以使用 lxc storage
命令。所以如果你想在塊設備 /dev/sdb
上創建一個額外的 btrfs 存儲池,你只需使用 lxc storage create my-btrfs btrfs source=/dev/sdb
。讓我們來看看:
在默認存儲池上創建容器
如果你從全新安裝的 LXD 開始,並通過 lxd init
創建了一個存儲池,LXD 將使用此池作為默認存儲池。這意味著如果你執行 lxc launch images:ubuntu/xenial xen1
,LXD 將為此存儲池上的容器的根文件系統創建一個存儲卷。在示例中,我們使用 my-first-zfs-pool
作為默認存儲池。
在特定存儲池上創建容器
但是你也可以通過傳遞 -s
參數來告訴 lxc launch
和 lxc init
在特定存儲池上創建一個容器。例如,如果要在 my-btrfs
存儲池上創建一個新的容器,你可以執行 lxc launch images:ubuntu/xenial xen-on-my-btrfs -s my-btrfs
:
創建自定義存儲卷
如果你其中一個容器需要額外的空間存儲額外的數據,那麼新的存儲 API 將允許你創建可以連接到容器的存儲卷。只需要 lxc storage volume create my-btrfs my-custom-volume
:
連接自定義卷到容器中
當然,這個功能是有用的,因為存儲 API 讓你把這些存儲卷連接到容器。要將存儲卷連接到容器,可以使用 lxc storage volume attach my-btrfs my-custom-volume xen1 data /opt/my/data
:
在容器之間共享自定義存儲卷
默認情況下,LXD 將使連接的存儲卷由其所連接的容器寫入。這意味著它會將存儲卷的所有權更改為容器的 id 映射。但存儲卷也可以同時連接到多個容器。這對於在多個容器之間共享數據是非常好的。但是,這有一些限制。為了將存儲卷連接到多個容器,它們必須共享相同的 id 映射。讓我們創建一個額外的具有一個隔離的 id 映射的容器 xen-isolated
。這意味著它的 id 映射在這個 LXD 實例中將是唯一的,因此沒有其他容器具有相同的id映射。將相同的存儲卷 my-custom-volume
連接到此容器現在將會失敗:
但是我們讓 xen-isolated
與 xen1
有相同的映射,並把它重命名為 xen2
來反映這個變化。現在我們可以將 my-custom-volume
連接到 xen1
和 xen2
而不會有問題:
總結
存儲 API 是 LXD 非常強大的補充。它提供了一組基本功能,有助於在大規模使用容器時處理各種問題。這個簡短的介紹希望給你一個印象,你可以做什麼。將來會有更多介紹。
本篇文章最初在 Brauner 的博客中發布。
via: https://insights.ubuntu.com/2017/07/12/storage-management-in-lxd-2-15/
作者:Christian Brauner 譯者:geekpi 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive