Kustomize: Change Image, Tag or Registry

Kustomize is a tool for customizing Kubernetes configurations.

Like for secrets, in Kustomize, there is a custom directive that allows to easily override names, tags and change registries (repositories) of container images (e.g. Docker images).

This short note shows how to change the image name, tag or registry using Kustomize.

Change Image, Tag or Registry using Kustomize

In nutshell, to change the image name, tag or registry you can declare a special images directive inside the kustomization.yaml:

images:
 - name: <imageName>
   newName: <newImageName>
   newTag: <newImageTag>

For example, let’s say your project has a file structure as follows:

~/myApp
├── pod.yaml
└── kustomization.yaml

The myapp-pod resource in the pod.yaml file declares a container that uses the image busybox with the tag 1.36.0:

# ~/myApp/pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
spec:
  containers:
  - name: myapp-container
    image: busybox:1.36.0
    command: ['sh', '-c', 'echo The app is running! && sleep 3600']

The image busybox, as well as the tag 1.36.0 can be changed by updating the kustomization.yaml file, for example, as follows:

# ~/myApp/kustomization.yaml
resources:
- pod.yaml

images:
 - name: busybox
   newName: my-private.docker.registry/alpine
   newTag: 3.17.3

To verify that the image has been updated, run:

$ kubectl kustomize ~/myApp

In the example above, the busybox image has been replaced by the alpine image with the tag 3.17.3, hosted in a private Docker registry.

The same way you can change multiple images and tags in the kustomization.yaml, e.g.:

# ~/myApp/kustomization.yaml
resources:
- pod.yaml

images:
 - name: nginx
   newName: haproxy
   newTag: 2.8
 - name: redis
   newName: memcached
   newTag: 1.6.19
Was it useful? Share this post with the world!

Leave a Reply