{"id":13819350,"url":"https://github.com/lightrun-platform/koolkits","last_synced_at":"2026-02-17T21:47:22.882Z","repository":{"id":38065373,"uuid":"459620477","full_name":"lightrun-platform/koolkits","owner":"lightrun-platform","description":"🧰 Opinionated, language-specific, batteries-included debug container images for Kubernetes.","archived":false,"fork":false,"pushed_at":"2023-08-09T08:35:43.000Z","size":142,"stargazers_count":378,"open_issues_count":7,"forks_count":17,"subscribers_count":7,"default_branch":"main","last_synced_at":"2024-08-04T08:02:07.970Z","etag":null,"topics":["debug","debugging","debugging-tools","docker-image","k8s","kubectl","kubectl-debug","kubernetes","observability"],"latest_commit_sha":null,"homepage":"","language":"Dockerfile","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/lightrun-platform.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}},"created_at":"2022-02-15T14:45:49.000Z","updated_at":"2024-08-03T23:42:35.000Z","dependencies_parsed_at":"2024-01-13T15:45:27.978Z","dependency_job_id":"4635b8e9-916c-4300-8330-8a0f3b85a5c0","html_url":"https://github.com/lightrun-platform/koolkits","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lightrun-platform%2Fkoolkits","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lightrun-platform%2Fkoolkits/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lightrun-platform%2Fkoolkits/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lightrun-platform%2Fkoolkits/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lightrun-platform","download_url":"https://codeload.github.com/lightrun-platform/koolkits/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225405593,"owners_count":17469374,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["debug","debugging","debugging-tools","docker-image","k8s","kubectl","kubectl-debug","kubernetes","observability"],"created_at":"2024-08-04T08:00:45.691Z","updated_at":"2026-02-17T21:47:17.836Z","avatar_url":"https://github.com/lightrun-platform.png","language":"Dockerfile","readme":"\u003cimg src=\"assets/logo.png\" alt=\"KoolKits logo\"/\u003e\n\n# 🧰 KoolKits 🧰\n\nOpinionated, language-specific, batteries-included debug container images for Kubernetes.\n\nAvailable for:\n\n[![NodeJS](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge\u0026logo=node.js\u0026logoColor=white)](https://github.com/lightrun-platform/koolkits/tree/main/nodejs) [![Python](https://img.shields.io/badge/python-3670A0?style=for-the-badge\u0026logo=python\u0026logoColor=ffdd54)](https://github.com/lightrun-platform/koolkits/tree/main/python) [![Java](https://img.shields.io/badge/java-%23ED8B00.svg?style=for-the-badge\u0026logo=java\u0026logoColor=white)](https://github.com/lightrun-platform/koolkits/tree/main/jvm) [![Go](https://img.shields.io/badge/go-%2300ADD8.svg?style=for-the-badge\u0026logo=go\u0026logoColor=white)](https://github.com/lightrun-platform/koolkits/tree/main/golang)\n\nKoolKits (**K**ubernetes t**oolkits**) are language-specific container images that contain a (highly-opinionated) set of tools for debugging applications running in Kubernetes pods. You can read more about the motivation behind this project [here](#-motivation-).\n\nPrefer video to reading? We have you covered:\n\n[![Watch the video](https://i.imgur.com/UZvVnT9.png)](https://www.youtube.com/watch?v=xRsdA4EGUlE)\n\nThose images are intended for use with the new `kubectl debug` feature, which spins up [Ephemeral containers](https://kubernetes.io/docs/concepts/workloads/pods/ephemeral-containers/) for interactive troubleshooting. A KoolKit will be pulled by `kubectl debug`, spun up as a container in your pod, and have the ability to access the same process namespace as your original container. \n\nSince production containers are usually **[rather bare](https://cloud.google.com/architecture/best-practices-for-building-containers#remove_unnecessary_tools)**, using a KoolKit enables you to **troubleshoot with power tools** instead of relying on what was left behind due to the generosity (or carelessness) of whoever originally built the production image.\n\n## 🏁 Quickstart 🏁\n\nRun a Node.js KoolKit in your production cluster (Kubernetes v1.23 and above):\n\n```shell\nkubectl debug -it \u003cPOD-NAME\u003e --image=lightrun-platform/koolkits/koolkit-node --image-pull-policy=Never --target=\u003cDEPLOYMENT-NAME\u003e\n```\n\nRun a JVM KoolKit in MiniKube (Kubernetes v1.23 and above): \n\n```shell\nminikube kubectl -- debug -it \u003cPOD-NAME\u003e --image=lightrun-platform/koolkits/koolkit-jvm --image-pull-policy=Never --target=\u003cDEPLOYMENT-NAME\u003e\n```\n\n#### Adding to `.bashrc`/`.zshrc`\n\nYou can use KoolKits faster by adding the following function to your `.bashrc`:\n\n```bash\necho \"## KoolKits - Shorthand\nkk() {\n\tkubectl debug -it $1 --image=lightruncom/koolkits:$2 --image-pull-policy=Never --target=$3\n}\" \u003e\u003e ~/.bashrc\nsource ~/.bashrc\n```\n\nOr into your `.zshrc`:\n```zsh\necho \"## KoolKits - Shorthand\nkk() { \n\tkubectl debug -it $1 --image=lightruncom/koolkits:$2 --image-pull-policy=Never --target=$3\n}\" \u003e\u003e ~/.zshrc\nsource ~/.zshrc\n```\n\nThen run `kk`:\n\n```bash\nkk demo-123123-qweqwe2 jvm demo\n```\n\nWhere the full syntax is:\n\n```shell\nkk \u003cPOD-NAME\u003e \u003cLANGUAGE\u003e \u003cDEPLOYMENT-NAME\u003e\n```\n \n## 👇 Available KoolKits 👇\n\nEach of the folders in this repo contains the Dockerfile - and a short explanation of - the debug image. All KoolKits are based on the [`ubuntu:20.04`](https://hub.docker.com/layers/ubuntu/library/ubuntu/20.04/images/sha256-57df66b9fc9ce2947e434b4aa02dbe16f6685e20db0c170917d4a1962a5fe6a9?context=explore) base image, since real people need real shells. \n\nThe list:\n\n1. [`koolkit-jvm`](jvm/README.md) - AdoptOpenJDK 17.0.2 \u0026 related tooling (including `jabba` for easy version management and Maven 3.8.4)\n1. [`koolkit-node`](nodejs/README.md) - Node 16.13.1 \u0026 related tooling (including `nvm` for easy version management)\n1. [`koolkit-python`](python/README.md) - Python 3.10.2 \u0026 related tooling (including `pyenv` for easy version management)\n1. [`koolkit-golang`](golang/README.md) - Go 1.17.6 \u0026 related tooling (including `gvm` for easy version management)\n\nNote that you don't actually have to build them yourselves - all KoolKits are hosted publicly on [Docker Hub](https://hub.docker.com/repository/docker/lightruncom/koolkits) and available free of charge. \n\n**Got a suggestion for improvements?** We'd be happy to hear all about it - just open an issue with the requested tooling.\n\n## 🚧 Coming up / WIP 🚧\n\n- [x] A whole new, Go 1.17.7 KoolKit _(released on March 2022)_\n- [ ] JVM KoolKit - [`jvm-profiler`](https://github.com/uber-common/jvm-profiler), [`jHiccup`](https://github.com/giltene/jHiccup) support\n- [ ] Node.js KoolKit - [`llnode`](https://github.com/nodejs/llnode), [`thetool`](https://github.com/sfninja/thetool) support\n- [ ] Python KoolKit - [`vardbg`](https://github.com/CCExtractor/vardbg), [`memprof`](https://github.com/jmdana/memprof) support\n## 🏃 Motivation 🏃\n\nThere's a [well-known Kubernetes best practice](https://cloud.google.com/blog/products/containers-kubernetes/kubernetes-best-practices-how-and-why-to-build-small-container-images) that states that one should build **small** container images. This makes sense for a few different reasons:\n\n1. Building the image will consume less resources (aka CI hours)\n2. Pulling the image will take less time (who wants to pay for so much ingress anyways?)\n3. Less stuff means less surface area exposed to security vulnerabilities, in a [world where even no-op logging isn't safe anymore](https://en.wikipedia.org/wiki/Log4Shell)\n\nThere's also a lot of tooling in existence that helps you get there without doing too much heavy lifting:\n\n1. [Alpine Linux](https://hub.docker.com/_/alpine) base images are super small\n2. [DistroLess Docker images](https://github.com/GoogleContainerTools/distroless) go a step further and remove everything but the runtime\n3. [Docker multi-stage builds](https://docs.docker.com/develop/develop-images/multistage-build/) help create thin final production images\n\nThe problem starts when you're trying to debug what's happening inside those containers. By using a small production image you're forsaking a large amount of tools that are **invaluable** when wrapping your head around a problem in your application.\n\n By using a KoolKit, you're allowing yourself the benefits of a small production image without compromising on quality tools - each KoolKit contains hand-picked tools for the specific runtime it represents, in addition to a more generic set of tooling for Linux-based systems.\n\n*P.S. KoolKits was inspired by [`kubespy`](https://github.com/huazhihao/kubespy) and [`netshoot`](https://github.com/nicolaka/netshoot).*\n\n## 🗯️ Considerations 🗯️\n\n### Size of Images\n\nKoolKits Docker images tend to run, uhm, rather **large**.\n\nKoolKits are intended to be downloaded once, kept in the cluster's Docker registry, and then spun up immediately on demand as containers. Since they're not intended for constant pulling, and since they're intended to be packed with goodies, this is a side effect we're willing to endure. \n\n### Using Ubuntu base images\n\nPart of the reason it's hard to create a really slim image is due to our decision to go with a full Ubuntu 20.04 system as the basis for each KoolKit. This mainly came from our desire to replicate the same environment you would debug with locally inside your clusters. \n\nFor example, this means no messing around with Alpine alternatives to normal Ubuntu packages you're used to working with. Actually, this means we have a way of including tools **that have no Alpine versions** in each KoolKit.\n\n### Using language version managers\n\nEach KoolKit uses (wherever possible) a language version manager instead of relying on language-specific distros. This is done to allow you to install older runtime versions easily, and in order to allow you to swap between runtime versions at will (for example, to get specific versions of tooling that only exist for specific runtime versions), as need be.\n\n## 💗 Contribution 💗\n\nWe'd be more than happy to add tools we missed to any image - just [open a pull request](https://github.com/lightrun-platform/koolkits/pulls) or [an issue](https://github.com/lightrun-platform/koolkits/issues) to suggest one.\n","funding_links":[],"categories":["kubernetes"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flightrun-platform%2Fkoolkits","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flightrun-platform%2Fkoolkits","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flightrun-platform%2Fkoolkits/lists"}