Here are my notes from LSO and ODF setup on Power
Install Local Storage Operator
- Log in to the OpenShift Web Console.
- Click Operators OperatorHub.
- Type
local storagein the Filter by keyword… box to find the Local Storage Operator from the list of operators and click on it. - Set the following options on the Install Operator page:
- Update channel as
stable.
- Installation Mode as A specific namespace on the cluster.
- Installed Namespace as Operator recommended namespace openshift-local-storage.
- Approval Strategy as Automatic.
- Update channel as
- Click Install.
Setup Labels for Storage Nodes
- Add label to the workers which are being used by ODF, this should be the workers where the storage are attached
oc get nodes -l node-role.kubernetes.io/worker= -oname \
| xargs -I {} oc label {} cluster.ocs.openshift.io/openshift-storage=
- Rescan the scsi bus so we get all of the devices added.
oc get nodes -l node-role.kubernetes.io/worker= -oname \
| xargs -I {} oc debug {} -- chroot /host rescan-scsi-bus.sh
- Build the by-id paths
oc get nodes -l node-role.kubernetes.io/worker= -oname \
| xargs -I {} oc debug {} -- chroot /host udevadm trigger --settle
note: don’t worry about Failed to write 'change' to '/sys/devices/vio/4004/uevent', ignoring: No such device events.
- Discover the local volumes using
LocalVolumeDiscovery
cat << EOF | oc apply -f -
apiVersion: local.storage.openshift.io/v1alpha1
kind: LocalVolumeDiscovery
metadata:
name: auto-discover-devices
namespace: openshift-local-storage
spec:
nodeSelector:
nodeSelectorTerms:
- matchExpressions:
- key: cluster.ocs.openshift.io/openshift-storag
operator: Exists
EOF
- Check the
LocalVolumeDiscoveryis started andDiscovering
oc get LocalVolumeDiscovery -n openshift-local-storage -oyaml auto-discover-devices
...
status:
conditions:
- lastTransitionTime: "2025-06-26T01:27:03Z"
message: successfully running 3 out of 3 discovery daemons
status: "True"
type: Available
observedGeneration: 2
phase: Discovering
- Now that it’s ready, we’re going to find the disks:
# oc get LocalVolumeDiscoveryResult -n openshift-local-storage -ojson | jq -r '.items[].status.discoveredDevices[] | select(.status.state == "Available" and .type == "disk").path' | sort -u
/dev/sde
/dev/sdf
/dev/sdg
/dev/sdh
- Create the Local Volume
cat << EOF | oc apply -f -
apiVersion: local.storage.openshift.io/v1
kind: LocalVolume
metadata:
name: localblock
namespace: openshift-local-storage
spec:
logLevel: Normal
managementState: Managed
nodeSelector:
nodeSelectorTerms:
- matchExpressions:
- key: cluster.ocs.openshift.io/openshift-storage
operator: Exists
storageClassDevices:
- devicePaths:
- /dev/sde
- /dev/sdf
- /dev/sdg
- /dev/sdh
storageClassName: localblock
volumeMode: Block
EOF
- Check the LocalVolume is ready
oc get LocalVolume -n openshift-local-storage -oyaml
status:
conditions:
- lastTransitionTime: "2025-06-26T18:40:20Z"
message: Ready
status: "True"
type: Available
generations:
- group: apps
hash: ""
lastGeneration: 2
name: diskmaker-manager
namespace: openshift-local-storage
resource: DaemonSet
managementState: Managed
observedGeneration: 1
readyReplicas: 0
If ready, we can proceed.
-
Navigate to ODF Operator.
-
Click
Create StorageSystem. Selectlocalblock.
You can rpoceed with setup from there.
Thanks to T K Chasan