LXD on LVM - thinpool setup
No matter what I tried I couldn't convince "lxd init" to create, or configure an existing, LVM thinpool for it's use!
So I ended up doing it rather more manually...
Basic requirements before getting started at all:
apt install lxd thin-provisioning-tools
Then create a thinpool, in this case using all of the remaining space on the "local" volume group:
lvcreate --type thin-pool --thinpool LXDPool -l 100%FREE local
Now we can do the lxd init bit, here's transcript of that process for me (the lines without a typed answer used the default):
# lxd init
Would you like to use LXD clustering? (yes/no) [default=no]: 
Do you want to configure a new storage pool? (yes/no) [default=yes]: no
Would you like to connect to a MAAS server? (yes/no) [default=no]: 
Would you like to create a new local network bridge? (yes/no) [default=yes]: 
What should the new bridge be called? [default=lxdbr0]: 
What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: 
What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: 
Would you like LXD to be available over the network? (yes/no) [default=no]: 
Would you like stale cached images to be updated automatically? (yes/no) [default=yes] 
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]: yes
config: {}
cluster: null
networks:
- config:
    ipv4.address: auto
    ipv6.address: auto
  description: ""
  managed: false
  name: lxdbr0
  type: ""
storage_pools: []
profiles:
- config: {}
  description: ""
  devices:
    eth0:
      name: eth0
      nictype: bridged
      parent: lxdbr0
      type: nic
  name: default
During that process I chose not to create a storage pool. Instead that had to be done afterwards:
lxc storage create default lvm source=local lvm.thinpool_name=LXDPool
Not forgetting that the name "default" is actually just a name, so you also need to set it as the actual default:
lxc profile device add default root disk path=/ pool=default
After that new containers can be created as normal with lxc launch and they will be allocated space from the LVM thinpool.
Comments
Thanks alot for this wrapup, it is a freaking hassle to set up lxd on an existing LVM volume without getting a completely wierd setup of pseudo-devices, and the documentatoin really doesn't help here. Your guide helped a lot to this. Thanks.
- zeus
blog.tastatursport.de
Thanks, that helped me a lot! I approached it different, though. I did not create a pool with 'lvcreate'. Instead, I did this:
lxc storage create pool lvm source=<ExistingVgName> lvm.vg.force_reuse=true lvm.use_thinpool=true lvm.thinpool_name=lxd-pool
This created a proper thin pool 'lxd-pool' in my existing lvm vg, instead of some loop to a file. Afterwards your 'lxc profile' was still necessary:
lxc profile device add default root disk path=/ pool=pool
Thanks a lot!
Kristof