Adolfo Delorenzo 456aa8eb5b
Some checks failed
CI / Go Tests (push) Has been cancelled
CI / Build Go Binaries (amd64, linux, linux-amd64) (push) Has been cancelled
CI / Build Go Binaries (arm64, linux, linux-arm64) (push) Has been cancelled
CI / Shellcheck (push) Has been cancelled
feat: add distribution and fleet management — CI/CD, OCI, metrics, ARM64 (Phase 5)
- Gitea Actions CI pipeline: Go tests, build, shellcheck on push/PR
- Gitea Actions release pipeline: full build + artifact upload on version tags
- OCI container image builder for registry-based OS distribution
- Zero-dependency Prometheus metrics endpoint (kubesolo_os_info, boot,
  memory, update status) with 10 tests
- USB provisioning tool for air-gapped deployments with cloud-init injection
- ARM64 cross-compilation support (TARGET_ARCH env var + build-cross.sh)
- Updated build scripts to accept TARGET_ARCH for both amd64 and arm64
- New Makefile targets: oci-image, build-cross

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 11:36:53 -06:00

KubeSolo OS

An immutable, bootable Linux distribution purpose-built for KubeSolo — Portainer's ultra-lightweight single-node Kubernetes.

Status: Phase 1 — Proof of Concept

What is this?

KubeSolo OS combines Tiny Core Linux (~11 MB) with KubeSolo (single-binary Kubernetes) to create an appliance-like K8s node that:

  • Boots to a functional Kubernetes cluster in ~30 seconds
  • Runs entirely from RAM with a read-only SquashFS root
  • Persists K8s state across reboots via a dedicated data partition
  • Targets < 100 MB total image size (OS + K8s)
  • Requires no SSH, no package manager, no writable system files
  • Supports atomic A/B updates with automatic rollback (Phase 3)

Target use cases: IoT/IIoT edge, air-gapped deployments, single-node K8s appliances, kiosk/POS systems, resource-constrained hardware.

Quick Start

# Fetch Tiny Core ISO + KubeSolo binary
make fetch

# Build bootable ISO
make iso

# Test in QEMU
make dev-vm

Requirements

Build host:

  • Linux x86_64 with root/sudo (for loop mounts)
  • Tools: cpio, gzip, wget, curl, syslinux (or use make docker-build)

Runtime:

  • x86_64 hardware or VM
  • 512 MB RAM minimum (1 GB+ recommended)
  • 8 GB disk (for persistent data partition)

Architecture

Boot Media → Kernel + Initramfs (kubesolo-os.gz)
                  │
                  ├── SquashFS root (read-only, in RAM)
                  ├── Persistent data partition (ext4, bind-mounted)
                  │     ├── /var/lib/kubesolo   (K8s state, certs, SQLite)
                  │     ├── /var/lib/containerd  (container images)
                  │     └── /etc/kubesolo        (node configuration)
                  ├── Custom init (POSIX sh, staged boot)
                  └── KubeSolo (exec replaces init as PID 1)

See docs/design/kubesolo-os-design.md for the full architecture document.

Project Structure

├── CLAUDE.md              # AI-assisted development instructions
├── Makefile               # Build orchestration
├── build/                 # Build scripts, configs, rootfs overlays
├── init/                  # Custom init system (POSIX sh)
├── update/                # Atomic update agent (Go, Phase 3)
├── cloud-init/            # First-boot configuration (Phase 2)
├── test/                  # QEMU-based automated tests
├── hack/                  # Developer utilities
└── docs/                  # Design documents

Roadmap

Phase Scope Status
1 PoC: boot Tiny Core + KubeSolo, verify K8s 🚧 In Progress
2 Persistent storage, cloud-init, networking Planned
3 A/B atomic updates, GRUB, rollback Planned
4 Production hardening, signing, Portainer Edge Planned
5 OCI distribution, ARM64, fleet management Planned

License

TBD

Description
No description provided
Readme MIT 451 KiB
2026-02-13 02:27:54 +01:00
Languages
Shell 57.3%
Go 39.2%
Makefile 3.1%
Ruby 0.4%