Automated alternative for initiating a rolling update for a deployment

8/11/2017

So in order to update the images running on a pod, I have to modify the deployment config (yaml file), and run something like kubectl apply -f deploy.yaml.

This means, if I'm not editing the yaml file manually I'll have to use some template / search and replace functionality. Which isn't really ideal.

Are there any better approaches?

It seems there is a kubectl rolling-update command, but I'm not sure if this works for 'deployments'.

For example running the following: kubectl rolling-update wordpress --image=eu.gcr.io/abcxyz/wordpress:deploy-1502443760

Produces an error of:

error: couldn't find a replication controller with source id == default/wordpress
-- Chris Stryczynski
kubectl
kubernetes

1 Answer

8/11/2017

I am using this for changing images in Deployments:

kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1

If you view the yaml files as source of truth then use a tag like stable in the yaml and only issue kubectl set image commands when the tag is moved (use the sha256 image id to actually trigger a rollout; the image names are matched like a string so updating from :stable to :stable is a noop even if the tag now points to a different image).

See updating a deployment for more details.

The above requires the deployment replica count to be set more then 1, which is explained here: https://stackoverflow.com/a/45649024/1663462.

-- Janos Lenart
Source: StackOverflow