Installation overview
This page describes the machines, external dependencies, and prerequisites involved in a first Kibotos deployment.
Install the components in this order:
- Install ctrl and issue the first Operator enrollment key.
- Install node and join it to the cluster.
- Optional: install the Exposure gateway, install the E2B gateway, and connect instance metrics storage.
For reinstalling and upgrading, see Reinstall and upgrade. For uninstalling, see Uninstall. To evaluate on a single machine first, see Try Kibotos on a single machine.
Overview
A deployment involves the following kinds of machines. Each role has its own page.
| Role | What it needs | Credentials it uses | Documentation |
|---|---|---|---|
| Release host | Debian 13 or Ubuntu 24.04 amd64, a pinned toolchain, and the exact inputs of the two VM runtimes | Access to download upstream inputs | Building the release set |
| Operator workstation | kibo, with access to the ctrl HTTPS port and the artifact store | An Operator identity issued by ctrl | Identity and enrollment |
| Template build host | kibo-build, source code, a separate account and build directory, and the relevant build tools | No Operator, ctrl, or store credentials | Build and publish on a build host |
| ctrl host | The kibotos-ctrl package, external PostgreSQL, and an artifact store | ctrl's own PKI, database, and store credentials | Install ctrl |
| node host | The kibotos-node package, systemd, cgroup v2, readable and writable KVM/TUN devices, and access to ctrl and the store | The node identity obtained when joining the cluster | Install node |
| E2B gateway host (optional) | The kibotos-e2b package and an HTTPS reverse proxy (stateless; each instance needs its own identity) | A gateway-specific Operator identity and external API keys | Install the E2B gateway |
| Exposure gateway host (optional) | The kibotos-gw package and a tunnel to a dedicated domain (stateless; each instance needs its own identity) | A gateway-specific Operator identity; the tunnel credentials stay on the tunnel host | Install the Exposure gateway |
You can also run ctrl, the E2B gateway, and the Exposure gateway on Kubernetes or Docker from the published container images. See Run in containers. node runs only on hosts. See Install node.
External dependencies:
- The deployer runs PostgreSQL and the S3-compatible artifact store, including their availability and backups.
- All of ctrl's reads and writes must reach the PostgreSQL primary. A connection proxy or connection pool can sit in between;
kibotos-ctrl migratemust connect to the primary directly. See Connecting to the database. - For writing and evaluating times (publishing, expiration, and Exposure deadlines), ctrl uses only its own host's clock. The PostgreSQL server's clock plays no part. Clock skew on a managed database does not affect ctrl, but the hosts of ctrl and every node must have time synchronization enabled. See Time synchronization.
- Public DNS and an HTTPS reverse proxy are needed only for the E2B SDK. Kibotos's own PKI does not depend on a public CA.
- Instance metrics storage is needed only when the E2B SDK should read sandbox metrics. The deployer runs it as well. See Instance metrics storage.
- The deployer collects service and cluster metrics and logs. See Cluster and service metrics and Logs. Trace storage is also optional. See Traces.
Prerequisites
- Hosts run Debian 13, Ubuntu 24.04, or later, on amd64.
- On first installation, all components come from the same release set. Afterward, ctrl and nodes can run different versions on the same release line (release and
-rc.Nversions with the sameMAJOR.MINOR). See Rolling upgrades within a MINOR. - The source repository is not public yet, so downloading the release set from GitHub Releases requires an account with read access to the repository. Log in once with the GitHub CLI,
then download with
scripts/fetch-release.shfrom the source repository. You can copy the script to the host on its own and run it there. It downloads all assets of the given version to./kibotos-releases/<tag>/, checks the size and digest of each file, checks thatSHA256SUMScovers every file, and restores the executable bit on binaries. If any step fails, it leaves no directory behind. It does not overwrite an existing target directory. Use--dirto change the root directory:
gh auth login
bash fetch-release.sh v1.2.3
cd kibotos-releases/v1.2.3- Verify integrity in the release set directory. Checksums prove only that the files transferred intact; they do not replace trust in the source:
sha256sum --check SHA256SUMS
./kibo_1.2.3_linux_amd64 version --client --json- In the release set, only the Operator CLI is a directly executable file. All other components are delivered as Debian packages. Check their versions after installing the packages, for example with
kibotos-ctrl version --json.
Package dependencies and system accounts:
- The ctrl package depends on
ca-certificates,systemd, andsystemd-sysv. - The node package also depends on
libguestfs-tools,e2fsprogs1.47.0 or later, and AppArmor 4 or later. - Each package creates its own system accounts:
kibotos-ctrlfor ctrl,kibotos-vmmandkibotos-egressfor node,kibotos-e2bfor the E2B gateway, andkibotos-gwfor the Exposure gateway.kibotos-vmmbelongs to thekvmgroup.kibotos-egressis the account that egress processes run as. See Egress processes. /dev/kvmand/dev/net/tunmust actually exist on node hosts. Package dependencies do not check devices.
Time synchronization
Enable time synchronization on every ctrl and node host. A node uses its own clock to verify data-plane credentials. Each time ctrl reconciles with a node, it measures the clock offset between them. A node whose offset exceeds 30 seconds no longer accepts new Workspaces; its existing Workspaces keep running.
-
Both chrony and systemd-timesyncd work. Use the same kind of time source on all hosts: do not mix leap-smearing sources (most cloud providers' internal time services) with non-smearing sources (for example,
pool.ntp.org). Around a leap second, the two kinds differ by nearly one second. -
The ctrl and node service units are ordered after
time-sync.target. To make boot actually wait for clock synchronization, enable the matching wait service:sudo systemctl enable chrony-wait.service # chrony sudo systemctl enable systemd-time-wait-sync.service # systemd-timesyncd -
To confirm synchronization,
timedatectl show -p NTPSynchronizedshould printNTPSynchronized=yes. With chrony, theSystem timeline ofchronyc trackingis the offset between this machine and the time source. -
After a node joins the cluster, the
Latest sessionsection ofkibo node get <node>has two lines:Clock offsetis the offset most recently measured by ctrl (node minus ctrl), andClock syncis the synchronization status reported by the node host's kernel. TheCLOCKcolumn ofkibo node listshows the offset and marks it(over)above 30 seconds, and ctrl also logs an entry. After you fix time synchronization, the node resumes accepting Workspaces at the next reconciliation (within 1 minute).
Try Kibotos on a single machine
This page shows how to install ctrl and node on one Linux machine, together with the PostgreSQL database and object storage they depend on, then build a Template and create your first Workspace. Apart from the downloads, the steps take about fifteen minutes. Use it to evaluate Kibotos before a full deployment.
Install ctrl
This page shows how to install and initialize ctrl on a host and issue the first Operator enrollment key.