m/n/core/roleserve: rework cluster membership, reuse control plane connections

This changes up roleserver internals to simplify the handling of cluster
membership state. The end goal is to allow reusing control plane gRPC
connections across different components in a node, but the refactor goes
a bit beyond that.

Ever since the introduction of the rpc resolver, we have effectively
simplifies the control plane startup problem. This is because the
resolver allows the rest of the system to dynamically switch between
different gRPC endpoints for the control plane.

What this means is that some of the existing complexity in the
roleserver (which predates the resolver) can be thrown away. Notably, we
remove the ClusterMembership structure, and replace it with two
significantly simpler structures that represent two separate facts about
he local node:

1. localControlPlane carries information about whether this node has a
   locally running control plane. This is only used by the statuspusher
   (to report whether the control plane is running) and by the
   Kubernetes control plane.

2. curatorConnection carries the credentials, resolver and an open gRPC
   connection to the control plane, and is the only roleserver
   EventValue now used by the vast majority of the roleserver runnables.

The resulting code, especially inside the control plane roleserver
runnable, is now less complex, at the cost of a bit of an ugly refactor.

Change-Id: Idbe1ff2ac3bfb2d570bed040a2f78ccabb66caba
Reviewed-on: https://review.monogon.dev/c/monogon/+/1749
Tested-by: Jenkins CI
Reviewed-by: Lorenz Brun <lorenz@monogon.tech>
16 files changed
tree: d1803d9e307e5aea697c02fcb17e82e2c4fb605d
  1. .github/
  2. build/
  3. cloud/
  4. go/
  5. intellij/
  6. metropolis/
  7. net/
  8. third_party/
  9. tools/
  10. .bazelignore
  11. .bazelproject
  12. .bazelrc
  13. .bazelrc.sandboxroot
  14. .bazelversion
  15. .git-ignore-revs
  16. .gitignore
  17. BUILD.bazel
  18. CODING_STANDARDS.md
  19. go.mod
  20. go.sum
  21. LICENSE
  22. README.md
  23. SETUP.md
  24. WORKSPACE
README.md

Monogon Monorepo

This is the main repository containing the source code for the Monogon Platform.

This is pre-release software - take a look, and check back later!

Environment

Our build environment is self-contained and requires only minimal host dependencies:

  • A Linux machine or VM.
  • Bazelisk >= v1.15.0
  • A reasonably recent kernel with user namespaces enabled.
  • Working KVM with access to /dev/kvm (if you want to run tests).

Our docs assume that Bazelisk is available as bazel on your PATH.

Refer to SETUP.md for detailed instructions.

Monogon OS

Run a single node demo cluster

Build CLI and node image:

bazel build //metropolis/cli/dbg //:launch -c dbg

Launch an ephemeral test node:

bazel test //:launch -c dbg --test_output=streamed

Run a kubectl command while the test is running:

bazel-bin/metropolis/cli/dbg/dbg_/dbg kubectl describe node

Test suite

Run full test suite:

bazel test -c dbg //...