<p>Let's say I have 10 pods running a stable version, and I wish to replace the image of one of them to run a newer version before a full rollout.</p>
<p>Is there a way to do that?</p>

TBE
<p>Not as such: every pod managed by a Deployment is expected to be identical, including running the same image.  You can't change a pod's image once it's been created, and if you change the Deployment's image, it will try to recreate all of its managed pods.</p>
<p>If the only thing you're worried about is the pod starting up, the <a href="https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#updating-a-deployment" rel="nofollow noreferrer">default behavior of a deployment</a> is to start 25% of its specified replicas with the new image.  The old pods will continue running uninterrupted until the new replicas successfully start and pass their readiness checks.  If the new pods immediately go into CrashLoopBackOff state, the old pods will still be running.</p>
<p>If you want to start a pod specifically as a canary deployment, you can create a second Deployment to handle that.  You'll need to include some label on the pods (for instance, <code>canary: 'true'</code>) where you can distinguish the canary from main pods.  This would be present in the pod spec, and in the deployment selector, but it would not be present in the corresponding Service selector: the Service matches both canary and non-canary pods.  If this runs successfully then you can remove the canary Deployment and update the image on the main Deployment.</p>
