I’m playing with Uncloud to see if it is something we can use at $WORK. Pretty impressed with it already, as I’ve written something worse pgo, that was (obviously) not good enough. Uncloud does: implement a subset of the Docker(-compose) API, uses gRPC and wireguard to create mini network; just brilliant. Haven’t seen prometheus metrics yet, although Caddy is used for the proxy, but more prometheus metrics would make sense. (Which you can then observe through a cluster hosted prometheus…?)

Anyway the installer logs in into your machine and turns it into a cluster node. I kinda dislike these kind of things and prefer packages. Hence I, quick-and-dirty, made two Debian packages, that allow me to provision a machine and then initialize the cluster.

% sudo dpkg -i uncloud-corrosion_0.2.2_amd64.deb
Unpacking uncloud-corrosion (0.2.2) ...
Setting up uncloud-corrosion (0.2.2) ...
info: Selecting UID from range 100 to 999 ...

% sudo dpkg -i uncloudd_0.17.1_amd64.deb
Selecting previously unselected package uncloudd.
(Reading database ... 440995 files and directories currently installed.)
Preparing to unpack uncloudd_0.17.1_amd64.deb ...
Unpacking uncloudd (0.17.1) ...
Setting up uncloudd (0.17.1) ...
Created symlink /etc/systemd/system/multi-user.target.wants/uncloudd.service → /usr/lib/systemd/system/uncloudd.service.

And then systemctl start uncloudd. And add your self to the uncloud group:

% sudo adduser miek uncloud
info: Adding user `miek' to group `uncloud' ...

Next install the local CLI to interact with the cluster with go install github.com/psviderski/uncloud/cmd/uncloud@latest, note you manually need to copy or alias uncloud to uc

% uncloud machine init --no-caddy --no-dns --no-install --context test miek@172.31.76.38
Cluster initialised with machine 'machine-uco9' and saved as context 'test' in your local config (/home/miek/.config/uncloud/config.yaml)
Current cluster context is now 'test'.
Cluster is ready.

Next deploy something! First we need to “reserve” a domain, need to figure out what this means and how to make it local. Note this is following the demo-app-deploy.

% uncloud dns reserve
Reserved cluster domain: q3baqx.uncld.dev

Next:

% uncloud run --name excalidraw --publish 80/https excalidraw/excalidraw
[+] Running service excalidraw (replicated mode) 11/11
 ✔ Container excalidraw-p2ss on machine-uco9  Healthy        35.1s
   ✔ Image excalidraw/excalidraw on machine-uco9  Pulled     3.6s

excalidraw endpoints:
 • https://excalidraw.q3baqx.uncld.dev → :80

Now this machine is in my internal network, if even with wireguard this is not reacheable.