RollingUpdate

RollingUpdate Strategy(Recommended):

In the "RollingUpdate" deployment strategy, each pods will be terminated sequentially and recreated with the new version of the pods. 

Advantages: No downtime to the users. 


Please find the code here : RollingUpdate.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploymentdemo
  labels:
    type: web
spec:
  replicas: 4
  strategy:
    type: RollingUpdate      # Optional
    rollingUpdate:          # Optional
      maxUnavailable: 1    #Optional
      maxSurge: 1         # Optional
    
  selector:
    matchLabels:
      type: web1
  template:
    metadata:
      name: nginxpods
      labels:
        type: web1
    spec:
      containers:
      - image: iam7hills/learnkubernetes:podsdemo-1.0
        name: podsdemo
        imagePullPolicy: Alway

STEP 1: First Time Run

Kubectl create -f RollingUpdate.yaml
NAME                                    DESIRED   CURRENT   READY   AGE
deploymentdemo-6997bc7c5d   4                 4                 4             68s

kubectel get pods
NAME                                                          READY   STATUS    RESTARTS   AGE
deploymentdemo-6997bc7c5d-8m62h   1/1         Running       0              77s
deploymentdemo-6997bc7c5d-s6hdq   1/1         Running       0              77s
deploymentdemo-6997bc7c5d-tg5kx   1/1         Running       0              77s
deploymentdemo-6997bc7c5d-wk4z7   1/1         Running       0              77s

STEP 2: Now, update the RollingUpdate.yaml to repoint to podsdemo-2.0

Initial State after pointing to the new version of the image

kubectl get rs
NAME                                    DESIRED   CURRENT   READY   AGE
deploymentdemo-6997bc7c5d   1                 1             1       2m15s  # New Replica Set
deploymentdemo-75f6466945   4                 4             2       18s

kubectl get pods
NAME                                                      READY      STATUS          RESTARTS   AGE
deploymentdemo-6997bc7c5d-8m62h   1/1     Running             0              118s
deploymentdemo-6997bc7c5d-s6hdq   1/1     Running             0              118s
deploymentdemo-6997bc7c5d-tg5kx   1/1     Terminating         0              118s  # Delete one at a time
deploymentdemo-6997bc7c5d-wk4z7   1/1     Running             0              118s
deploymentdemo-75f6466945-jmcpn   0/1     ContainerCreating   0              1s # New Pod create one at a time

The process of deleting the old and new happens in iteration until the new replicaset contains all the new pod as per the desired state mentioned in the YAML file.

Final State:

kubectl get rs
NAME                                    DESIRED   CURRENT   READY   AGE
deploymentdemo-6997bc7c5d   0         0         0       5m57s
deploymentdemo-75f6466945   4         4         4       4m

Kubectl get pods
NAME                                              READY   STATUS    RESTARTS   AGE
deploymentdemo-75f6466945-jmcpn   1/1     Running   0          4m5s
deploymentdemo-75f6466945-nrdfv   1/1     Running   0          4m
deploymentdemo-75f6466945-rlhfv   1/1     Running   0          3m59s
deploymentdemo-75f6466945-wblpz   1/1     Running   0          4m4s 

kubectl rollout status deployment/deploymentdemo

deployment "deploymentdemo" successfully rolled out