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