A Kubernetes node can be storage-ready before any new disk appears in lsblk. With CSI-backed storage, the disk appears only after the array maps a LUN to the node.
Target State
For a node with primary and iSCSI networks:
ens192 -> service network, default route, DNS
iscsi01 -> 169.253.0.x/24
iscsi02 -> 169.253.1.x/24
The node should have:
- deterministic netplan.
- reachable storage portals.
open-iscsiinstalled and enabled.- an initiator name.
- successful target discovery.
- persistent iSCSI node startup.
Verify Network First
ip -br addr
ip route
ping -c 3 169.253.0.11
ping -c 3 169.253.1.11
If portal pings fail, stop and fix networking before touching iSCSI.
Install And Enable iSCSI
sudo apt-get update
sudo apt-get install -y open-iscsi
sudo systemctl enable --now iscsid
sudo systemctl enable --now open-iscsi
Check the service:
systemctl status iscsid --no-pager
Initiator Name
Check the current initiator:
cat /etc/iscsi/initiatorname.iscsi
Regenerate if needed:
sudo cp -a /etc/iscsi/initiatorname.iscsi /var/tmp/initiatorname.iscsi.backup.$(date +%F-%H%M%S) 2>/dev/null || true
echo "InitiatorName=$(sudo /sbin/iscsi-iname)" | sudo tee /etc/iscsi/initiatorname.iscsi
sudo systemctl restart iscsid
Discover And Login
Discover targets:
sudo iscsiadm -m discovery -t sendtargets -p 169.253.0.11
sudo iscsiadm -m discovery -t sendtargets -p 169.253.1.11
Login to all discovered nodes:
sudo iscsiadm -m node --login
Make sessions persistent:
sudo iscsiadm -m node -o update -n node.startup -v automatic
Verify:
sudo iscsiadm -m session
sudo iscsiadm -m session -P 3 | grep -i 'Attached scsi disk' || true
lsblk
Why No Disk May Appear Yet
If sessions exist but lsblk shows no new disk, that can be correct.
CSI flow:
PVC created
CSI asks array to create volume
array maps LUN to node IQN
node sees disk
kubelet mounts volume for pod
Before the array maps a LUN, the node can be connected to the array but have no new block device.
Bootstrap Pattern
For data centers with iSCSI arrays, make this opt-in through environment values:
ENABLE_ISCSI=true
ISCSI_PORTALS="169.253.0.11 169.253.1.11"
ISCSI_TARGET_IQN="iqn.2007-11.com.nimblestorage:austin-g5f6a0959b70c5587"
ENABLE_MULTIPATH=false
Then run the storage stage before any bootstrap step that expects attached storage devices.
Operating Model
- Bootstrap prepares the node for storage.
- CSI owns volume creation and LUN mapping.
- The array remains the authority for volume lifecycle.
- Kubernetes consumes the resulting devices through the CSI workflow.