⌂ Home

ReplicaSet Scaling Behavior

Interactive visualization of ReplicaSet controller behavior

Step 0: Initial State

ReplicaSet is maintaining the desired replica count

Running
Starting
Terminating
Failed
Current State
Current: 2 pods
Desired State
Desired: 2 pods

Scale Up

ReplicaSet controller creates new pods when desired > current

Process: New pods created → ContainerCreating → Running

Scale Down

Controller terminates excess pods when current > desired

Process: Pods marked for deletion → Terminating → Removed

Self-Healing

Automatically replaces failed pods to maintain desired count

Trigger: Pod crash, node failure, or manual deletion

Scaling Methods

Manual: kubectl scale or edit replicas field

HPA: Automatic scaling based on CPU/memory metrics

ReplicaSet YAML Example
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: frontend-rs
  labels:
    app: frontend
spec:
  replicas: 5          # Desired number of pod replicas
  selector:
    matchLabels:
      app: frontend
  template:
    metadata:
      labels:
        app: frontend
    spec:
      containers:
      - name: nginx
        image: nginx:1.21
        ports:
        - containerPort: 80

# Scale manually:
kubectl scale replicaset frontend-rs --replicas=3

# View ReplicaSet status:
kubectl get replicaset frontend-rs
Scheduler Decision Process and Pod Placement ReplicaSet Controller Detects: Current=3, Desired=5 Action: Create 2 new pods (unscheduled, node=none) kube-scheduler Watches for unscheduled pods Filters and scores nodes Assigns pod → node binding 1. Filtering (Feasibility) Check each node for: ✓ Sufficient CPU and memory ✓ Volume requirements met ✓ Node selectors match ✓ Taints tolerated 2. Scoring (Priority) Rank feasible nodes by: ★ Resource balance (spread pods) ★ Affinity/anti-affinity rules ★ Image locality ★ Pod topology spread 3. Binding Scheduler binds pod to best node: • Writes pod.spec.nodeName • Pod status: Scheduled • kubelet on that node starts pod Node Resource Check Example worker-node-1 ✓ CPU: 2 cores available / 4 total Memory: 4 GB available / 8 GB Pods: 15 / 110 max → Selected for pod placement worker-node-2 ⚠ CPU: 0.5 cores available / 4 total Memory: 1 GB available / 8 GB Pods: 45 / 110 max → Low resources, lower priority worker-node-3 ✗ CPU: 0.2 cores available / 2 total Memory: 256 MB available / 4 GB Taint: disk=full:NoSchedule → Filtered out (insufficient resources)