post index all on one page rss feed

notes on learning incus and incusOS

Gonna be documenting some progress learning incus + incus-os. Very early, but figured I can share out in an open 🧵

I’ve been playing around with incus-os and incus for container management and deployment. Local development is on macOS with apple silicon, production is an x86_64 single board computer. Passed a small milestone last night, and another one this morning.

Figured out how to expose an incus instance network ip in colima. By default, instances are not attached to the host network, so adding a network device ‘just worked’ and was routed and everything

incus config device add nginx eth1 nic network=col0

I could then curl the ip on the col0 network, and it routed to the internal instance, instead of having to colima ssh curl nginx.incus

on the physical production server

This afternoon, I did the same but with my physical server at home.

The device config above doesn’t need to happen in linux if you are just doing local development, but it was good for me to do, because it does need to happen in production to have incus-os public ip address go to a particular instance, say caddy or nginx.

Its a bit more involved on real hardware, because you need to tell incus-os to create a network with the physical interface as part of it:

First tell incus-os to expose enp2s0 hardware to the instances by adding the instances role to whatever addresses you want available:

incus admin os system network edit

Then, tell incus to create a network with the parent as that device.

incus network create internet parent=enp2s0 --type=physical

Those two steps were handled automatically by colima during install for me. Now, its the same as yesterday:

incus config device add nginx eth1 nic network=internet

Personal impressions

I think this (literally?) bridges the gap that a lot of tools and tutorials miss - going from running something reachable from just the development computer, to all devices on the local network, to all devices on the internet.

I really like that these are all shell commands, that can optionally be serialized and imported as yaml configs (though i wish it wasnt yaml). Its flexible, human readable (unlike grpc and k8s without specialized tools). I do think that its helped that I am visualizing VirtualBox / UTM, and using the incus webui to understand how these components fit together. There definitely is some absorption time around getting a feel for what is a device, what is a config, what is an instance. But so far nothing has felt very out of place, nor have I felt the horrors of 50 ways to do things.

post index