Pod Life Cycle

Learn about the state of Pods during its life cycle.

We'll cover the following

Pods are designed to be mortal and immutable.

Mortal means we create a Pod, it executes a task, and then it terminates. As soon as it completes, it is deleted and cannot be restarted. The same is true if it fails—it is deleted and cannot be restarted.

Immutable means we cannot modify them after they’re deployed. This can be a huge mindset change if we’re from a traditional background where we regularly patched live servers and logged on to them to make fixes and configuration changes. If we need to change a Pod, we create a new one with the changes, delete the old one, and replace it with the new one. If a Pod needs to store data, we should attach a volume and store it in the volume so it’s not lost when the Pod is deleted.

Let’s look at a typical Pod life cycle.

We define a Pod in a declarative YAML object that we post to the API server. It goes into the pending phase while the scheduler finds a node to run it on. Assuming it finds a node, the Pod gets scheduled, and the local kubelet instructs the runtime to start its containers. Once all of its containers are running, the Pod enters the running phase. It remains in the running phase indefinitely if it’s a long-lived Pod, such as a web server. If it’s a short-lived Pod, such as a batch job, it enters the succeeded state as soon as all containers complete their tasks. This is shown in the following figure.

Get hands-on with 1400+ tech skills courses.