🏷️ Understand application deployments and how to perform rolling update and rollbacks

🏷️ Understand application deployments and how to perform rolling update and rollbacks#

Create a deployment#

 kb create deploy guisam --image=nginx
ᐅ kb get deploy,po
ᐅ kb describe deploy guisam
ᐅ kb get deploy guisam -o yaml

Delete and recreate#

To re-use a deployment, remove creationTimestamp, resourceVersion, and uid lines. Also remove all the lines including and after status:.

 kb get deploy guisam -o yaml > guisam.yaml
ᐅ kb delete deploy guisam
ᐅ vi guisam.yaml
ᐅ kb apply -f guisam.yaml
ᐅ kb get deploy,po

Create a deployement manifest.#

 kb create deploy guisam --image=nginx --dry-run=client -o yaml > deploy_guisam.yaml

Format output#

 kb get deploy guisam -o json
ᐅ kb get deploy guisam -o yaml
ᐅ kb get deploy guisam -o jsonpath='{.kind}'

Update a deployment.#

ᐅ diff -u guisam.yaml{.before,}
--- guisam.yaml.before  2025-10-06 16:30:47.030682835 +0200
+++ guisam.yaml 2025-10-06 16:31:39.344469775 +0200
@@ -30,6 +30,9 @@
       - image: nginx
         imagePullPolicy: Always
         name: nginx
+        ports:
+          - containerPorts: 80
+            protocol: TCP
         resources: {}
         terminationMessagePath: /dev/termination-log
         terminationMessagePolicy: File
 kb replace -f guisam.yaml --force
ᐅ kb get deploy,po,rs

Scale deployment.#

 kb scale deploy guisam --replicas=3
 kb get po
NAME                      READY   STATUS    RESTARTS   AGE
guisam-76cb46898b-4rl9k   1/1     Running   0          36s
guisam-76cb46898b-bq56b   1/1     Running   0          36s
guisam-76cb46898b-dhdpc   1/1     Running   0          28m
ᐅ kb delete po guisam-76cb46898b-dhdpc
pod "guisam-76cb46898b-dhdpc" deleted
 kb get ep guisam
Warning: v1 Endpoints is deprecated in v1.33+; use discovery.k8s.io/v1 EndpointSlice
NAME     ENDPOINTS                                   AGE
guisam   10.0.1.108:80,10.0.1.132:80,10.0.1.162:80   27m
ᐅ kb get svc guisam -o jsonpath='{.spec.clusterIP}'
10.97.249.3

Deployment#

Deployment

A Deployment is a higher-level controller that manages ReplicaSets and provides declarative updates to applications, including rolling updates, rollbacks, and versioning.

  • Enables zero-downtime deployments via rolling update strategies.

  • Maintains a revision history, allowing rollbacks to previous versions.

  • Automatically creates and manages underlying ReplicaSets.

  • Recommended for most stateless applications.

Rolling update strategy: RollingUpdate, Recreate, OnDelete.

Create a deployment.

 kb create deploy guisamweb \
--dry-run=client --image=nginx:alpine \
--port=80 --replicas 2 \
-o yaml > guisamweb.yaml
ᐅ kb apply -f guisamweb.yaml
ᐅ kb get deploy guisamweb -o jsonpath='{.spec.template.spec.containers[].image}'
nginx:alpine

Change deployment image.

 kb set image deploy guisamweb nginx=nginx:trixie

Check deployment history.

 kb rollout history deploy guisamweb
deployment.apps/guisamweb
REVISION  CHANGE-CAUSE
1         <none>
2         <none>
ᐅ kb rollout history deploy guisamweb --revision=1 -o jsonpath='{.spec.template.spec.containers[*].image}'
nginx:alpine
ᐅ kb rollout history deploy guisamweb --revision=2 -o jsonpath='{.spec.template.spec.containers[*].image}'
nginx:trixie

Rollback to revision 1.

 kb rollout undo deploy guisamweb --to-revision=1 kb get deploy guisamweb -o jsonpath='{.spec.template.spec.containers[*].image}'
nginx:alpine

Restart a deployment;

 kb rollout restart deploy guisamweb

Check deployment strategy.

 kb get deploy guisamweb -o jsonpath='{.spec.strategy}' | jq
{
  "rollingUpdate": {
    "maxSurge": "25%",
    "maxUnavailable": "25%"
  },
  "type": "RollingUpdate"
}