🏷️ 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"
}