Kubernetes is a general-purpose orchestration engine, suitable not only for running applications, but also for building container images. The Image Builder pattern explains why it makes sense to build the container images within the cluster and what techniques exist today for creating images within Kubernetes.
All the patterns in this book so far have been about operating applications on Kubernetes. We learned how we can develop and prepare our applications to be good cloud-native citizens. But what about building the application itself? The classic approach is to build container images outside the cluster, push them to a registry, and refer to them in the Kubernetes Deployment descriptors. However, building within the cluster has several advantages.
If the company policies allow, having only one cluster for everything is advantageous. Building and running applications in one place can reduce maintenance costs considerably. It also simplifies capacity planning and reduces platform resource overhead.
Typically, Continuous Integration (CI) systems like Jenkins are used to build images. Building with a CI system is a scheduling problem for efficiently finding free computing resources for build jobs. At the heart of Kubernetes is a highly sophisticated scheduler that is a perfect fit for this kind of scheduling challenge.
Once we move to Continuous Delivery (CD), where we transition from building images to running containers, if the build happens ...