{"id":48283524,"url":"https://github.com/cnuss/nanokube","last_synced_at":"2026-04-04T22:53:22.840Z","repository":{"id":339424850,"uuid":"1161833266","full_name":"cnuss/nanokube","owner":"cnuss","description":"A fully functional Kubernetes in a single binary","archived":false,"fork":false,"pushed_at":"2026-04-02T10:28:41.000Z","size":747,"stargazers_count":0,"open_issues_count":3,"forks_count":0,"subscribers_count":0,"default_branch":"1.35","last_synced_at":"2026-04-02T11:35:42.126Z","etag":null,"topics":["container-runtime","go","k8s","kubernetes","single-binary"],"latest_commit_sha":null,"homepage":"https://github.com/cnuss/nanokube#quick-start","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cnuss.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-19T15:13:52.000Z","updated_at":"2026-04-02T10:28:49.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/cnuss/nanokube","commit_stats":null,"previous_names":["cnuss/nanokube"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/cnuss/nanokube","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cnuss%2Fnanokube","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cnuss%2Fnanokube/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cnuss%2Fnanokube/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cnuss%2Fnanokube/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cnuss","download_url":"https://codeload.github.com/cnuss/nanokube/tar.gz/refs/heads/1.35","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cnuss%2Fnanokube/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31418270,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T20:09:54.854Z","status":"ssl_error","status_checked_at":"2026-04-04T20:09:44.350Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["container-runtime","go","k8s","kubernetes","single-binary"],"created_at":"2026-04-04T22:53:21.851Z","updated_at":"2026-04-04T22:53:22.825Z","avatar_url":"https://github.com/cnuss.png","language":"Go","readme":"# nanokube\n\nA single-binary Kubernetes distribution that runs etcd, kube-apiserver, kube-controller-manager, kube-scheduler, and kubelet in one process.\n\n## Quick Start\n\n```bash\ngit clone --recurse-submodules https://github.com/cnuss/nanokube.git\ncd nanokube\nmake build\n./nanokube --clean\n```\n\nRequires Go 1.25+ and a container runtime (Docker recommended).\n\n## Usage\n\n```\nnanokube [flags]\n```\n\n| Flag             | Default      | Description                                      |\n|------------------|--------------|--------------------------------------------------|\n| `--name`         | `nanokube`   | Cluster name                                     |\n| `--data`         | `~/.nanokube`| Data directory                                   |\n| `--clean`        | `false`      | Clean data directory before starting             |\n| `--kubelet`      | `true`       | Start the kubelet component                      |\n| `-v, --verbose`  | `false`      | Enable debug logging (`-v` debug, `-vv` trace)   |\n\n## Container Runtimes\n\nnanokube includes its own CRI (Container Runtime Interface) daemon that bridges Kubernetes to container runtimes directly — no external CRI shim required.\n\n| Runtime | Status    |\n|---------|-----------|\n| Docker  | Supported |\n| Podman  | Planned   |\n\nDocker is auto-detected by probing common socket paths (`/var/run/docker.sock`, `~/.colima/default/docker.sock`, `~/.rd/docker.sock`, etc.). If no runtime is found, nanokube starts with a no-op backend.\n\n## Networking\n\nnanokube uses Docker's networking directly — there is no kube-proxy or CNI plugin.\n\n**Shared bridge (default)** — Pods without `hostPort` all run on Docker's default `bridge` network. Containers can listen on any port without conflict since no host port binding occurs. `containerPort` in a pod spec is treated as informational only, matching upstream Kubernetes semantics.\n\n**Dedicated network (hostPort)** — When a pod specifies `hostPort`, nanokube creates a per-sandbox Docker network with explicit port publishing. This isolates the host port binding to that sandbox, preventing conflicts with other pods on the shared bridge.\n\n**DNS** — nanokube runs an embedded DNS server that resolves pod and service names. For bridge-mode pods, Docker's built-in DNS (`127.0.0.11`) forwards to the CRI-configured DNS servers. For host-network pods, resolv.conf is written directly.\n\n## Build\n\n```bash\nmake submodules   # init git submodules (etcd, kubernetes)\nmake build        # apply patches + build binary\nmake run          # fmt, build, and run\nmake run-clean    # fmt, build, and run with --clean\n```\n\n## Testing\n\n```bash\nmake test                           # unit tests\nmake e2e                            # kuttl e2e suite\nmake e2e SUITE=pods                 # single suite\nmake e2e SUITE=pods WHAT=dns-config # single test in a suite\nmake e2e-baseline                   # e2e suite against Kind (reference baseline)\nmake critest                        # CRI conformance tests\nmake critest WHAT=\"port mapping\"    # single critest by focus\n```\n\n## Conformance\n\nE2E tests from [kuttl-conformance](https://github.com/cnuss/kuttl-conformance) run against nanokube with Docker.\n\n| Suite             | Test                     | Status         |\n|-------------------|--------------------------|----------------|\n| **api**           | crd-lifecycle            | :green_circle: |\n|                   | finalizers               | :green_circle: |\n|                   | labels-annotations       | :green_circle: |\n|                   | namespace-lifecycle      | :green_circle: |\n| **auth**          | serviceaccount-token     | :green_circle: |\n|                   | clusterrole-binding      | :red_circle:   |\n|                   | rbac                     | :red_circle:   |\n| **configuration** | configmap-mount          | :green_circle: |\n|                   | hostpath-volume          | :green_circle: |\n|                   | persistent-volume-claim  | :green_circle: |\n|                   | secret-mount             | :green_circle: |\n|                   | volume-submounts         | :green_circle: |\n|                   | volume-types             | :green_circle: |\n| **networking**    | ingress                  | :green_circle: |\n|                   | endpoint-slices          | :red_circle:   |\n|                   | headless-service         | :red_circle:   |\n|                   | network-policy           | :red_circle:   |\n|                   | service-clusterip        | :red_circle:   |\n|                   | service-nodeport         | :red_circle:   |\n| **observability** | pod-events               | :green_circle: |\n|                   | pod-logs                 | :green_circle: |\n| **pods**          | dns-config               | :green_circle: |\n|                   | init-containers          | :green_circle: |\n|                   | pod-lifecycle            | :green_circle: |\n|                   | pod-lifecycle-hooks      | :green_circle: |\n|                   | resource-requests-limits | :green_circle: |\n|                   | restart-policy           | :green_circle: |\n|                   | pod-probes               | :green_circle: |\n|                   | security-context         | :red_circle:   |\n| **policy**        | horizontal-pod-autoscaler| :green_circle: |\n|                   | limit-range              | :green_circle: |\n|                   | resource-quota           | :green_circle: |\n|                   | pod-disruption-budget    | :red_circle:   |\n| **scheduling**    | pod-affinity             | :green_circle: |\n|                   | priority-class           | :green_circle: |\n|                   | taints-tolerations       | :green_circle: |\n|                   | topology-spread          | :green_circle: |\n|                   | node-affinity            | :red_circle:   |\n|                   | node-selector            | :red_circle:   |\n| **workloads**     | cronjob-scheduling       | :green_circle: |\n|                   | daemonset                | :green_circle: |\n|                   | job-completion           | :green_circle: |\n|                   | deployment-lifecycle     | :red_circle:   |\n|                   | deployment-strategy      | :red_circle:   |\n|                   | replicaset               | :red_circle:   |\n|                   | statefulset              | :red_circle:   |\n\n**30/46 passing** — remaining failures are due to missing ClusterIP service networking, SecurityContext pass-through, and node label requirements.\n\n## License\n\n[Apache 2.0](LICENSE)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcnuss%2Fnanokube","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcnuss%2Fnanokube","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcnuss%2Fnanokube/lists"}