Kubernetes storage · Interactive diagram

WaitForFirstConsumer: six phases

Press Play for the flow, or Next to study one phase at a time. Scroll horizontally inside the diagram to read its labels. This is a configuration/provisioning flow, not the application's read/write data path.

Dynamic provisioning with WaitForFirstConsumer Sequence showing a PVC waiting in Pending until a candidate node is selected for a consuming Pod, after which the CSI provisioner creates a disk and PV in the chosen node's zone, the PV binds to the PVC, and the kubelet mounts it. DYNAMIC PROVISIONING OVER TIME · STORAGECLASS WITH volumeBindingMode: WaitForFirstConsumer 1 CREATE PVC 2 CREATE POD 3 NEW POD 4 PICK NODE 5 NODE CHOSEN 6 PROVISION 7 CREATE DISK 8 CREATE PV 9 BIND PVC+PV 10 BIND POD 11 RUN POD 12 MOUNT The PVC sits in Pending. No Pod needs it yet, so nothing is created. PVC and PV are now Bound. Scheduling can now finish. YOU You kubectl apply API Control plane API server + controllers SCHED Scheduler kube-scheduler CSI CSI Provisioner sidecar + CSI driver NODE Kubelet agent on the node LEGEND You Kubernetes component Request / write Noticed via watch Calls storage API Binding (headline)
←/→ step · Space play/pause · R replay · Home/End jump

  1. 1. Create the PVC

    The claim can remain Pending while it waits for a consuming Pod. In this delayed-binding example, no new disk is needed yet.

  2. 2. Create the consuming Pod

    You submit a Pod that names the PVC. The scheduler notices the workload through the API server.

  3. 3. Select a candidate node

    The scheduler considers the workload and storage topology, then records a selected node on the PVC. Final Pod binding has not happened yet.

  4. 4. Provision storage and create a PV

    The provisioner observes the selected-node information, requests a suitable disk through the CSI driver, and creates its PV object.

  5. 5. Bind PVC and PV

    The control plane completes the volume-to-claim binding. Bound storage allows scheduling to proceed; it does not mean the application is already running.

  6. 6. Bind the Pod and mount storage

    The scheduler completes Pod binding. The node-side CSI components and kubelet make storage available to the container; attachment is driver-dependent.