<p>I have the following replication controller in Kubernetes on GKE:</p>

<pre><code>apiVersion: v1
kind: ReplicationController
metadata:
  name: myapp
  labels:
    app: myapp
spec:
  replicas: 2
  selector:
    app: myapp
    deployment: initial
  template:
    metadata:
      labels:
        app: myapp
        deployment: initial
    spec:
      containers:
      - name: myapp
        image: myregistry.com/myapp:5c3dda6b
        ports:
        - containerPort: 80
      imagePullPolicy: Always
      imagePullSecrets:
        - name: myregistry.com-registry-key
</code></pre>

<p>Now, if I say</p>

<pre><code>kubectl rolling-update myapp --image=us.gcr.io/project-107012/myapp:5c3dda6b
</code></pre>

<p>the rolling update is performed, but no re-pull.  Why?</p>

<p>Kubernetes will pull upon Pod creation if either (see <a href="https://kubernetes.io/docs/concepts/containers/images/#updating-images" rel="noreferrer">updating-images doc</a>):</p>
<ul>
<li>Using images tagged <code>:latest</code></li>
<li><code>imagePullPolicy: Always</code> is specified</li>
</ul>
<p>This is great if you want to always pull. But what if you want to do it <strong>on demand</strong>: For example, if you want to use <code>some-public-image:latest</code> but only want to pull a newer version manually when you ask for it. You can currently:</p>
<ul>
<li>Set <code>imagePullPolicy</code> to <code>IfNotPresent</code> or <code>Never</code> and <a href="https://kubernetes.io/docs/concepts/containers/images/#pre-pulled-images" rel="noreferrer"><em>pre-pull</em></a>: Pull manually images on each cluster node so the latest is cached, then do a <code>kubectl rolling-update</code> or similar to restart Pods (ugly easily broken hack!)</li>
<li><em>Temporarily</em> change <code>imagePullPolicy</code>, do a <code>kubectl apply</code>, restart the pod (e.g. <code>kubectl rolling-update</code>), revert <code>imagePullPolicy</code>, redo a <code>kubectl apply</code> (ugly!)</li>
<li><em>Pull and push</em> <code>some-public-image:latest</code> to your private repository and do a <code>kubectl rolling-update</code> (heavy!)</li>
</ul>
<p>No good solution for on-demand pull. If that changes, please comment; I'll update this answer.</p>
