Hi,
I'd like to announce kubeadm-dind-cluster:
It was initially based on kubernetes-dind-cluster project [1] by
Dr. Stefan Schimanski, but as of now it diverged too much from it
so I decided to give it a new name.
kubeadm-dind-cluster is a Kubernetes multi-node cluster for developer
_of_ Kubernetes based on kubeadm and DIND (Docker in Docker).
The project has following features:
* Building from local Kubernetes source. There are quite a few
projects for starting local development k8s clusters, but they
often consume prebuilt packages which is inconvenient when
making changes in k8s itself.
* Multi-node clusters. hack/local-up-cluster.sh is often used for
k8s development but unfortunately it can't start more than one node,
which means that many e2e tests can't run and there may be problems
when working on issues that require multi-node setup,
e.g. scheduler-related.
* Realistic cluster setup. Although based on DIND (Docker in Docker),
kubeadm-dind-cluster uses kubeadm to launch the cluster which makes
it closer to real clusters than e.g. hack/local-up-cluster.sh
* Running e2e tests. kubeadm-dind-cluster enables developers to run
e2e tests locally and provides some convenience tools to do so.
* Fast cluster startup. Initial base image preparation takes some
time but after that cluster startup / restarts / updates are
quite fast.
* Both local and remote workflows (more on this below)
* Mac OS X support
See also "Motivation" section in README.md [2].
An important feature of kubeadm-dind-cluster is support for remote
workflows. Some developers prefer to use not very powerful laptops
for their work offloading the heavy lifting such as builds, testing
etc. to remote machines, for example cloud instances or powerful boxes
under the desk. Thanks to work by Joe Beda [3] it's now possible
to employ such workflows for everything that can be done inside the
build container, e.g. building k8s binaries or running unit tests
(for more info, see [4]). The only requirement for the remote machine
is Docker.
With kubeadm-dind-cluster, it's now possible to start DIND cluster on
the same remote Docker. The script takes binaries needed for the
cluster from the build data container directly without even copying
them back to the developer's machine (with exception of kubectl
which is still copied on Linux/built locally on Mac OS X).
The plans for future include:
* Start some of the addons out of the box, e.g. Dashboard
* Support bazel builds
* Make publicly available prebuilt base images for faster
initial startup
* Support CNI. At the moment, a docker0 bridge trick inherited
from kubernetes-dind-cluster is used for container networking,
but later there will be an option to use CNI to make clusters
more realistic.
* Try to find more common grounds with other kubeadm+dind
projects, such as kubeadm-ci-* projects [5] (kubeadm-dind-cluster
already utilized kubeadm-ci-dind image but probably
more close integration/merger is possible) and
nkube [6] (Nested Kubernetes).
I'd like to thank Dr. Stefan Schimanski (sttts) for his work on
kubernetes-dind-cluster, Ilya Dmitrichenko (errordeveloper)
and Maru Newby (marun) for their work on other kubeadm+dind projects
from where I borrowed some ideas and for their help on
#sig-cluster-lifecycle slack channel. Also I'd like to thank Joe Beda
(jbeda) for the improvements in k8s dockerized builds.
Finally, I'd like to ask whether it makes sense to move this project
to Kubernetes Incubator. In my opinion this maybe useful because
kubeadm-dind-cluster may serve as a good replacement for
hack/local-up-cluster.sh and this would give the project
more visibility.