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