Kubernetes Recreate Strategy
Kubernetes Recreate Strategy
Recreate
There is another deployment strategy called Recreate.
Let us edit the deployment again to use another version, v3, this time and change the strategy from RollingUpdate to Recreate.
pradeep@learnk8s$ kubectl edit deployment kodekloud
deployment.apps/kodekloud edited
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: "2"
creationTimestamp: "2022-02-15T07:13:38Z"
generation: 2
labels:
app: kodekloud
name: kodekloud
namespace: default
resourceVersion: "2408"
uid: e5728c54-8768-4d5c-b1b0-c3e33cf62062
spec:
progressDeadlineSeconds: 600
replicas: 4
revisionHistoryLimit: 10
selector:
matchLabels:
app: kodekloud
strategy:
type: Recreate
template:
metadata:
creationTimestamp: null
labels:
app: kodekloud
spec:
containers:
- image: kodekloud/webapp-color:v3
imagePullPolicy: Always
name: webapp-color
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
status:
-- INSERT --
pradeep@learnk8s$ kubectl get deployments.apps
NAME READY UP-TO-DATE AVAILABLE AGE
kodekloud 4/4 4 4 33m
pradeep@learnk8s$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kodekloud-676c6b9fcd-6bm6z 1/1 Running 0 53s 10.244.1.12 k8s-m02 <none> <none>
kodekloud-676c6b9fcd-dggk7 1/1 Running 0 53s 10.244.0.10 k8s <none> <none>
kodekloud-676c6b9fcd-m2q7x 1/1 Running 0 53s 10.244.0.11 k8s <none> <none>
kodekloud-676c6b9fcd-p8tnl 1/1 Running 0 53s 10.244.1.11 k8s-m02 <none> <none>
If we look at the latest events of the deployment, the deployment-controller Scaled down replica set kodekloud-8477b7849 to 0 at a time and Scaled up new replica set kodekloud-676c6b9fcd to 4.
pradeep@learnk8s$ kubectl describe deployments.apps
Name: kodekloud
Namespace: default
CreationTimestamp: Tue, 15 Feb 2022 12:43:38 +0530
Labels: app=kodekloud
Annotations: deployment.kubernetes.io/revision: 3
Selector: app=kodekloud
Replicas: 4 desired | 4 updated | 4 total | 4 available | 0 unavailable
StrategyType: Recreate
MinReadySeconds: 0
Pod Template:
Labels: app=kodekloud
Containers:
webapp-color:
Image: kodekloud/webapp-color:v3
Port: <none>
Host Port: <none>
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
OldReplicaSets: <none>
NewReplicaSet: kodekloud-676c6b9fcd (4/4 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 35m deployment-controller Scaled up replica set kodekloud-589c9f4b47 to 4
Normal ScalingReplicaSet 20m deployment-controller Scaled up replica set kodekloud-8477b7849 to 1
Normal ScalingReplicaSet 20m deployment-controller Scaled down replica set kodekloud-589c9f4b47 to 3
Normal ScalingReplicaSet 20m deployment-controller Scaled up replica set kodekloud-8477b7849 to 2
Normal ScalingReplicaSet 20m deployment-controller Scaled down replica set kodekloud-589c9f4b47 to 2
Normal ScalingReplicaSet 20m deployment-controller Scaled up replica set kodekloud-8477b7849 to 3
Normal ScalingReplicaSet 20m deployment-controller Scaled down replica set kodekloud-589c9f4b47 to 1
Normal ScalingReplicaSet 20m deployment-controller Scaled up replica set kodekloud-8477b7849 to 4
Normal ScalingReplicaSet 19m deployment-controller Scaled down replica set kodekloud-589c9f4b47 to 0
Normal ScalingReplicaSet 2m58s deployment-controller Scaled down replica set kodekloud-8477b7849 to 0
Normal ScalingReplicaSet 2m27s deployment-controller Scaled up replica set kodekloud-676c6b9fcd to 4
Just to verify, let us connect to one of the pods from the new version and check the output.
pradeep@learnk8s$ minikube ssh -p k8s
_ _
_ _ ( ) ( )
___ ___ (_) ___ (_)| |/') _ _ | |_ __
/' _ ` _ `\| |/' _ `\| || , < ( ) ( )| '_`\ /'__`\
| ( ) ( ) || || ( ) || || |\`\ | (_) || |_) )( ___/
(_) (_) (_)(_)(_) (_)(_)(_) (_)`\___/'(_,__/'`\____)
$ curl 10.244.1.12:8080
<!doctype html>
<title>Hello from Flask</title>
<body style="background: #e74c3c;"></body>
<div style="color: #e4e4e4;
text-align: center;
height: 90px;
vertical-align: middle;">
<h1>Hello from kodekloud-676c6b9fcd-6bm6z!</h1>
<h2>
Application Version: v3
</h2>
</div>$
From this, it is clear that the application got upgraded to latest version.
Also, there is another test to verify the color used by the web-app. All four pods returned red.
$ curl 10.244.1.12:8080/color
red$ curl 10.244.1.11:8080/color
red$ curl 10.244.0.11:8080/color
red$ curl 10.244.0.10:8080/color
red$