Mastering OpenShift’s Boot Process: Essential Steps

This is one of the most common Senior OpenShift Architect interview questions. Interviewers are looking for your understanding of what happens from the moment a server powers on until an application pod is running.

A strong answer should cover Ignition → RHCOS → kubelet → CRI-O → Control Plane → Scheduler → CNI → Pod.


Complete OpenShift Boot Sequence

Power ON
│
▼
BIOS / UEFI
│
▼
Boot Loader (GRUB)
│
▼
RHCOS Kernel
│
▼
systemd starts services
│
▼
Ignition (first boot only)
│
▼
Machine Config Daemon
│
▼
CRI-O + kubelet start
│
▼
kubelet registers with API Server
│
▼
Node becomes Ready
│
▼
Operators reconcile cluster
│
▼
Scheduler assigns Pods
│
▼
CRI-O pulls images
│
▼
OVN configures networking
│
▼
Pod starts

Step 1 — Server Power On

The physical server or VM starts.

The sequence begins with:

  • BIOS/UEFI
  • CPU initialization
  • Memory initialization
  • Disk detection
  • NIC initialization

After POST (Power-On Self Test), the firmware loads the bootloader.


Step 2 — Bootloader (GRUB)

GRUB loads:

  • Linux kernel
  • initramfs

For OpenShift this is:

Red Hat CoreOS (RHCOS)

The kernel initializes:

  • CPU scheduler
  • Memory manager
  • Filesystems
  • Drivers
  • Network interfaces

Step 3 — systemd Starts

After the kernel mounts the root filesystem:

systemd becomes PID 1.

It starts services such as:

  • NetworkManager
  • CRI-O
  • kubelet
  • chronyd
  • sshd
  • Machine Config Daemon

Step 4 — Ignition (First Boot Only)

One of OpenShift’s biggest differences from a standard Kubernetes deployment is Ignition.

On the first boot:

The node downloads its Ignition configuration.

The configuration contains:

  • SSH keys
  • kubelet configuration
  • certificates
  • hostname
  • networking
  • systemd units
  • MachineConfig references

Once applied, Ignition is not run again. Ongoing node configuration is handled by the Machine Config Operator (MCO) and Machine Config Daemon (MCD).


Step 5 — Machine Config Operator

Now the Machine Config Daemon starts.

It checks:

Desired configuration
↓
Current configuration
↓
Need changes?
↓
Apply configuration
↓
Reboot (if required)

It configures:

  • kernel arguments
  • sysctl
  • kubelet config
  • registries.conf
  • CA certificates
  • chrony
  • SSH configuration

Step 6 — CRI-O Starts

OpenShift uses CRI-O as its container runtime.

CRI-O:

  • starts container runtime
  • communicates with kubelet
  • manages OCI containers
  • uses runc (or crun) underneath

At this point there are still no application pods.


Step 7 — kubelet Starts

kubelet is the node agent.

Its responsibilities include:

  • registering the node
  • monitoring pods
  • starting containers
  • reporting status
  • managing volumes

The kubelet loads:

  • client certificates
  • kubeconfig
  • bootstrap configuration

Step 8 — TLS Bootstrap

The kubelet authenticates to the API Server.

kubelet
│
│ CSR
▼
API Server
│
▼
Machine Approver
│
▼
Certificate Approved

After approval:

The node receives a client certificate.


Step 9 — Node Registration

The kubelet creates a Node object in the Kubernetes API.

Example:

oc get nodes

Initially:

NotReady

because networking is not yet configured.


Step 10 — Operators Start Reconciling

This is where OpenShift differs significantly from upstream Kubernetes.

Cluster Operators begin reconciling the desired state.

Examples:

  • Authentication Operator
  • Ingress Operator
  • DNS Operator
  • Image Registry Operator
  • Monitoring Operator
  • Network Operator
  • Machine Config Operator

The Cluster Version Operator (CVO) ensures the correct versions of all platform components are deployed.


Step 11 — OVN-Kubernetes Configures Networking

The Cluster Network Operator deploys OVN-Kubernetes.

Each node starts:

ovnkube-node
OVS
OVN Controller

