Upgrade image in a Deployment's pods

4/28/2016

I have a Deployment with 3 replicas of a pod running the image 172.20.20.20:5000/my_app, that is located in my private registry.

I want do a rolling-update in the deployment when I push a new latest version of that image to my registry.

I push the new image this way (tag v3.0 to latest):

$ docker tag 172.20.20.20:5000/my_app:3.0 172.20.20.20:5000/my_app
$ docker push 172.20.20.20:5000/my_app

But nothing happens. Pods' images are not upgraded. This is my deployment definition:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: myapp-deployment
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: app
        image: 172.20.20.20:5000/my_app:latest
        ports:
        - containerPort: 8080

Is there a way to do that automatically? Should I run a command like rolling-update like in ReplicaControllers?

-- Héctor
kubernetes

1 Answer

4/28/2016

In order to upgrade a Deployment you have to modify the Deployment resource with the new image. So for example, change 172.20.20.20:5000/my_app:v1 to 172.20.20.20:5000/my_app:v2. Since you're just modifying the image within the Docker registry doesn't notice the change.

If you (manually) kill the individual Pods, the Deployment will restart them. Since the Deployment image specifies the "latest" tag Kubernetes will download the latest version (now "v3" in your case) due to the implied "Always" ImagePullPolicy.

-- bfallik
Source: StackOverflow