selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

K16S logo

Self-host K16S

2026-09-08

CKA/CKS exam simulator with real kubeadm clusters

BetaSource AvailableOther
Updatedlast month
LanguageShell
Setup difficultyAdvanced
Stars
225
CPU
4 vCPUs
RAM
8 GB RAM
Storage
30 GB disk
Port
8080 (K16S exam server)
Requires
Incus
Install with Docker
K16S exam simulator UI showing exam selection and timerK16S browser-based terminal with kubectl session

What is K16S?

K16S is a self-hosted exam simulator for the CKA and CKS Kubernetes certifications. It deploys an authentic kubeadm cluster with Incus LXC containers acting as worker nodes, each running its own systemd, containerd, and kubelet. This reproduces the real exam environment including systemctl access, etcd backup/restore, static pod manifests, and crictl debugging. The simulator includes two CKA mock exams (18 questions each) and three CKS mock exams (15-18 questions each) covering the 2026 curricula, with per-question setup scripts that break the cluster and validation scripts that grade fixes against real cluster state. It runs in three modes: on a VPS or VM (Debian 13, Ubuntu 22.04 or newer), on a laptop via Lima VM (macOS/Linux, 16 GB+ RAM), or lightweight via kind in Docker (~2 GB RAM). The web UI provides a browser-based terminal (ttyd) and timed exam sessions with automated grading. Licensed under PolyForm Noncommercial 1.0.0 — available at no cost for personal and non-commercial purposes.

Should you self-host K16S?

K16S scores 43/100 on selfhost.directory (how scoring works) and ranks #22 of 30 in Education. It has 225 GitHub stars.

There was no stable release in the past 12 months, so check the repository's recent activity before you rely on it.

Setup is advanced: plan for several services and some ongoing maintenance. It is Other-licensed and written mostly in Shell.

Its closest alternative on selfhost.directory is CTFd (70/100, 6 894 stars). It scores higher overall, so compare the two before you pick. See K16S vs CTFd side by side.

Features

  • Automated grading against real cluster state
  • Browser-based terminal
  • CKA mock exams
  • CKS mock exams
  • Crictl debugging
  • Custom question support
  • Etcd backup and restore
  • Multiple deployment modes
  • Per-question setup and grading
  • Real kubeadm cluster
  • SSH access to worker nodes
  • Static pod manifests
  • Systemctl on worker nodes
  • Timed mock exams
  • Worker kubelet config files

K16S README

How to install K16S

Install K16S with Docker

git clone https://github.com/immanuwell/k16s-exam-simulator.git
cd k16s-exam-simulator
bash install.sh --lightweight

Requires Docker and kind + kubectl. ~2 GB free RAM. AppArmor questions unavailable.

How to configure K16S

  • --cpus4CPU cores for Lima VM (laptop mode)

    CPU cores for Lima VM (laptop mode)

    values: integer

  • --desktopEnable noVNC desktop (laptop mode)

    Enable noVNC desktop (laptop mode)

    values: flag

  • --disk30Disk size in GB for Lima VM (laptop mode)

    Disk size in GB for Lima VM (laptop mode)

    values: integer (GB)

  • --hostProvision a remote VM over SSH instead of the local machine

    Provision a remote VM over SSH instead of the local machine

    values: IP address or hostname

  • --k8s1.33Kubernetes minor version (--host/bare VM only)

    Kubernetes minor version (--host/bare VM only)

    values: Kubernetes minor version

  • --k8s-imagekindest/node:vX.Y.ZKind node image (lightweight mode only)

    Kind node image (lightweight mode only)

    values: kind node image reference

  • --keyyour SSH agent / default keySSH private key for --host

    SSH private key for --host

    values: path to SSH key

  • --laptopProvision inside a local Lima VM

    Provision inside a local Lima VM

    values: flag

  • --lightweightProvision inside a kind cluster

    Provision inside a kind cluster

    values: flag

  • --memory8Memory in GB for Lima VM (laptop mode)

    Memory in GB for Lima VM (laptop mode)

    values: integer (GB)

  • --port8080Local port for the tunnel (--host) or forwarded port (laptop/lightweight)

    Local port for the tunnel (--host) or forwarded port (laptop/lightweight)

    values: port number

  • --profileckaEnv-setup profile to apply on the controlplane (only cka exists today)

    Env-setup profile to apply on the controlplane (only cka exists today)

    values: cka

  • --tunnelautoForce SSH tunnel mode for public IPs

    Force SSH tunnel mode for public IPs

    values: force|never|auto

  • --userrootSSH user for --host

    SSH user for --host

    values: username

  • --workers2Number of worker nodes

    Number of worker nodes

    values: integer

More in Kubernetes

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…