Full lesson
Explore the full explanation, examples, and visuals at your own pace.
The scheduler picks a node; the kubelet runs its pod.
The scheduler selects a node; its kubelet runs the pod. Liveness can restart containers; controllers replace missing pods.
One desired web replica
For this example, the web Deployment wants one replica. It manages a ReplicaSet, which creates the pod needed to maintain that count. The pod is pending because it doesn’t have a node yet; creating a pod and choosing where it runs are separate jobs.
Eligible first, preferred second
The scheduler compares the pending pod’s resource request and placement constraints with available nodes. It filters out nodes that can’t meet them, then scores the eligible ones. Here, Node A is the illustrative choice; scoring ranks options, but doesn’t guarantee a particular placement.
Binding is not starting
Binding and starting are separate actions. The Scheduler asks the API to bind the web pod to Node A, and the API records that assignment. Kubelet A then observes the pod and asks the Runtime to start its container. The Runtime reports the container’s status back to the kubelet.
Two probes, two different responses
Kubelet A runs both probes against the Web container, but they have different jobs. If Readiness fails, the pod stops receiving traffic through matching Service endpoints. If Liveness fails, the kubelet restarts the container in the same pod; it doesn’t schedule a replacement.
Crash: same pod, restarted container
Placement is separate from container recovery: Kubelet A restarts the crashed container inside the existing Web pod on Node A, so the ReplicaSet doesn’t need to create a replacement.
The web container crashes, but Node A remains healthy. What normally happens first?
Let's think this through. The web container crashes, but Node A remains healthy. What normally happens first? A: The kubelet restarts the container in the same pod. B: The scheduler moves the existing pod to Node B. C: The ReplicaSet immediately creates a second pod. Choose an answer, or just think it through. I'll explain in a moment.
- The kubelet restarts the container in the same pod
- The scheduler moves the existing pod to Node B
- The ReplicaSet immediately creates a second pod
The web container crashes, but Node A remains healthy. What normally happens first?
The answer is A: The kubelet restarts the container in the same pod. With the assumed restart policy, Node A's kubelet restarts the crashed container inside the existing pod. The scheduler does not move an existing pod, and a container crash alone does not mean the ReplicaSet must create a replacement.
- The kubelet restarts the container in the same pod
- The scheduler moves the existing pod to Node B
- The ReplicaSet immediately creates a second pod
Missing pod: a new pod
Deletion is different from a container crash: the original pod is gone, so the ReplicaSet sees fewer matching pods than the Deployment’s desired one and creates a new pod. The scheduler then chooses an eligible node again; here, the new pod is assigned to Node B. It isn’t a restart of the original pod.
An unreachable node takes longer
When Node A becomes unreachable, the Controller has to detect the failure and remove the Web pod before the ReplicaSet can create a New pod. The Scheduler can then bind it to Node B. This takes time, and Kubernetes may not know whether the old container has actually stopped.
Three decisions to keep separate
Scheduler places a pending pod on an eligible node. Kubelet restarts a crashed or liveness-failing container, usually in the same pod. Readiness changes Service traffic eligibility; ReplicaSet creates a pod when a replica is missing.
- Scheduler: which eligible node?
- Kubelet: restart this container?
- ReplicaSet: is a pod missing?
Replacement starts with a new scheduling decision
Placement, container recovery, and replica reconciliation are separate loops. A container restart stays in the same pod; replacement creates a new pod, which returns to scheduling for a fresh placement decision.






