Kubernetes_replicasets
Chapter 19: Kubernetes ReplicaSets - Ensuring High Availability
Section titled βChapter 19: Kubernetes ReplicaSets - Ensuring High AvailabilityβTable of Contents
Section titled βTable of Contentsβ- Introduction to ReplicaSets
- Why We Need ReplicaSets
- ReplicaSet vs Replication Controller
- ReplicaSet Specification
- Creating ReplicaSets
- Scaling ReplicaSets
- ReplicaSet Lifecycle
- Best Practices
- Hands-on Lab
- Summary
Introduction to ReplicaSets
Section titled βIntroduction to ReplicaSetsβWhat is a ReplicaSet?
Section titled βWhat is a ReplicaSet?βA ReplicaSet is a Kubernetes resource that ensures a stable set of replica Pods are running at any given time. It provides declarative updates for Pod replicas and is used to guarantee availability and scalability.
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ REPLICASET CONCEPT ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€β ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ β REPLICASET β ββ β name: myapp-replicaset β ββ β replicas: 3 β ββ β selector: app=myapp β ββ β β ββ β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β ββ β β MANAGED PODS β β ββ β β β β ββ β β βββββββββββ βββββββββββ βββββββββββ β β ββ β β β Pod 1 β β Pod 2 β β Pod 3 β β β ββ β β β β β β β β β β ββ β β β app=myappβ β app=myappβ β app=myappβ β β ββ β β β running β β running β β running β β β ββ β β βββββββββββ βββββββββββ βββββββββββ β β ββ β β β β ββ β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β ββ β β ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββWhy We Need ReplicaSets
Section titled βWhy We Need ReplicaSetsβThe Problem: Pod Failures
Section titled βThe Problem: Pod Failuresβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ WHY REPLICASETS MATTER ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€β ββ Without ReplicaSet: ββ βββββββββββββββββββ ββ ββ βββββββββββ ββ β Pod β If this pod crashes, your app is DOWN! ββ β β ββ β MyApp β β No automatic recovery ββ β β β No redundancy ββ β Runningβ β Manual intervention required ββ βββββββββββ ββ ββ With ReplicaSet: ββ ββββββββββββββββ ββ ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ β REPLICASET β ββ β β ββ β βββββββββββ βββββββββββ βββββββββββ β ββ β β Pod 1 β β Pod 2 β β Pod 3 β β ββ β β β β β β β β ββ β β Running β β Running β β Running β β ββ β βββββββββββ βββββββββββ βββββββββββ β ββ β β ββ β β Automatic failure recovery β ββ β β High availability β ββ β β Load distribution β ββ β β Self-healing β ββ β β ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ ββ If Pod 1 crashes: ββ βββββββββββββββββ ββ 1. ReplicaSet detects failure ββ 2. Creates new Pod to replace failed one ββ 3. Your app stays available! ββ ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββReplicaSet vs Replication Controller
Section titled βReplicaSet vs Replication ControllerβKey Differences
Section titled βKey Differencesβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ REPLICASET vs REPLICATION CONTROLLER ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€β ββ Feature β ReplicationController β ReplicaSet ββ βββββββββββββββββββΌββββββββββββββββββββββββΌβββββββββββββ ββ Selector Support β Equality-based only β Set-based & equality ββ Example β env=prod β env in (prod, dev) ββ Recommended Use β Legacy β Current ββ Owned By β N/A β Deployment (usually) ββ ββ Selector Comparison: ββ βββββββββββββββββββ ββ ββ ReplicationController (equality-based): ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ β selector: β ββ β app: nginx # Only matches app=nginx β ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ ββ ReplicaSet (δΈ€η§ι½ζ―ζ): ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ β selector: β ββ β matchLabels: β ββ β app: nginx # Equality-based β ββ β matchExpressions: β ββ β - key: tier β ββ β operator: In β ββ β values: [frontend, backend] # Set-based β ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ ββ Note: ReplicaSet is the recommended resource for most use cases. ββ ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββReplicaSet Specification
Section titled βReplicaSet SpecificationβYAML Structure
Section titled βYAML StructureβapiVersion: apps/v1kind: ReplicaSetmetadata: name: myapp-replicaset labels: app: myapp tier: frontendspec: # Number of replicas replicas: 3
# Selector to identify managed pods selector: matchLabels: app: myapp
# Pod template template: metadata: labels: app: myapp spec: containers: - name: myapp-container image: nginx:1.21 ports: - containerPort: 80 resources: limits: memory: "256Mi" cpu: "500m" requests: memory: "128Mi" cpu: "250m"Key Fields Explained
Section titled βKey Fields Explainedβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ REPLICASET SPEC FIELDS ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€β ββ Field β Description ββ βββββββββββββββββββββββΌβββββββββββββββββββββββββββββ ββ replicas β Number of desired Pods (default: 1) ββ selector β Labels to identify managed Pods ββ minReadySeconds β Seconds to wait before marking ready ββ revisionHistoryLimit β Number of ReplicaSet revisions to retain ββ progressDeadlineSecondsβ Max seconds to wait for progress ββ ββ Template Spec (Pod definition inside): ββ ββββββββββββββββββββββββββββββββ ββ β’ metadata.labels - Must match selector ββ β’ spec.containers - Container definitions ββ β’ spec.initContainers - Init containers (optional) ββ β’ spec.volumes - Volume definitions (optional) ββ ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββCreating ReplicaSets
Section titled βCreating ReplicaSetsβCreating from YAML
Section titled βCreating from YAMLβ# Create ReplicaSetkubectl apply -f replicaset.yaml
# Verify creationkubectl get replicasetkubectl describe replicaset myapp-replicaset
# Check managed podskubectl get pods -l app=myappUsing kubectl run (Imperative)
Section titled βUsing kubectl run (Imperative)β# Create ReplicaSet with kubectl run (deprecated method)kubectl run myapp \ --image=nginx \ --replicas=3 \ --labels=app=myapp
# Scale (creates ReplicaSet if doesn't exist)kubectl scale rs myapp --replicas=5Using Selectors
Section titled βUsing Selectorsβ# Using matchLabels (equality-based)selector: matchLabels: app: myapp tier: frontend
# Using matchExpressions (set-based)selector: matchExpressions: - key: app operator: In values: - myapp - webapp - key: tier operator: NotIn values: - backendScaling ReplicaSets
Section titled βScaling ReplicaSetsβManual Scaling
Section titled βManual Scalingβ# Scale using kubectlkubectl scale rs myapp-replicaset --replicas=5
# Scale deployment (recommended way)kubectl scale deployment myapp-deployment --replicas=3Auto-Scaling (HPA)
Section titled βAuto-Scaling (HPA)β# Create HorizontalPodAutoscalerapiVersion: autoscaling/v2kind: HorizontalPodAutoscalermetadata: name: myapp-hpaspec: scaleTargetRef: apiVersion: apps/v1 kind: ReplicaSet name: myapp-replicaset minReplicas: 2 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 70 - type: Resource resource: name: memory target: type: Utilization averageUtilization: 80# Create HPAkubectl apply -f hpa.yaml
# Check HPA statuskubectl get hpa
# Autoscale based on CPUkubectl autoscale rs myapp-replicaset --min=2 --max=10 --cpu-percent=70Scaling Behavior
Section titled βScaling Behaviorβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ SCALING BEHAVIOR ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€β ββ Scale Up: ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ β β ββ β replicas: 3 βββββΆ replicas: 6 β ββ β β ββ β βββββββ βββββββ βββββββ β ββ β β Pod β β Pod β β Pod β βββΆ +3 new Pods β ββ β β 1 β β 2 β β 3 β β ββ β βββββββ βββββββ βββββββ β ββ β β ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ ββ Scale Down: ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ β β ββ β replicas: 6 βββββΆ replicas: 3 β ββ β β ββ β βββββββ βββββββ βββββββ βββββββ βββββββ βββββββ β ββ β β Pod β β Pod β β Pod β β Pod β β Pod β β Pod β βββΆ -3 Pods β ββ β β 1 β β 2 β β 3 β β 4 β β 5 β β 6 β β ββ β βββββββ βββββββ βββββββ βββββββ βββββββ βββββββ β ββ β β ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ ββ Scale Down Behavior: ββ β’ Terminates pods with longest running time first ββ β’ Respects PodDisruptionBudget ββ β’ Checks readiness probes ββ ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββReplicaSet Lifecycle
Section titled βReplicaSet LifecycleβPod Management
Section titled βPod Managementβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ REPLICASET LIFECYCLE ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€β ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ β CREATION β ββ β β’ User creates ReplicaSet YAML β ββ β β’ ReplicaSet controller creates Pods β ββ β β’ Scheduler assigns Pods to nodes β ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ β ββ βΌ ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ β RUNNING β ββ β β’ Monitors replica count β ββ β β’ Reconciles desired vs actual β ββ β β’ Handles Pod failures β ββ β β’ Responds to scale commands β ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ β ββ βΌ ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ β UPDATING β ββ β β’ Image updates trigger new Pods β ββ β β’ Rolling update (via Deployment) β ββ β β’ Maintains desired replica count β ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ β ββ βΌ ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ β DELETION β ββ β β’ On deletion, managed Pods are also deleted β ββ β β’ Can keep Pods with orphan option β ββ β β’ Finalizers ensure cleanup β ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββOrphaning Pods
Section titled βOrphaning Podsβ# Delete ReplicaSet but keep Podskubectl delete rs myapp-replicaset --cascade=false
# Pods will remain running without ReplicaSet managementBest Practices
Section titled βBest PracticesβUsing Deployments Instead of ReplicaSets
Section titled βUsing Deployments Instead of ReplicaSetsβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ BEST PRACTICES ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€β ββ β DO: ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ β’ Use Deployments instead of bare ReplicaSets ββ β’ Deployments manage ReplicaSets automatically ββ β’ Use HPA for automatic scaling ββ β’ Set appropriate resource requests/limits ββ β’ Use labels for organization ββ ββ β DON'T: ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ β’ Don't create bare ReplicaSets (use Deployments) ββ β’ Don't mix ReplicaSet with Deployments targeting same pods ββ β’ Don't set replicas: 0 unless absolutely necessary ββ β’ Don't forget to set resource limits ββ ββ Deployment > ReplicaSet > Pod: ββ βββββββββββββββββββββββββββββββββ ββ ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ β DEPLOYMENT β ββ β Manages ReplicaSets for controlled rollouts β ββ β β ββ β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β ββ β β REPLICASET (v1) β β ββ β β βββββββ βββββββ βββββββ β β ββ β β β Pod β β Pod β β Pod β image: v1.0 β β ββ β β βββββββ βββββββ βββββββ β β ββ β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β ββ β β ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββHands-on Lab
Section titled βHands-on LabβLab: Working with ReplicaSets
Section titled βLab: Working with ReplicaSetsβIn this hands-on lab, weβll create and manage ReplicaSets.
Prerequisites
Section titled βPrerequisitesβ- A running Kubernetes cluster (minikube, kind, or cloud)
Lab Steps
Section titled βLab Stepsβ# Step 1: Create a ReplicaSetcat > replicaset.yaml << 'EOF'apiVersion: apps/v1kind: ReplicaSetmetadata: name: nginx-replicaset labels: app: nginxspec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.21 ports: - containerPort: 80 resources: limits: memory: "256Mi" cpu: "500m" requests: memory: "128Mi" cpu: "100m"EOF
kubectl apply -f replicaset.yaml
# Step 2: Verify ReplicaSetkubectl get rskubectl get rs nginx-replicaset -o wide
# Step 3: Describe ReplicaSetkubectl describe rs nginx-replicaset
# Step 4: Check managed podskubectl get pods -l app=nginx
# Step 5: Scale the ReplicaSetkubectl scale rs nginx-replicaset --replicas=5
# Step 6: Verify scalingkubectl get pods -l app=nginxkubectl get rs nginx-replicaset
# Step 7: Delete a pod to see self-healingkubectl delete pod nginx-replicaset-xxxxxkubectl get pods -l app=nginx -w
# Step 8: Scale downkubectl scale rs nginx-replicaset --replicas=2
# Step 9: Clean upkubectl delete rs nginx-replicasetSummary
Section titled βSummaryβKey Takeaways
Section titled βKey Takeawaysβ- ReplicaSets ensure availability - Maintains desired number of Pods
- Self-healing - Automatically replaces failed Pods
- Use Deployments - Deployments manage ReplicaSets
- Scaling - Manual and automatic scaling options
Quick Reference
Section titled βQuick Referenceβ# Create ReplicaSetkubectl apply -f rs.yaml
# Get ReplicaSetskubectl get rs
# Scale ReplicaSetkubectl scale rs myapp --replicas=5
# Delete ReplicaSetkubectl delete rs myapp
# Get pods with labelkubectl get pods -l app=myappNext Steps
Section titled βNext StepsβIn the next chapter, weβll explore Kubernetes ConfigMaps and Secrets (Chapter 22), covering:
- Configuration management
- ConfigMaps for configuration data
- Secrets for sensitive data