Installation
Preparation
A Linux server is required and Debian is fine, though you may prefer Ubuntu which is what the developers use. This is a light-weight solution and 4 cores and 4G RAM is all you need to get started.
You usually run out of RAM first. If you want to cluster and run Windows VMs, start with 16 Gigs.
The sweet spot for a small cluster is 3 nodes with 16G RAM. Though after a few years you’ll have a lot of sprawl and wish you had 32G. Avoid ceph for small scale. It’s complex and RAM intensive.
Networking
It’s a good idea to use the hosts file so cluster members can easily find each other. If you have more than one interface and want to use a dedicated network for cluster communication, this is a good place to start.
sudo sh -c 'cat <<EOF >> /etc/hosts
10.0.0.1 debian1
10.0.0.2 debian2
10.0.0.3 debian3
10.0.0.4 debian4
EOF'
Storage
Incus recommends an empty zfs or btrfs1 partition so that you can snapshot your VMs and containers. It’s not required, but useful. If you don’t have a spare disk, create an extra partition to your boot disk during the OS install.
I use /dev/sdb in this example. Wipe it and install the BTRFS programs, but let Incus handle the rest.
sudo wipefs -a /dev/sdb
sudo apt install btrfs-progs
Open File Limits
Running many containers can use up the default number of file handles. You should increase that on the host.
sudo vi /etc/security/limits.d/10-nofile.conf
# <domain> <type> <item> <value>
* soft nofile 65535
* hard nofile 65535
sudo vi /etc/systemd/system.conf
DefaultLimitNOFILE=65535
# also increase the system wide file limits
sudo vi /etc/sysctl.d/99-limits.conf
fs.file-max = 200000
sudo reboot
Kernel (optional)
Your stock kernel from Debian is fine, but the current kernel is about 10% faster for some things (especially for ZFS at time or writing). It also happens that Stéphane Graber, the lead developer of Incus, as well as Linus Torvalds and others run the current kernel.
Though I’ve had several showstopping bugs on older hardware and it’s caused DKMS issues, so I recommend skipping this at this point.
But if you must, use a build forked directly from the torvalds/linux repo2.
Note
- These kernels aren’t signed by a trusted distribution key, so you may need to turn off secure boot.
- If you’re building DKMS modules, such as for linstore (and you’ll know if you are), you’ll have an extra step..
- Stick with stock kernels if you don’t have IPMI or easy keyboard access to roll back a buggy kernel
sudo apt install -y curl gpg
sudo mkdir -p /etc/apt/keyrings/
sudo curl -fsSL https://pkgs.zabbly.com/key.asc -o /etc/apt/keyrings/zabbly.asc
sudo sh -c 'cat <<EOF > /etc/apt/sources.list.d/zabbly-kernel-stable.sources
Enabled: yes
Types: deb
URIs: https://pkgs.zabbly.com/kernel/stable
Suites: $(. /etc/os-release && echo ${VERSION_CODENAME})
Components: main
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/zabbly.asc
EOF'
# This will take the kernel from 6.12 to 6.18 on trixie at the time of writting
sudo apt update
sudo apt -y install linux-zabbly
# Reboot to apply the new kernel
sudo reboot
Installation
You can install Incus from your distro’s repo, but Zabbly’s (from the lead developer’s company) is a bit newer.
As per https://github.com/zabbly/incus
# Add their key
# sudo apt install -y curl gpg
sudo mkdir -p /etc/apt/keyrings/
sudo wget -O /etc/apt/keyrings/zabbly.asc https://pkgs.zabbly.com/key.asc
# Add the LTS repo, needed for the web user interface
sudo sh -c 'cat <<EOF > /etc/apt/sources.list.d/zabbly-incus-lts-6.0.sources
Enabled: yes
Types: deb
URIs: https://pkgs.zabbly.com/incus/lts-6.0
Suites: $(. /etc/os-release && echo ${VERSION_CODENAME})
Components: main
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/zabbly.asc
EOF'
# Then add the stable repo, to access the latest stable version of incus
sudo sh -c 'cat <<EOF > /etc/apt/sources.list.d/zabbly-incus-stable.sources
Enabled: yes
Types: deb
URIs: https://pkgs.zabbly.com/incus/stable
Suites: $(. /etc/os-release && echo ${VERSION_CODENAME})
Components: main
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/zabbly.asc
EOF'
Now you have a choice;
A Full Install - includes the Web UI and support for both containers and VMs
# A full install
sudo apt update
sudo apt -y install incus incus-ui-canonical
A Minimal Install - command line and only supports containers.
# A minimal install
sudo apt update
sudo apt -y install incus-base
The full install can add up to a gig of dependencies. If keeping it trim is important, start with a full install on just one node, and add the rest as needed. Both versions fully support clustering and all other features.
Next Steps
Install Incus on your other nodes, then start the configuration.
-
“The recommended backends are zfs and btrfs” at https://github.com/zabbly/linux ↩︎
-
https://linuxcontainers.org/incus/docs/main/howto/initialize/ ↩︎
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.