Setting up Local Storage Operator and OpenShift Data Foundation on IBM Power

Here are my notes from LSO and ODF setup on Power

Install Local Storage Operator

  1. Log in to the OpenShift Web Console.
  2. Click Operators OperatorHub.
  3. Type local storage in the Filter by keyword…​ box to find the Local Storage Operator from the list of operators and click on it.
  4. Set the following options on the Install Operator page:
    1. Update channel as stable.
    1. Installation Mode as A specific namespace on the cluster.
    1. Installed Namespace as Operator recommended namespace openshift-local-storage.
    1. Approval Strategy as Automatic.
  5. Click Install.

Setup Labels for Storage Nodes

  1. 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=
  1. 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 
  1. 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.

  1. 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
  1. Check the LocalVolumeDiscovery is started and Discovering
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
  1. 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
  1. 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
  1. 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.

  1. Navigate to ODF Operator.

  2. Click Create StorageSystem. Select localblock.

You can rpoceed with setup from there.

Thanks to T K Chasan