NOTE: This may not completely cover the current implementation.
The “base” image is a small-ish Docker image for running nested containers, systemd, and kubernetes components.
To do this we need to set up an environment that will meet the CRI (currently just docker) and systemd's particular needs. Documentation for each step we take is inline to the image's Dockerfile, but essentially:
we preinstall tools / packages expected by systemd / Docker / Kubernetes other than Kubernetes itself
we install a custom entrypoint that allows us to perform some actions before the container truly boots
we set up a systemd service to forward journal logs to the container tty
we do a few tricks to minimize unnecessary services and inform systemd that it is in docker (see the Dockerfile)
This image is based on the
ubuntu image which starts relatively small for
a Kubernetes node image, has near exclusively packages we need, and has
relatively up to date packages.
We strive to minimize the image size where possible.