images
Modify the name, tags and/or digest for images.
Images modify the name, tags and/or digest for images without creating patches.
One can change the image
in the following ways (Refer the following example to know exactly how this is done):
postgres:8
tomy-registry/my-postgres:v1
,- nginx tag
1.7.9
to1.8.0
, - image name
my-demo-app
tomy-app
, - alpine’s tag
3.7
to a digest value
It is possible to set image tags for container images through the kustomization.yaml
using the images
field. When images
are specified, Apply will override the images whose image name matches name
with a new tag.
Field | Description | Example Field | Example Result |
---|---|---|---|
name | Match images with this image name | name: nginx | |
newTag | Override the image tag or digest for images whose image name matches name | newTag: new | nginx:old -> nginx:new |
newName | Override the image name for images whose image name matches name | newName: nginx-special | nginx:old -> nginx-special:old |
Example
File Input
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: the-deployment
spec:
template:
spec:
containers:
- name: mypostgresdb
image: postgres:8
- name: nginxapp
image: nginx:1.7.9
- name: myapp
image: my-demo-app:latest
- name: alpine-app
image: alpine:3.7
# kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
images:
- name: postgres
newName: my-registry/my-postgres
newTag: v1
- name: nginx
newTag: 1.8.0
- name: my-demo-app
newName: my-app
- name: alpine
digest: sha256:24a0c4b4a4c0eb97a1aabb8e29f18e917d05abfe1b7a7c07857230879ce7d3d3
resources:
- deployment.yaml
Build Output
apiVersion: apps/v1
kind: Deployment
metadata:
name: the-deployment
spec:
template:
spec:
containers:
- image: my-registry/my-postgres:v1
name: mypostgresdb
- image: nginx:1.8.0
name: nginxapp
- image: my-app:latest
name: myapp
- image: alpine@sha256:24a0c4b4a4c0eb97a1aabb8e29f18e917d05abfe1b7a7c07857230879ce7d3d3
name: alpine-app
Setting a Name
The name for an image may be set by specifying newName
and the name of the old container image.
# kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
images:
- name: mycontainerregistry/myimage
newName: differentregistry/myimage
Setting a Tag
The tag for an image may be set by specifying newTag
and the name of the container image.
# kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
images:
- name: mycontainerregistry/myimage
newTag: v1
Setting a Digest
The digest for an image may be set by specifying digest
and the name of the container image.
# kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
images:
- name: alpine
digest: sha256:24a0c4b4a4c0eb97a1aabb8e29f18e917d05abfe1b7a7c07857230879ce7d3d3
Setting a Tag from the latest commit SHA
A common CI/CD pattern is to tag container images with the git commit SHA of source code. e.g. if the image name is foo
and an image was built for the source code at commit 1bb359ccce344ca5d263cd257958ea035c978fd3
then the container image would be foo:1bb359ccce344ca5d263cd257958ea035c978fd3
.
A simple way to push an image that was just built without manually updating the image tags is to download the kustomize standalone tool and run kustomize edit set image
command to update the tags for you.
Example: Set the latest git commit SHA as the image tag for foo
images.
kustomize edit set image foo:$(git log -n 1 --pretty=format:"%H")
kubectl apply -f .
Setting a Tag from an Environment Variable
It is also possible to set a Tag from an environment variable using the same technique for setting from a commit SHA.
Example: Set the tag for the foo
image to the value in the environment variable FOO_IMAGE_TAG
.
kustomize edit set image foo:$FOO_IMAGE_TAG
kubectl apply -f .
Committing Image Tag Updates
The kustomization.yaml
changes may be committed back to git so that they can be audited. When committing the image tag updates that have already been pushed by a CI/CD system, be careful not to trigger new builds + deployments for these changes.