Progressive delivery concept in Kubernetes - Time & Space Complexity
Start learning this pattern below
Jump into concepts and practice - no test required
We want to understand how the time to deploy and verify updates grows as we increase the number of users or steps in progressive delivery.
How does the process scale when we add more stages or traffic percentages?
Analyze the time complexity of the following Kubernetes progressive delivery steps.
apiVersion: rollout.k8s.io/v1alpha1
kind: Rollout
metadata:
name: example-rollout
spec:
strategy:
canary:
steps:
- setWeight: 10
- pause: {duration: 5m}
- setWeight: 50
- pause: {duration: 10m}
- setWeight: 100
This snippet defines a rollout with canary steps that gradually increase traffic to a new version with pauses in between.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Sequential execution of rollout steps (setWeight and pause).
- How many times: Number of steps defined in the rollout strategy.
The total time to complete the rollout grows as we add more steps or longer pauses.
| Input Size (n = steps) | Approx. Operations (time units) |
|---|---|
| 3 | Short total pause and weight changes |
| 5 | Longer total pause and more gradual weight changes |
| 10 | Much longer total pause and many small weight changes |
Pattern observation: Total rollout time grows roughly linearly with the number of steps.
Time Complexity: O(n)
This means the rollout time increases in direct proportion to the number of steps in the progressive delivery.
[X] Wrong: "Adding more steps won't affect rollout time much because they run quickly."
[OK] Correct: Each step often includes a pause to monitor, so more steps add more waiting time, increasing total rollout duration.
Understanding how rollout steps affect deployment time helps you design safer updates and explain your approach clearly in real projects.
"What if we removed all pauses between steps? How would the time complexity change?"
Practice
progressive delivery in Kubernetes?Solution
Step 1: Understand the concept of progressive delivery
Progressive delivery means releasing software updates slowly to reduce risk and catch problems early.Step 2: Compare options to the concept
Only To release software changes gradually and safely describes gradual and safe release, matching the concept.Final Answer:
To release software changes gradually and safely -> Option CQuick Check:
Progressive delivery = gradual safe release [OK]
- Confusing progressive delivery with instant deployment
- Ignoring the safety aspect of gradual rollout
- Assuming old versions are deleted immediately
Solution
Step 1: Identify how Kubernetes distinguishes versions
Kubernetes uses labels to tag and select different versions of deployments.Step 2: Match features to use case
Labels allow running multiple versions side by side by selecting pods with specific labels.Final Answer:
Labels -> Option BQuick Check:
Labels = version tags for deployments [OK]
- Confusing namespaces with version tagging
- Using ConfigMaps or volumes for version control
- Not knowing labels select pods
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-v2
labels:
version: v2
spec:
replicas: 2
selector:
matchLabels:
version: v2
template:
metadata:
labels:
version: v2
spec:
containers:
- name: myapp
image: myapp:2.0
What does this configuration do?
Solution
Step 1: Analyze deployment metadata and labels
The deployment is named myapp-v2 and uses label version: v2 for pods.Step 2: Check replicas and container image
It creates 2 replicas running image myapp:2.0, matching label v2.Final Answer:
Deploys two pods running version 2.0 of myapp labeled as v2 -> Option AQuick Check:
Deployment with replicas=2 and image v2 = Deploys two pods running version 2.0 of myapp labeled as v2 [OK]
- Confusing deployment labels with service exposure
- Assuming deletion instead of creation
- Mixing version labels with scaling actions
version: v2 but traffic is still going only to v1. What is a likely cause?Solution
Step 1: Check service selector labels
If the service selector targets version v1, traffic won't reach v2 pods.Step 2: Verify deployment replicas and pod status
If replicas for v2 are zero or pods are not running, no v2 pods receive traffic.Final Answer:
All of the above -> Option DQuick Check:
Service selector + replicas + pod status all affect traffic [OK]
- Only checking one cause and ignoring others
- Assuming pods labeled v2 always run
- Not verifying service selectors
v2 and 90% to v1. Which Kubernetes tool or method best supports this?Solution
Step 1: Understand traffic splitting in Kubernetes
Kubernetes alone does not support weighted traffic routing; service meshes like Istio enable this.Step 2: Evaluate options for traffic control
Using multiple deployments with labels and Istio allows routing 10% to v2 and 90% to v1 safely.Final Answer:
Using multiple Deployments with labels and a Service with weighted traffic routing via Istio or another service mesh -> Option AQuick Check:
Weighted routing needs service mesh, not just scaling [OK]
- Trying to control traffic by scaling replicas only
- Deleting old version immediately
- Using ConfigMaps for traffic routing
