0
votes

I have an existing kubernetes deployment which is running fine. Now I want to edit it with some new environment variables which I will use in the pod. Editing a deployment will delete and create new pod or it will update the existing pod. My requirement is I want to create a new pod whenever I edit/update the deployment.

2
Do you mean that you want to keep Pods with old configurations?kitt

2 Answers

1
votes

Kubernetes is always going to recreate your pods in case you change/create env vars.

Lets check this together creating a deployment without any env var on it:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80

Let's check and note these pod names so we can compare later:

$ kubectl get pod 
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-56db997f77-9mpjx   1/1     Running   0          8s
nginx-deployment-56db997f77-mgdv9   1/1     Running   0          8s
nginx-deployment-56db997f77-zg96f   1/1     Running   0          8s

Now let's edit this deployment and include one env var making the manifest look like this:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        env:
          - name: STACK_GREETING
            value: "Hello from the MARS"
        ports:
        - containerPort: 80

After we finish the edition, let's check our pod names and see if it changed:

$ kubectl get pod 
nginx-deployment-5b4b68cb55-9ll7p   1/1     Running   0          25s
nginx-deployment-5b4b68cb55-ds9kb   1/1     Running   0          23s
nginx-deployment-5b4b68cb55-wlqgz   1/1     Running   0          21s

As we can see, all pod names changed. Let's check if our env var got applied:

$ kubectl exec -ti nginx-deployment-5b4b68cb55-9ll7p -- sh -c  'echo $STACK_GREETING'
Hello from the MARS

The same behavior will occur if you change the var or even remove it. All pods need to be removed and created again for the changes to take place.

0
votes

If you would like to create a new pod, then you need to create a new deployment for that. By design deployments are managing the replicas of pods that belong to them.