{"id":18733944,"url":"https://github.com/mgoltzsche/kubeainer","last_synced_at":"2026-04-10T21:03:18.786Z","repository":{"id":45074389,"uuid":"166713023","full_name":"mgoltzsche/kubeainer","owner":"mgoltzsche","description":"A Kubernetes container image and Docker Compose project","archived":false,"fork":false,"pushed_at":"2022-01-10T21:22:20.000Z","size":138,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-12-28T15:49:50.655Z","etag":null,"topics":["compose","container","container-image","cri-o","crio","development-environment","development-tools","docker-compose","k8s","kubernetes"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mgoltzsche.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-01-20T21:48:10.000Z","updated_at":"2022-01-10T21:22:24.000Z","dependencies_parsed_at":"2022-09-02T22:51:17.512Z","dependency_job_id":null,"html_url":"https://github.com/mgoltzsche/kubeainer","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgoltzsche%2Fkubeainer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgoltzsche%2Fkubeainer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgoltzsche%2Fkubeainer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgoltzsche%2Fkubeainer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mgoltzsche","download_url":"https://codeload.github.com/mgoltzsche/kubeainer/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239605079,"owners_count":19667004,"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":["compose","container","container-image","cri-o","crio","development-environment","development-tools","docker-compose","k8s","kubernetes"],"created_at":"2024-11-07T15:11:51.229Z","updated_at":"2025-11-14T17:30:15.120Z","avatar_url":"https://github.com/mgoltzsche.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"Kubeainer ![GitHub workflow badge](https://github.com/mgoltzsche/kubeainer/workflows/Semantic%20release/badge.svg)\n=\n\nA [Kubernetes](https://kubernetes.io/) container image and [Docker Compose](https://docs.docker.com/compose/compose-file/compose-file-v3/) project to spin up a local cluster for development and experimentation purposes.\n\nIt uses upstream Kubernetes as well as [CRI-O](https://github.com/cri-o/cri-o) and initializes the cluster using [kubeadm](https://github.com/kubernetes/kubeadm).\n\n## Build and run from source\n\nClone the repo, build and run the container:\n```sh\ngit clone https://github.com/mgoltzsche/kubeainer.git\nmake apps image compose-up\n```\n_Set the `NODES` parameter to scale._\n\n## Usage\n\n### Docker\n\nRun a single-node cluster:\n```sh\ndocker run -d --name mykube --privileged -v \"`pwd`:/output\" mgoltzsche/kubeainer:latest\n```\n\nWait for the cluster to initialize:\n```sh\ndocker exec mykube kubeainer install\nexport KUBECONFIG=\"`pwd`/kubeconfig.yaml\n```\n_You can provide additional apps to the `kubeainer install` command as shown [below](#apps)._  \n\nComplete example with ingress:\n```sh\ndocker run -d --name mykube --privileged -p 80:80 -v \"`pwd`:/output\" mgoltzsche/kubeainer:latest\ndocker exec mykube kubeainer install ingress-nginx sample-app\ndocker exec mykube kubeainer retry 90 curl -fsS -H 'Host: sample-app.kubeainer.example.org' http://localhost\ncurl -fsS -H 'Host: sample-app.kubeainer.example.org' http://localhost\n```\n\n### Docker Compose\n\nRun a single-node cluster:\n```sh\ndocker-compose up -d --scale kube-node=0\n```\n_You can run a multi-node cluster by scaling the `kube-node` service._  \n\nWait for the cluster to initialize:\n```sh\ndocker-compose exec -T kube-master kubeainer install\n```\n_You can provide additional apps to the `kubeainer install` command as shown [below](#apps)._  \n\nOnce the cluster is initialized the Kubernetes client configuration is written to `$PWD/kubeconfig.yaml` (`$PWD` is the compose directory) and can be used as follows:\n```sh\nexport KUBECONFIG=\"$PWD/kubeconfig.yaml\"\n```\n\n## Init processes\n\n```\nentrypoint.sh\n└── exec systemd\n    ├── crio\n    ├── kubelet\n    └── kubeadm-bootstrap.sh\n        └── kubeadm\n```\n\n## Apps\n\nThe `kubeainer` script within the container can be used to install additional apps.\nAn app can be provided as directory that contains Kubernetes manifests.\nThe image already contains some apps within the `/etc/kubeainer/apps` directory.\nBy default the `flannel` app is installed.\nTo install additional apps, run e.g.:\n```sh\ndocker-compose exec -T kube-master kubeainer install local-path-provisioner ingress-nginx cert-manager metallb external-dns\n```\n\nYou can also mount your own Kubernetes manifests into the kubeainer container and use them as apps.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmgoltzsche%2Fkubeainer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmgoltzsche%2Fkubeainer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmgoltzsche%2Fkubeainer/lists"}