10 | Kubernetes Deployment Strategy

What are the different deployment strategies available with Kubernetes deployment?

  • Re-Create
  • Rolling Updates

What is Re-Create Strategy?

In re-create strategy:

  • All earlier PODs are destroyed first.
  • Then new PODs are created with new version.
  • Problem: There is a time when application is down and can’t receive any request.

What is Rolling update strategy?

In rolling update strategy:

  • PODs are brought down 1 by 1 and while 1 POD of earlier version is brought down, another POD of new version is brought up.
  • This is the default strategy.
  • And there is never a time when application is not availaible.

How to specify which strategy to use?

You can specify strategy in your deployment definition file under spec:

apiVersion: apps/v1
 kind: Deployment
 metadata:
   name: think-app-deployment
   labels:
     app: think-app
     env: eat
 spec:
   replicas: 3
   strategy:
     type: RollingUpdate or Recreate <===
   template:
     metadata:
       name: think-app-pod
       labels:
         app: think-app
         type: load-balancer
     spec:
       containers:
       - name: thinkscholar-nginx-container
          image:  nginx    
   selector:
     matchLabels:
       type: load-balancer

Note: If you don’t specify a strategy then it gets default value of RollingUpdate

Can I check from already running deployment, which strategy was used?

If you run describe command on deployment:

  • You see StrategyType in output
  • Also if you look carefully at events you can figure out which kind of strategy was used.

kubectl describe deployment myapp-deployment

Output for Recreate type deployment:

Name:           think-app-deployment
 Namespace:      default
 CreationTimestamp:  Tue, 15 Mar 2016 14:48:04 -0700
 Labels:         app=think-app
 Selector:       app=think-app
 Replicas:       3 desired | 1 updated | 4 total | 3 available | 1 unavailable
 StrategyType:       Recreate
 MinReadySeconds:    0
 RollingUpdateStrategy:  25% max unavailable, 25% max surge
 Pod Template:
   Labels:  app=think-app
   Containers:
    nginx:
     Image:        nginx:1.161
     Port:         80/TCP
     Host Port:    0/TCP
     Environment:  <none>
     Mounts:       <none>
   Volumes:        <none>
 Conditions:
   Type           Status  Reason
   ----           ------  ------
   Available      True    MinimumReplicasAvailable
   Progressing    True    ReplicaSetUpdated
 OldReplicaSets:     think-app-deployment-1564180365 (3/3 replicas created)
 NewReplicaSet:      think-app-deployment-3066724191 (1/1 replicas created)
 Events:
   FirstSeen LastSeen    Count   From                    SubObjectPath   Type        Reason              Message
   --------- --------    -----   ----                    -------------   --------    ------              -------
   1m        1m          1       {deployment-controller }                Normal      ScalingReplicaSet   Scaled up replica set think-app-deployment-2035384211 to 3
   22s       22s         1       {deployment-controller }                Normal      ScalingReplicaSet   Scaled down replica set think-app-deployment-2035384211 to 0
   22s       22s         1       {deployment-controller }                Normal      ScalingReplicaSet   Scaled up replica set think-app-deployment-1564180365 to 3

You will notice, when the recreate strategy was used, the events indicate that the old replica set was scaled down to zero first and then the new replica set scaled up to five.

Output for Rolling Update type deployment

Name:           think-app-deployment
 Namespace:      default
 CreationTimestamp:  Tue, 15 Mar 2016 14:48:04 -0700
 Labels:         app=think-app
 Selector:       app=think-app
 Replicas:       3 desired | 1 updated | 4 total | 3 available | 1 unavailable
 StrategyType:       RollingUpdate
 MinReadySeconds:    0
 RollingUpdateStrategy:  25% max unavailable, 25% max surge
 Pod Template:
   Labels:  app=think-app
   Containers:
    nginx:
     Image:        nginx:1.161
     Port:         80/TCP
     Host Port:    0/TCP
     Environment:  <none>
     Mounts:       <none>
   Volumes:        <none>
 Conditions:
   Type           Status  Reason
   ----           ------  ------
   Available      True    MinimumReplicasAvailable
   Progressing    True    ReplicaSetUpdated
 OldReplicaSets:     think-app-deployment-1564180365 (3/3 replicas created)
 NewReplicaSet:      think-app-deployment-3066724191 (1/1 replicas created)
 Events:
   FirstSeen LastSeen    Count   From                    SubObjectPath   Type        Reason              Message
   --------- --------    -----   ----                    -------------   --------    ------              -------
   1m        1m          1       {deployment-controller }                Normal      ScalingReplicaSet   Scaled up replica set think-app-deployment-2035384211 to 3
   22s       22s         1       {deployment-controller }                Normal      ScalingReplicaSet   Scaled up replica set think-app-deployment-1564180365 to 1
   22s       22s         1       {deployment-controller }                Normal      ScalingReplicaSet   Scaled down replica set think-app-deployment-2035384211 to 2
   22s       22s         1       {deployment-controller }                Normal      ScalingReplicaSet   Scaled up replica set think-app-deployment-1564180365 to 2
   21s       21s         1       {deployment-controller }                Normal      ScalingReplicaSet   Scaled down replica set think-app-deployment-2035384211 to 1
   21s       21s         1       {deployment-controller }                Normal      ScalingReplicaSet   Scaled up replica set think-app-deployment-1564180365 to 3
   13s       13s         1       {deployment-controller }                Normal      ScalingReplicaSet   Scaled down replica set think-app-deployment-2035384211 to 0
   13s       13s         1       {deployment-controller }                Normal      ScalingReplicaSet   Scaled up replica set think-app-deployment-3066724191 to 1

You will notice, when the rolling update strategy was used the old replica set was scaled down one at a time simultaneously scaling up the new replica set one at a time.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s