v0.0.1
psviderski/uncloudv0.0.1Sep 23, 2024by psviderski
AI Summary
This is the initial release (v0.0.1) of uncloud, a distributed cluster management system that enables machines to form a cluster network using WireGuard VPN and gRPC communication. The release includes a CLI tool for cluster management, a daemon (uncloudd) for running cluster services, SSH-based remote command execution, and support for establishing user-space WireGuard tunnels between machines.
Key Highlights
- Initial release establishing a distributed cluster management system with WireGuard VPN networking
- gRPC-based communication for cluster requests and machine management
- CLI tool with commands: init cluster, machine add, machine list, machine token
- Daemon (uncloudd) implementation with systemd integration and readiness reporting
- SSH-based remote command execution and tunnel establishment between cluster nodes
New Features
- Cluster service with local state management and IPAM (IP Address Manager)
- Machine gRPC service for cluster operations
- WireGuard tunnel support for peer-to-peer encrypted networking
- SSH-based command execution (cmdexec) for remote host management
- Token-based authentication for adding machines to clusters
- Docker networkdb as a key-value store for cluster state
- CLI commands: init cluster, machine add, machine list, machine token
- Installation script (install.sh) for deploying uncloudd daemon
- IPv6 address assignment derived from machine public keys
- Network/tunnel package for user-space WireGuard tunnel establishment
- Management IP configuration for daemon listening
- Systemd service with Type=notify for daemon lifecycle management
Full Release Notes
## Changelog * 58fb3105cdb66b4d069b3343602e97cb437ea036 Cluster service implementation with basic local state and IPAM manager * afe9c13283610564be8dad866799741a831f356e Implement grpc server in the daemon to receive cluster requests * c99cdcd95f025fdf34f4499b75b5f4837dd360a9 Initial commit * 92e3b21589f239b246db6bf573dcd5a322ea81e5 add -profile flag * cc7b4dcc8d3c80b10711d16bee82e63cec79d0c1 add .env file to mise * 28c73d9f0fcef576e93e15ff794a53d44e6e8458 add .goreleaser.yaml config * e9f4ad708319366f1116a535a6c3a803ee08d884 add Machine gRPC service * c56f81bac2afb891c8b777ce1393ef721abece0e add TODO * a64caf34a7b039da564f59a3395bcbd9af50ada8 add Token RPC endpoint to grab a machine token for adding it to a cluster * 4e042be7b7727a4db19282fd5765e2bb87174fa7 add `machine list` command and corresponding RPC endpoint * 3f71aec2752a8f805bae8a06bb5ef1bd4cd83961 add `uncloud machine init` command to initialise a new cluster on local machine * 945eff471b10e0e4e24d07d8044943c8a0660f7c add `uncloud machine token` command to print machine token to add machine to cluster * 3f13f6c0e624dd05710dd385ac61702072b60a21 add cmdexec package to execute commands on remote hosts via SSH * c37b1f7d95bcdbdfd361f2a589fc2f9ab57a03ff add comment * 3f497b5e58e8976ba90f971332830f1c5a836440 add couple TODOs * da0c9bb16e13dd3c92acbdd4b52a99fc27cd4248 add expriment with using talos discovery service * c103b6ed6ddcfde0167af9725c7c2a16039c6674 add install.sh script to install uncloudd daemon on a machine * 222edb76474a840a136da936e1acc522f405f975 add machine config * fd396dd91f0f1576a56f51c839ce61fe88c67113 add management IP to machine and peer configs, update daemon to listen on it * c93206e6d172b96e65f03154c809671addd740fb add network/tunnel package to establish user space WG tunnel to a machine * cfa210568458a7464d0bcae5219e2a1328c36a77 add public IP to the end of endpoint list * fd314bcf657f4871b076f4b02c04d79cbcde0f32 add ssh destination to connection config * 32448381acf132f93869fffb4b3cea945b5032d7 add the initial draft of the design doc * 41098d00b8d9a098ceac850b16b0a5056628d112 assign ipv6 address to each machine derived from their public keys * 8e1e85ef7780d158a6b69cb960dc65a29aaecf0e basic PoC of using Docker networkdb as a general purpose key-value store * 73be824f30a8456314d818f136d01af47ea61d2e convert systemd unit to Type=notify and report readiness * a980cb794198787850f7f69ac8f2d069a83ac846 create uncloud Linux group in install script * ea8dfca14c2ed86093224b87d3fef7f83b34e215 delete old unused ClusterClient * d66818ea775070bd1bc6ca34b8f5798113306589 detect if the machine is already initialised * fb236fb922ed5fe4ca78cfc18d7f908d3a3aa214 establish SSH connection when adding a new machine * e6d8a339281b895fd8635c8daea04a4a908179d9 experiment: Serf transport for go-ds-crdt * 43e2bf86fb270570aba2da79af39053a55872d0a fix concurrent output in install.sh * fdb277c2dfd4acb4ce107ad9984089369728a442 fix internal/machine package to build on darwin * f49e91b41fa736a0861c99a122683e53c5e303bb fix parse token, return out in cmdexec run * eed2c8809c4ba7ebbdd37a899f25c5d2a0bef518 generate user key for new cluster and add it to peers on bootstrap machine * 9e44d303289b0d38ce98468598b6441c6a875b79 implement CLI init cluster, add SSH and WireGuard cluster connectors * e074b6855fb0ddecbaa6daf7e17f610de23dbd89 implement uncloudd daemon that starts a WireGuard network without peer probing * b4606b939b7fdf269c66d6a35b99cce24323d2e7 init machined cli * bd53e3f20ef663546931f4bd9ded1139d4ac411d machine add: configure remote machine to join the cluster network * 6856a77b566c7f24977c55caa8865dc2add546c6 minor * 4656bdd132d1060ca50887d9a24323ebb1116ab7 minor config refactor and management IP * 84dd57a07cb09533463a7b80ad1073830e0e0a5a minor install.sh * 7e93abb9722602a6e1d36668199b6222838a71ab move InitCluster to Machine * 69c259aa8d9da3e8a75f42a3ea4f90b8ae57bd32 move daemon pkg to top level * 93a9e322f42abeed826f93e75c00f4967bcfed40 provision machine when adding it to the cluster * a59950631b5659884c71648c3a70b43bdc26717e reduce log level for WG tunnel * aad2ac20858721f5473019da5505616aaae7af31 refactor Cluster gRPC service, add common type converters from/to netip * 86d949ae488fa4c16cbd15b67237f53f92d7ee21 refactor Machine to run gRPC server to init cluster * 03c2c0df39cd3cacc0386440a0e6c0ad36e8f70b refactor cluster connection in CLI * da72c0515a858ea3574c6d7ab71533cf62f7050e refactor cluster server to initialise state when initialising cluster, allow machine to be reinitialised * 31e2b8456fc54c028cd9eb2ece8e10053eff21ce refactor daemon to use Machine to manage all components * 5dc0832449766daf9814cee2060213d2db48732f refactor network operations into networkController to start/stop when joining/leaving cluster * 7ef7475dc29bf6fb31fed6d78972f82720725930 remove redundant logging in install.sh * 2c46c0a7d504eebe8244867449f7d0fe518a8edd rename Cluster to Server * 45cacfa6f5f8b263c788d929649b34b194f19234 rename Machine message to MachineInfo to not conflict with the service name * c58c99e0616f13cd105cd0e72accd800d0268f65 rename machine config to state * 4e2640bbd25625f83819c48d08dfcc8cc73f81dd rename machines to connections in config * 38c0e65ac2fc6c5ad333111a27c03b5be95f7775 retrieve nodes from remote peers * d735d568b36759bb1c3f91ed00fd20c8d9cbdce7 run install.sh script when initialising a cluster on the init machine * ddf7d2335170263d528d92e4fd8946e48179b19a set uncloud group on the unix socket to allow configured non-root users to access it * 1a5a78e4b35f5ce67073e86fa3bd077a9dc021e7 setup Docker network and iptables forwarding when starting machine * 160a15fe8f4ea009efb47a623d0a3677760a9ddb split cluster Server into Machine and Server * 676f22a935d72f9d8b0f051b68b5d9c0d2b765e0 start WG network when the machine is initialised via RPC call * 18d5680863fcdeb89f7c2d7c530c8d2efae143c9 temporary disable green * d369884f7a30fd92276f9a233ce600d7b568c075 uncloud CLI tool and 'machine add' command to bootstrap a new cluster * 5f790b77157fa32087403ad682d19fd127b37726 update .gitignore * c77c34fc6c3f945b7af2a8b49998704b1aff5f9a update .gitignore * 08bbca3985f7128d67e482acadd3f1db79772704 update README * ca14e2b2b11e3f32417b40b5b2925945a9adcc91 update goreleases: release 2 binaries * 2514c804dccf1d222cca8d413b6852f9dc21fb34 update init command to send RPC calls over SSH tunnel * 47073f017f1fe9a4653c17009a35fe80efe96011 update network peers when new machine added