kuik (pronounced /kwɪk/, like "quick") is the shortname of kube-image-keeper, a container image routing, mirroring (caching) and replication system for Kubernetes developed by Enix. It helps make applications more highly available by ensuring reliable access to container images.
[!NOTE] Kuik v2 has reached General Availability and is Production Ready as of v2.2.2 🚀
kuik v2 is a complete rewrite of the project with a focus on simplicity and ease of use :
KuiK use a mutating webhook to rewrite pod containers images when their are not available. It use Custom Resources ImageSetMirror and ReplicatedImageSet to generate a list of alternatives image values (including original one) for a given container image and check their availability to know if we keep using original image or rewrite it to an available alternative.
ReplicatedImageSet and ImageSetMirror both generate alternatives images when checking image availability in mutating webhook, but ImageSetMirror also handle the copy of original image to the given mirror registry.
includeNamespace & excludeNamespace, includeLabels & excludeLabels, …)Update call@sha256:cb4e4ffc5789fd5ff6a534e3b1460623df61cba00f5ea1c7b40153b5efb81805We rely on cert-manager Custom Resources to manage the kuik mutating webhook certificate, so you need to install it first.
VERSION=2.2.2
helm upgrade --install --create-namespace --namespace kuik-system kube-image-keeper oci://quay.io/enix/charts/kube-image-keeper:$VERSION
Custom Resource Definitions (CRDs) are used to configure the behavior of kuik such as its routing and mirroring features. Those are described in the docs/crds.md document.
To setup an ImageSetMirror (or a ClusterImageSetMirror), you will first need to configure a registry where kuik will copy matched images. Then generate a token with permission to pull, push and delete (if cleanup enabled) in this registry and create the secret to use in your ImageSetMirror with:
kubectl create secret docker-registry my-registry-secret --docker-server=my-registry.company.com --docker-username=my-username --docker-password=my-token
If you let kuik cleanup expired images in your registry, you still have to configure garbage collection on your own as kuik only delete images reference.
Even if we are proud of what we achieved with the v1 of kube-image-keeper, it was too often painful to work with: it was hard to deploy, overly complex, and the image caching feature — while ambitious — introduced often too much issues. We missed our original goal: to make kube-image-keeper an easy, no-brainer install for any cluster which would help ops in their day to day work and provide confidence.
We learned a lot from this experience and with v2, we're starting fresh! Our focus is on simplicity and ease of use with the same set of features and even more! kuik should be effortless to install and to use — you shouldn't have to think twice before adding it to your cluster. Our goal: you will forget it's even there and don't even notice when a registry goes down or an image becomes unavailable.
$ claude mcp add kube-image-keeper \
-- python -m otcore.mcp_server <graph>