m/n/c/roleserve: implement ClusterAgent

The ClusterAgent is a runnable that is scheduled to run on all cluster
nodes. It's currently used to report the current node status to the
Cluster, and in the future can be used to implement hearbeat detection
for nodes.

Change-Id: Iff394e2cc37064d1e42fd27e40884dda83d88418
Reviewed-on: https://review.monogon.dev/c/monogon/+/341
Reviewed-by: Lorenz Brun <lorenz@monogon.tech>
diff --git a/metropolis/node/core/roleserve/roleserve.go b/metropolis/node/core/roleserve/roleserve.go
index 7107674..d7e3d2f 100644
--- a/metropolis/node/core/roleserve/roleserve.go
+++ b/metropolis/node/core/roleserve/roleserve.go
@@ -127,6 +127,10 @@
 		return fmt.Errorf("failed to launch updater: %w", err)
 	}
 
+	if err := supervisor.Run(ctx, "cluster-agent", s.runClusterAgent); err != nil {
+		return fmt.Errorf("failed to launch cluster agent: %w", err)
+	}
+
 	if err := supervisor.Run(ctx, "kubernetes-worker", s.runKubernetesWorkerLauncher); err != nil {
 		return fmt.Errorf("failed to start kubernetes-worker launcher: %w", err)
 	}