OVN creates:

  • virtual switches
  • logical routers
  • GENEVE tunnels
  • routing tables
  • pod interfaces

Now the node becomes:

Ready

because networking is available.


Step 12 — Scheduler Assigns Pods

The scheduler watches for pods without a node assignment.

Example:

spec:
nodeName: null

The scheduler evaluates:

  • CPU
  • Memory
  • Taints
  • Tolerations
  • Affinity
  • Anti-affinity
  • Node selectors
  • Topology spread constraints

Then writes:

nodeName: worker-2

into the Pod specification.


Step 13 — kubelet Receives the Pod

The kubelet on the assigned node watches the API server and detects the new Pod.

Example:

Pod Assigned
↓
kubelet notices
↓
Start Pod

Step 14 — Image Pull

kubelet asks CRI-O to start the container.

CRI-O:

Check local cache
↓
Image exists?
↓
Yes → Run
↓
No
↓
Pull image
↓
Verify digest
↓
Store image

The image is pulled from:

  • Quay
  • OpenShift Image Registry
  • Docker Hub
  • Harbor
  • Artifactory
  • another OCI-compatible registry

Step 15 — Pod Sandbox Creation

CRI-O creates:

  • network namespace
  • PID namespace
  • IPC namespace
  • mount namespace
  • cgroups
  • SELinux labels
  • seccomp profile

This forms the pod sandbox.


Step 16 — OVN Creates the Pod Network

OVN:

  • allocates an IP address
  • creates the veth pair
  • connects the pod to Open vSwitch
  • updates routing
  • applies NetworkPolicies
  • configures GENEVE encapsulation for cross-node traffic

Now the pod can communicate with:

  • Services
  • Other pods
  • External networks (subject to policy)

Step 17 — Volume Mounts

kubelet mounts:

  • Secrets
  • ConfigMaps
  • PVCs
  • CSI volumes
  • projected volumes
  • service account token

Step 18 — Container Starts

CRI-O executes:

runc create
↓
runc start

The container process starts.


Step 19 — Health Checks

kubelet begins running probes:

  • Startup probe (if configured)
  • Liveness probe
  • Readiness probe

Only after the readiness probe succeeds does the pod receive traffic through a Service.


Step 20 — Service Endpoints Updated

The EndpointSlice controller updates the Service.

Pod Ready
↓
EndpointSlice updated
↓
kube-proxy / OVN
↓
Service updated
↓
Traffic flows

At this stage:

  • The application is reachable inside the cluster via a Service.
  • If exposed with an OpenShift Route or Kubernetes Ingress, external clients can also reach it.

End-to-End Flow (Interview Summary)

Power On
│
BIOS/UEFI
│
GRUB
│
Linux Kernel
│
systemd
│
Ignition (first boot)
│
Machine Config Daemon
│
CRI-O
│
kubelet
│
TLS Bootstrap
│
API Server
│
Node Registered
│
OVN Networking
│
Node Ready
│
Scheduler
│
kubelet
│
CRI-O Pull Image
│
Pod Sandbox
│
Network Setup
│
Volume Mounts
│
Container Starts
│
Readiness Probe
│
Service Endpoints
│
Application Running
Interview Tip

For a senior architect role, emphasize these OpenShift-specific differentiators from upstream Kubernetes:

  • RHCOS provides an immutable, container-focused operating system.
  • Ignition performs one-time provisioning on first boot.
  • The Machine Config Operator (MCO) manages ongoing node configuration and orchestrates safe reboots when required.
  • The Cluster Version Operator (CVO) coordinates platform upgrades and lifecycle management.
  • Cluster Operators continuously reconcile core platform components such as networking, ingress, authentication, DNS, and monitoring.
  • OVN-Kubernetes provides the default software-defined networking, using GENEVE tunnels, logical switches, and logical routers for pod connectivity.
  • Security Context Constraints (SCCs) enforce pod security policies before workloads are admitted.

This level of detail demonstrates not only Kubernetes knowledge but also a solid understanding of the OpenShift platform lifecycle and architecture, which is exactly what interviewers expect from a senior OpenShift engineer or architect.

Leave a Reply