Adolfo Delorenzo d900fa920e feat: add cloud-init Go parser (Phase 2)
Implement a lightweight cloud-init system for first-boot configuration:
- Go parser for YAML config (hostname, network, KubeSolo settings)
- Static/DHCP network modes with DNS override
- KubeSolo extra flags and API server SAN configuration
- Portainer Edge Agent and air-gapped deployment support
- New init stage 45-cloud-init.sh runs before network/hostname stages
- Stages 50/60 skip gracefully when cloud-init has already applied
- Build script compiles static Linux/amd64 binary (~2.7 MB)
- 17 unit tests covering parsing, validation, and example files
- Full documentation at docs/cloud-init.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 10:39:05 -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%