Chapter 2. OpenShift Data Foundation deployed using local storage devices
Chapter 2. OpenShift Data Foundation deployed using local storage devices 2.1. Replacing storage nodes on bare metal infrastructure To replace an operational node, see Section 2.1.1, "Replacing an operational node on bare metal user-provisioned infrastructure" To replace a failed node, see Section 2.1.2, "Replacing a failed node on bare metal user-provisioned infrastructure" 2.1.1. Replacing an operational node on bare metal user-provisioned infrastructure Prerequisites Red Hat recommends that replacement nodes are configured with similar infrastructure, resources, and disks to the node being replaced. You must be logged into the OpenShift Container Platform (RHOCP) cluster. If you upgraded to OpenShift Data Foundation version 4.8 from a version, and have not already created the LocalVolumeDiscovery and LocalVolumeSet objects, do so now by following the procedure described in Post-update configuration changes for clusters backed by local storage . Procedure Identify the NODE and get labels on the node to be replaced. Identify the mon (if any) and OSDs that are running in the node to be replaced. Scale down the deployments of the pods identified in the step. For example: Mark the node as unschedulable. Drain the node. Delete the node. Get a new bare metal machine with required infrastructure. See Installing a cluster on bare metal . Important For information about how to replace a master node when you have installed OpenShift Data Foundation on a three-node OpenShift compact bare-metal cluster, see the Backup and Restore guide in the OpenShift Container Platform documentation. Create a new OpenShift Container Platform node using the new bare metal machine. Check for certificate signing requests (CSRs) related to OpenShift Container Platform that are in Pending state: Approve all required OpenShift Container Platform CSRs for the new node: Click Compute Nodes in OpenShift Web Console, confirm if the new node is in Ready state. Apply the OpenShift Data Foundation label to the new node using any one of the following: From User interface For the new node, click Action Menu (...) Edit Labels . Add cluster.ocs.openshift.io/openshift-storage and click Save . From Command line interface Execute the following command to apply the OpenShift Data Foundation label to the new node: Identify the namespace where OpenShift local storage operator is installed and assign it to local_storage_project variable: For example: Add a new worker node to localVolumeDiscovery and localVolumeSet . Update the localVolumeDiscovery definition to include the new node and remove the failed node. Remember to save before exiting the editor. In the above example, server3.example.com was removed and newnode.example.com is the new node. Determine which localVolumeSet to edit. Update the localVolumeSet definition to include the new node and remove the failed node. Remember to save before exiting the editor. In the above example, server3.example.com was removed and newnode.example.com is the new node. Verify that the new localblock PV is available. Change to the openshift-storage project. Remove the failed OSD from the cluster. You can specify multiple failed OSDs if required: <failed_osd_id> Is the integer in the pod name immediately after the rook-ceph-osd prefix. You can add comma separated OSD IDs in the command to remove more than one OSD, for example, FAILED_OSD_IDS=0,1,2 . The FORCE_OSD_REMOVAL value must be changed to true in clusters that only have three OSDs, or clusters with insufficient space to restore all three replicas of the data after the OSD is removed. Verify that the OSD was removed successfully by checking the status of the ocs-osd-removal-job pod. A status of Completed confirms that the OSD removal job succeeded. Ensure that the OSD removal is completed. Example output: Important If the ocs-osd-removal-job fails and the pod is not in the expected Completed state, check the pod logs for further debugging. For example: Delete the ocs-osd-removal-job . Example output: Verification steps Execute the following command and verify that the new node is present in the output: Click Workloads Pods , confirm that at least the following pods on the new node are in Running state: csi-cephfsplugin-* csi-rbdplugin-* Verify that all other required OpenShift Data Foundation pods are in Running state. Ensure that the new incremental mon is created and is in the Running state. Example output: OSD and Mon might take several minutes to get to the Running state. Verify that new OSD pods are running on the replacement node. Optional: If cluster-wide encryption is enabled on the cluster, verify that the new OSD devices are encrypted. For each of the new nodes identified in step, do the following: Create a debug pod and open a chroot environment for the selected host(s). Run "lsblk" and check for the "crypt" keyword beside the ocs-deviceset name(s) If verification steps fail, contact Red Hat Support . 2.1.2. Replacing a failed node on bare metal user-provisioned infrastructure Prerequisites Red Hat recommends that replacement nodes are configured with similar infrastructure, resources, and disks to the node being replaced. You must be logged into the OpenShift Container Platform (RHOCP) cluster. If you upgraded to OpenShift Data Foundation version 4.8 from a version, and have not already created the LocalVolumeDiscovery and LocalVolumeSet objects, do so now by following the procedure described in Post-update configuration changes for clusters backed by local storage . Procedure Identify the NODE and get labels on the node to be replaced. Identify the mon (if any) and OSDs that are running in the node to be replaced. Scale down the deployments of the pods identified in the step. For example: Mark the node as unschedulable. Remove the pods which are in Terminating state. Drain the node. Delete the node. Get a new bare metal machine with required infrastructure. See Installing a cluster on bare metal . Important For information about how to replace a master node when you have installed OpenShift Data Foundation on a three-node OpenShift compact bare-metal cluster, see the Backup and Restore guide in the OpenShift Container Platform documentation. Create a new OpenShift Container Platform node using the new bare metal machine. Check for certificate signing requests (CSRs) related to OpenShift Container Platform that are in Pending state: Approve all required OpenShift Container Platform CSRs for the new node: Click Compute Nodes in OpenShift Web Console, confirm if the new node is in Ready state. Apply the OpenShift Data Foundation label to the new node using any one of the following: From User interface For the new node, click Action Menu (...) Edit Labels . Add cluster.ocs.openshift.io/openshift-storage and click Save . From Command line interface Execute the following command to apply the OpenShift Data Foundation label to the new node: Identify the namespace where OpenShift local storage operator is installed and assign it to local_storage_project variable: For example: Add a new worker node to localVolumeDiscovery and localVolumeSet . Update the localVolumeDiscovery definition to include the new node and remove the failed node. Remember to save before exiting the editor. In the above example, server3.example.com was removed and newnode.example.com is the new node. Determine which localVolumeSet to edit. Update the localVolumeSet definition to include the new node and remove the failed node. Remember to save before exiting the editor. In the above example, server3.example.com was removed and newnode.example.com is the new node. Verify that the new localblock PV is available. Change to the openshift-storage project. Remove the failed OSD from the cluster. You can specify multiple failed OSDs if required: <failed_osd_id> Is the integer in the pod name immediately after the rook-ceph-osd prefix. You can add comma separated OSD IDs in the command to remove more than one OSD, for example, FAILED_OSD_IDS=0,1,2 . The FORCE_OSD_REMOVAL value must be changed to true in clusters that only have three OSDs, or clusters with insufficient space to restore all three replicas of the data after the OSD is removed. Verify that the OSD was removed successfully by checking the status of the ocs-osd-removal-job pod. A status of Completed confirms that the OSD removal job succeeded. Ensure that the OSD removal is completed. Example output: Important If the ocs-osd-removal-job fails and the pod is not in the expected Completed state, check the pod logs for further debugging. For example: Delete the ocs-osd-removal-job . Example output: Verification steps Execute the following command and verify that the new node is present in the output: Click Workloads Pods , confirm that at least the following pods on the new node are in Running state: csi-cephfsplugin-* csi-rbdplugin-* Verify that all other required OpenShift Data Foundation pods are in Running state. Ensure that the new incremental mon is created and is in the Running state. Example output: OSD and Mon might take several minutes to get to the Running state. Verify that new OSD pods are running on the replacement node. Optional: If cluster-wide encryption is enabled on the cluster, verify that the new OSD devices are encrypted. For each of the new nodes identified in step, do the following: Create a debug pod and open a chroot environment for the selected host(s). Run "lsblk" and check for the "crypt" keyword beside the ocs-deviceset name(s) If verification steps fail, contact Red Hat Support . 2.2. Replacing storage nodes on IBM Z or LinuxONE infrastructure You can choose one of the following procedures to replace storage nodes: Section 2.2.1, "Replacing operational nodes on IBM Z or LinuxONE infrastructure" Section 2.2.2, "Replacing failed nodes on IBM Z or LinuxONE infrastructure" 2.2.1. Replacing operational nodes on IBM Z or LinuxONE infrastructure Use this procedure to replace an operational node on IBM Z or LinuxONE infrastructure. Procedure Log in to OpenShift Web Console. Click Compute Nodes . Identify the node that needs to be replaced. Take a note of its Machine Name . Mark the node as unschedulable using the following command: Drain the node using the following command: Important This activity may take at least 5-10 minutes. Ceph errors generated during this period are temporary and are automatically resolved when the new node is labeled and functional. Click Compute Machines . Search for the required machine. Besides the required machine, click the Action menu (...) Delete Machine . Click Delete to confirm the machine deletion. A new machine is automatically created. Wait for the new machine to start and transition into Running state. Important This activity may take at least 5-10 minutes. Click Compute Nodes , confirm if the new node is in Ready state. Apply the OpenShift Data Foundation label to the new node using any one of the following: From User interface For the new node, click Action Menu (...) Edit Labels Add cluster.ocs.openshift.io/openshift-storage and click Save . From command line interface Execute the following command to apply the OpenShift Data Foundation label to the new node: Verification steps Execute the following command and verify that the new node is present in the output: Click Workloads Pods , confirm that at least the following pods on the new node are in Running state: csi-cephfsplugin-* csi-rbdplugin-* Verify that all other required OpenShift Data Foundation pods are in Running state. Verify that new OSD pods are running on the replacement node. Optional: If data encryption is enabled on the cluster, verify that the new OSD devices are encrypted. For each of the new nodes identified in step, do the following: Create a debug pod and open a chroot environment for the selected host(s). Run "lsblk" and check for the "crypt" keyword beside the ocs-deviceset name(s) If verification steps fail, contact Red Hat Support . 2.2.2. Replacing failed nodes on IBM Z or LinuxONE infrastructure Perform this procedure to replace a failed node which is not operational on IBM Z or LinuxONE infrastructure for OpenShift Data Foundation. Procedure Log in to OpenShift Web Console and click Compute Nodes . Identify the faulty node and click on its Machine Name . Click Actions Edit Annotations , and click Add More . Add machine.openshift.io/exclude-node-draining and click Save . Click Actions Delete Machine , and click Delete . A new machine is automatically created, wait for new machine to start. Important This activity may take at least 5-10 minutes. Ceph errors generated during this period are temporary and are automatically resolved when the new node is labeled and functional. Click Compute Nodes , confirm if the new node is in Ready state. Apply the OpenShift Data Foundation label to the new node using any one of the following: From the web user interface For the new node, click Action Menu (...) Edit Labels Add cluster.ocs.openshift.io/openshift-storage and click Save . From the command line interface Execute the following command to apply the OpenShift Data Foundation label to the new node: Execute the following command and verify that the new node is present in the output: Click Workloads Pods , confirm that at least the following pods on the new node are in Running state: csi-cephfsplugin-* csi-rbdplugin-* Verify that all other required OpenShift Data Foundation pods are in Running state. Verify that new OSD pods are running on the replacement node. Optional: If data encryption is enabled on the cluster, verify that the new OSD devices are encrypted. For each of the new nodes identified in step, do the following: Create a debug pod and open a chroot environment for the selected host(s). Run "lsblk" and check for the "crypt" keyword beside the ocs-deviceset name(s) If verification steps fail, contact Red Hat Support . 2.3. Replacing storage nodes on IBM Power infrastructure For OpenShift Data Foundation, node replacement can be performed proactively for an operational node and reactively for a failed node for the IBM Power related deployments. 2.3.1. Replacing an operational or failed storage node on IBM Power Prerequisites Red Hat recommends that replacement nodes are configured with similar infrastructure and resources to the node being replaced. You must be logged into the OpenShift Container Platform (RHOCP) cluster. If you upgraded to OpenShift Data Foundation 4.9 from a version and have not already created the LocalVolumeDiscovery object, do so now following the procedure described in Post-update configuration changes for clusters backed by local storage . Procedure Identify the node and get labels on the node to be replaced. Identify the mon (if any) and object storage device (OSD) pods that are running in the node to be replaced. Scale down the deployments of the pods identified in the step. For example: Mark the node as unschedulable. Remove the pods which are in Terminating state. Drain the node. Delete the node. Get a new IBM Power machine with required infrastructure. See Installing a cluster on IBM Power . Create a new OpenShift Container Platform node using the new IBM Power machine. Check for certificate signing requests (CSRs) related to OpenShift Container Platform that are in Pending state: Approve all required OpenShift Container Platform CSRs for the new node: Click Compute Nodes in OpenShift Web Console, confirm if the new node is in Ready state. Apply the OpenShift Data Foundation label to the new node using any one of the following: From User interface For the new node, click Action Menu (...) Edit Labels . Add cluster.ocs.openshift.io/openshift-storage and click Save . From Command line interface Execute the following command to apply the OpenShift Data Foundation label to the new node: Identify the namespace where OpenShift local storage operator is installed and assign it to local_storage_project variable: For example: Add a new worker node to localVolumeDiscovery . Update the localVolumeDiscovery definition to include the new node and remove the failed node. Remember to save before exiting the editor. In the above example, worker-0 was removed and worker-3 is the new node. Add a newly added worker node to localVolume. Determine which localVolume to edit. Update the localVolume definition to include the new node and remove the failed node. Remember to save before exiting the editor. In the above example, worker-0 was removed and worker-3 is the new node. Verify that the new localblock PV is available. Change to the openshift-storage project. Remove the failed OSD from the cluster. You can specify multiple failed OSDs if required. Identify the PVC as afterwards we need to delete PV associated with that specific PVC. where, osd_id_to_remove is the integer in the pod name immediately after the rook-ceph-osd prefix . In this example, the deployment name is rook-ceph-osd-1 . Example output: In this example, the PVC name is ocs-deviceset-localblock-0-data-0-g2mmc . Remove the failed OSD from the cluster. The FORCE_OSD_REMOVAL value must be changed to true in clusters that only have three OSDs, or clusters with insufficient space to restore all three replicas of the data after the OSD is removed. Warning This step results in the OSD being completely removed from the cluster. Ensure that the correct value of osd_id_to_remove is provided. Verify that the OSD was removed successfully by checking the status of the ocs-osd-removal-job pod. A status of Completed confirms that the OSD removal job succeeded. Ensure that the OSD removal is completed. Example output: Important If the ocs-osd-removal-job fails and the pod is not in the expected Completed state, check the pod logs for further debugging. For example: Delete the PV associated with the failed node. Identify the PV associated with the PVC. The PVC name must be identical to the name that is obtained while removing the failed OSD from the cluster. If there is a PV in Released state, delete it. For example: Identify the crashcollector pod deployment. If there is an existing crashcollector pod deployment, delete it. Delete the ocs-osd-removal-job . Example output: Verification steps Execute the following command and verify that the new node is present in the output: Click Workloads Pods , confirm that at least the following pods on the new node are in Running state: csi-cephfsplugin-* csi-rbdplugin-* Verify that all other required OpenShift Data Foundation pods are in Running state. Ensure that the new incremental mon is created and is in the Running state. Example output: OSD and Mon might take several minutes to get to the Running state. Verify that new OSD pods are running on the replacement node. Optional: If cluster-wide encryption is enabled on the cluster, verify that the new OSD devices are encrypted. For each of the new nodes identified in step, do the following: Create a debug pod and open a chroot environment for the selected host(s). Run "lsblk" and check for the "crypt" keyword beside the ocs-deviceset name(s) If verification steps fail, contact Red Hat Support . 2.4. Replacing storage nodes on VMware infrastructure To replace an operational node, see: Section 2.4.1, "Replacing an operational node on VMware user-provisioned infrastructure" Section 2.4.2, "Replacing an operational node on VMware installer-provisioned infrastructure" To replace a failed node,see: Section 2.4.3, "Replacing a failed node on VMware user-provisioned infrastructure" Section 2.4.4, "Replacing a failed node on VMware installer-provisioned infrastructure" 2.4.1. Replacing an operational node on VMware user-provisioned infrastructure Prerequisites Red Hat recommends that replacement nodes are configured with similar infrastructure, resources, and disks to the node being replaced. You must be logged into the OpenShift Container Platform (RHOCP) cluster. If you upgraded to OpenShift Data Foundation version 4.8 from a version, and have not already created the LocalVolumeDiscovery and LocalVolumeSet objects, do so now by following the procedure described in Post-update configuration changes for clusters backed by local storage . Procedure Identify the NODE and get labels on the node to be replaced. Identify the mon (if any) and OSDs that are running in the node to be replaced. Scale down the deployments of the pods identified in the step. For example: Mark the node as unschedulable. Drain the node. Delete the node. Log in to vSphere and terminate the identified VM. Create a new VM on VMware with the required infrastructure. See Supported Infrastructure and Platforms . Create a new OpenShift Container Platform worker node using the new VM. Check for certificate signing requests (CSRs) related to OpenShift Container Platform that are in Pending state: Approve all required OpenShift Container Platform CSRs for the new node: Click Compute Nodes in OpenShift Web Console, confirm if the new node is in Ready state. Apply the OpenShift Data Foundation label to the new node using any one of the following: From User interface For the new node, click Action Menu (...) Edit Labels . Add cluster.ocs.openshift.io/openshift-storage and click Save . From Command line interface Execute the following command to apply the OpenShift Data Foundation label to the new node: Identify the namespace where OpenShift local storage operator is installed and assign it to local_storage_project variable: For example: Add a new worker node to localVolumeDiscovery and localVolumeSet . Update the localVolumeDiscovery definition to include the new node and remove the failed node. Remember to save before exiting the editor. In the above example, server3.example.com was removed and newnode.example.com is the new node. Determine which localVolumeSet to edit. Update the localVolumeSet definition to include the new node and remove the failed node. Remember to save before exiting the editor. In the above example, server3.example.com was removed and newnode.example.com is the new node. Verify that the new localblock PV is available. Change to the openshift-storage project. Remove the failed OSD from the cluster. You can specify multiple failed OSDs if required: <failed_osd_id> Is the integer in the pod name immediately after the rook-ceph-osd prefix. You can add comma separated OSD IDs in the command to remove more than one OSD, for example, FAILED_OSD_IDS=0,1,2 . The FORCE_OSD_REMOVAL value must be changed to true in clusters that only have three OSDs, or clusters with insufficient space to restore all three replicas of the data after the OSD is removed. Verify that the OSD was removed successfully by checking the status of the ocs-osd-removal-job pod. A status of Completed confirms that the OSD removal job succeeded. Ensure that the OSD removal is completed. Example output: Important If the ocs-osd-removal-job fails and the pod is not in the expected Completed state, check the pod logs for further debugging. For example: Delete the ocs-osd-removal-job . Example output: Verification steps Execute the following command and verify that the new node is present in the output: Click Workloads Pods , confirm that at least the following pods on the new node are in Running state: csi-cephfsplugin-* csi-rbdplugin-* Verify that all other required OpenShift Data Foundation pods are in Running state. Ensure that the new incremental mon is created and is in the Running state. Example output: OSD and Mon might take several minutes to get to the Running state. Verify that new OSD pods are running on the replacement node. Optional: If cluster-wide encryption is enabled on the cluster, verify that the new OSD devices are encrypted. For each of the new nodes identified in step, do the following: Create a debug pod and open a chroot environment for the selected host(s). Run "lsblk" and check for the "crypt" keyword beside the ocs-deviceset name(s) If verification steps fail, contact Red Hat Support . 2.4.2. Replacing an operational node on VMware installer-provisioned infrastructure Prerequisites Red Hat recommends that replacement nodes are configured with similar infrastructure, resources, and disks to the node being replaced. You must be logged into the OpenShift Container Platform (RHOCP) cluster. If you upgraded to OpenShift Data Foundation version 4.8 from a version, and have not already created the LocalVolumeDiscovery and LocalVolumeSet objects, do so now by following the procedure described in Post-update configuration changes for clusters backed by local storage . Procedure Log in to OpenShift Web Console and click Compute Nodes . Identify the node that needs to be replaced. Take a note of its Machine Name . Get labels on the node to be replaced. Identify the mon (if any) and OSDs that are running in the node to be replaced. Scale down the deployments of the pods identified in the step. For example: Mark the node as unschedulable. Drain the node. Click Compute Machines . Search for the required machine. Besides the required machine, click the Action menu (...) Delete Machine . Click Delete to confirm the machine deletion. A new machine is automatically created. Wait for the new machine to start and transition into Running state. Important This activity may take at least 5-10 minutes or more. Click Compute Nodes in OpenShift Web Console, confirm if the new node is in Ready state. Physically add a new device to the node. Apply the OpenShift Data Foundation label to the new node using any one of the following: From User interface For the new node, click Action Menu (...) Edit Labels . Add cluster.ocs.openshift.io/openshift-storage and click Save . From Command line interface Execute the following command to apply the OpenShift Data Foundation label to the new node: Identify the namespace where OpenShift local storage operator is installed and assign it to local_storage_project variable: For example: Add a new worker node to localVolumeDiscovery and localVolumeSet . Update the localVolumeDiscovery definition to include the new node and remove the failed node. Remember to save before exiting the editor. In the above example, server3.example.com was removed and newnode.example.com is the new node. Determine which localVolumeSet to edit. Update the localVolumeSet definition to include the new node and remove the failed node. Remember to save before exiting the editor. In the above example, server3.example.com was removed and newnode.example.com is the new node. Verify that the new localblock PV is available. Change to the openshift-storage project. Remove the failed OSD from the cluster. You can specify multiple failed OSDs if required: <failed_osd_id> Is the integer in the pod name immediately after the rook-ceph-osd prefix. You can add comma separated OSD IDs in the command to remove more than one OSD, for example, FAILED_OSD_IDS=0,1,2 . The FORCE_OSD_REMOVAL value must be changed to true in clusters that only have three OSDs, or clusters with insufficient space to restore all three replicas of the data after the OSD is removed. Verify that the OSD was removed successfully by checking the status of the ocs-osd-removal-job pod. A status of Completed confirms that the OSD removal job succeeded. Ensure that the OSD removal is completed. Example output: Important If the ocs-osd-removal-job fails and the pod is not in the expected Completed state, check the pod logs for further debugging. For example: Identify the PV associated with the PVC. If there is a PV in Released state, delete it. For example: Identify the crashcollector pod deployment. If there is an existing crashcollector pod deployment, delete it. Delete the ocs-osd-removal-job . Example output: Verification steps Execute the following command and verify that the new node is present in the output: Click Workloads Pods , confirm that at least the following pods on the new node are in Running state: csi-cephfsplugin-* csi-rbdplugin-* Verify that all other required OpenShift Data Foundation pods are in Running state. Ensure that the new incremental mon is created and is in the Running state. Example output: OSD and Mon might take several minutes to get to the Running state. Verify that new OSD pods are running on the replacement node. Optional: If cluster-wide encryption is enabled on the cluster, verify that the new OSD devices are encrypted. For each of the new nodes identified in step, do the following: Create a debug pod and open a chroot environment for the selected host(s). Run "lsblk" and check for the "crypt" keyword beside the ocs-deviceset name(s) If verification steps fail, contact Red Hat Support . 2.4.3. Replacing a failed node on VMware user-provisioned infrastructure Prerequisites Red Hat recommends that replacement nodes are configured with similar infrastructure, resources, and disks to the node being replaced. You must be logged into the OpenShift Container Platform (RHOCP) cluster. If you upgraded to OpenShift Data Foundation version 4.8 from a version, and have not already created the LocalVolumeDiscovery and LocalVolumeSet objects, do so now by following the procedure described in Post-update configuration changes for clusters backed by local storage . Procedure Identify the NODE and get labels on the node to be replaced. Identify the mon (if any) and OSDs that are running in the node to be replaced. Scale down the deployments of the pods identified in the step. For example: Mark the node as unschedulable. Remove the pods which are in Terminating state. Drain the node. Delete the node. Log in to vSphere and terminate the identified VM. Create a new VM on VMware with the required infrastructure. See Supported Infrastructure and Platforms . Create a new OpenShift Container Platform worker node using the new VM. Check for certificate signing requests (CSRs) related to OpenShift Container Platform that are in Pending state: Approve all required OpenShift Container Platform CSRs for the new node: Click Compute Nodes in OpenShift Web Console, confirm if the new node is in Ready state. Apply the OpenShift Data Foundation label to the new node using any one of the following: From User interface For the new node, click Action Menu (...) Edit Labels . Add cluster.ocs.openshift.io/openshift-storage and click Save . From Command line interface Execute the following command to apply the OpenShift Data Foundation label to the new node: Identify the namespace where OpenShift local storage operator is installed and assign it to local_storage_project variable: For example: Add a new worker node to localVolumeDiscovery and localVolumeSet . Update the localVolumeDiscovery definition to include the new node and remove the failed node. Remember to save before exiting the editor. In the above example, server3.example.com was removed and newnode.example.com is the new node. Determine which localVolumeSet to edit. Update the localVolumeSet definition to include the new node and remove the failed node. Remember to save before exiting the editor. In the above example, server3.example.com was removed and newnode.example.com is the new node. Verify that the new localblock PV is available. Change to the openshift-storage project. Remove the failed OSD from the cluster. You can specify multiple failed OSDs if required: <failed_osd_id> Is the integer in the pod name immediately after the rook-ceph-osd prefix. You can add comma separated OSD IDs in the command to remove more than one OSD, for example, FAILED_OSD_IDS=0,1,2 . The FORCE_OSD_REMOVAL value must be changed to true in clusters that only have three OSDs, or clusters with insufficient space to restore all three replicas of the data after the OSD is removed. Verify that the OSD was removed successfully by checking the status of the ocs-osd-removal-job pod. A status of Completed confirms that the OSD removal job succeeded. Ensure that the OSD removal is completed. Example output: Important If the ocs-osd-removal-job fails and the pod is not in the expected Completed state, check the pod logs for further debugging. For example: Delete the ocs-osd-removal-job . Example output: Verification steps Execute the following command and verify that the new node is present in the output: Click Workloads Pods , confirm that at least the following pods on the new node are in Running state: csi-cephfsplugin-* csi-rbdplugin-* Verify that all other required OpenShift Data Foundation pods are in Running state. Ensure that the new incremental mon is created and is in the Running state. Example output: OSD and Mon might take several minutes to get to the Running state. Verify that new OSD pods are running on the replacement node. Optional: If cluster-wide encryption is enabled on the cluster, verify that the new OSD devices are encrypted. For each of the new nodes identified in step, do the following: Create a debug pod and open a chroot environment for the selected host(s). Run "lsblk" and check for the "crypt" keyword beside the ocs-deviceset name(s) If verification steps fail, contact Red Hat Support . 2.4.4. Replacing a failed node on VMware installer-provisioned infrastructure Prerequisites Red Hat recommends that replacement nodes are configured with similar infrastructure, resources, and disks to the node being replaced. You must be logged into the OpenShift Container Platform (RHOCP) cluster. If you upgraded to OpenShift Data Foundation version 4.8 from a version, and have not already created the LocalVolumeDiscovery and LocalVolumeSet objects, do so now by following the procedure described in Post-update configuration changes for clusters backed by local storage . Procedure Log in to OpenShift Web Console and click Compute Nodes . Identify the node that needs to be replaced. Take a note of its Machine Name . Get labels on the node to be replaced. Identify the mon (if any) and OSDs that are running in the node to be replaced. Scale down the deployments of the pods identified in the step. For example: Mark the node as unschedulable. Remove the pods which are in Terminating state. Drain the node. Click Compute Machines . Search for the required machine. Besides the required machine, click the Action menu (...) Delete Machine . Click Delete to confirm the machine deletion. A new machine is automatically created. Wait for the new machine to start and transition into Running state. Important This activity may take at least 5-10 minutes or more. Click Compute Nodes in OpenShift Web Console, confirm if the new node is in Ready state. Physically add a new device to the node. Apply the OpenShift Data Foundation label to the new node using any one of the following: From User interface For the new node, click Action Menu (...) Edit Labels . Add cluster.ocs.openshift.io/openshift-storage and click Save . From Command line interface Execute the following command to apply the OpenShift Data Foundation label to the new node: Identify the namespace where OpenShift local storage operator is installed and assign it to local_storage_project variable: For example: Add a new worker node to localVolumeDiscovery and localVolumeSet . Update the localVolumeDiscovery definition to include the new node and remove the failed node. Remember to save before exiting the editor. In the above example, server3.example.com was removed and newnode.example.com is the new node. Determine which localVolumeSet to edit. Update the localVolumeSet definition to include the new node and remove the failed node. Remember to save before exiting the editor. In the above example, server3.example.com was removed and newnode.example.com is the new node. Verify that the new localblock PV is available. Change to the openshift-storage project. Remove the failed OSD from the cluster. You can specify multiple failed OSDs if required: <failed_osd_id> Is the integer in the pod name immediately after the rook-ceph-osd prefix. You can add comma separated OSD IDs in the command to remove more than one OSD, for example, FAILED_OSD_IDS=0,1,2 . The FORCE_OSD_REMOVAL value must be changed to true in clusters that only have three OSDs, or clusters with insufficient space to restore all three replicas of the data after the OSD is removed. Verify that the OSD was removed successfully by checking the status of the ocs-osd-removal-job pod. A status of Completed confirms that the OSD removal job succeeded. Ensure that the OSD removal is completed. Example output: Important If the ocs-osd-removal-job fails and the pod is not in the expected Completed state, check the pod logs for further debugging. For example: Identify the PV associated with the PVC. If there is a PV in Released state, delete it. For example: Identify the crashcollector pod deployment. If there is an existing crashcollector pod deployment, delete it. Delete the ocs-osd-removal-job . Example output: Verification steps Execute the following command and verify that the new node is present in the output: Click Workloads Pods , confirm that at least the following pods on the new node are in Running state: csi-cephfsplugin-* csi-rbdplugin-* Verify that all other required OpenShift Data Foundation pods are in Running state. Ensure that the new incremental mon is created and is in the Running state. Example output: OSD and Mon might take several minutes to get to the Running state. Verify that new OSD pods are running on the replacement node. Optional: If cluster-wide encryption is enabled on the cluster, verify that the new OSD devices are encrypted. For each of the new nodes identified in step, do the following: Create a debug pod and open a chroot environment for the selected host(s). Run "lsblk" and check for the "crypt" keyword beside the ocs-deviceset name(s) If verification steps fail, contact Red Hat Support . 2.5. Replacing storage nodes on Red Hat Virtualization infrastructure To replace an operational node, see Section 2.5.1, "Replacing an operational node on Red Hat Virtualization installer-provisioned infrastructure" To replace a failed node, see Section 2.5.2, "Replacing a failed node on Red Hat Virtualization installer-provisioned infrastructure" 2.5.1. Replacing an operational node on Red Hat Virtualization installer-provisioned infrastructure Use this procedure to replace an operational node on Red Hat Virtualization installer-provisioned infrastructure (IPI). Prerequisites Red Hat recommends that replacement nodes are configured with similar infrastructure, resources and disks to the node being replaced. You must be logged into the OpenShift Container Platform (RHOCP) cluster. If you upgraded to OpenShift Data Foundation version 4.8 from a version, and have not already created the LocalVolumeDiscovery and LocalVolumeSet objects, do so now by following the procedure described in Post-update configuration changes for clusters backed by local storage . Procedure Log in to OpenShift Web Console and click Compute Nodes . Identify the node that needs to be replaced. Take a note of its Machine Name . Get labels on the node to be replaced. Identify the mon (if any) and OSDs that are running in the node to be replaced. Scale down the deployments of the pods identified in the step. For example: Mark the nodes as unschedulable. Drain the node. Click Compute Machines . Search for the required machine. Besides the required machine, click the Action menu (...) Delete Machine . Click Delete to confirm the machine deletion. A new machine is automatically created. Wait for the new machine to start and transition into Running state. Important This activity may take at least 5-10 minutes or more. Click Compute Nodes in the OpenShift web console. Confirm if the new node is in Ready state. Physically add the new device(s) to the node. Apply the OpenShift Data Foundation label to the new node using any one of the following: From User interface For the new node, click Action Menu (...) Edit Labels . Add cluster.ocs.openshift.io/openshift-storage and click Save . From Command line interface Execute the following command to apply the OpenShift Data Foundation label to the new node: Identify the namespace where OpenShift local storage operator is installed and assign it to local_storage_project variable: For example: Add a new worker node to localVolumeDiscovery and localVolumeSet . Update the localVolumeDiscovery definition to include the new node and remove the failed node. Remember to save before exiting the editor. In the above example, server3.example.com was removed and newnode.example.com is the new node. Determine which localVolumeSet to edit. Update the localVolumeSet definition to include the new node and remove the failed node. Remember to save before exiting the editor. In the above example, server3.example.com was removed and newnode.example.com is the new node. Verify that the new localblock PV is available. Change to the openshift-storage project. Remove the failed OSD from the cluster. You can specify multiple failed OSDs if required. <failed_osd_id> Is the integer in the pod name immediately after the rook-ceph-osd prefix. You can add comma separated OSD IDs in the command to remove more than one OSD, for example, FAILED_OSD_IDS=0,1,2 . The FORCE_OSD_REMOVAL value must be changed to true in clusters that only have three OSDs, or clusters with insufficient space to restore all three replicas of the data after the OSD is removed. Verify that the OSD was removed successfully by checking the status of the ocs-osd-removal-job pod. A status of Completed confirms that the OSD removal job succeeded. Ensure that the OSD removal is completed. Example output: Important If the ocs-osd-removal-job fails and the pod is not in the expected Completed state, check the pod logs for further debugging. For example: Identify the PV associated with the PVC. If there is a PV in Released state, delete it. For example: Identify the crashcollector pod deployment. If there is an existing crashcollector pod, delete it. Delete the ocs-osd-removal job. Example output: Verification steps Execute the following command and verify that the new node is present in the output: Click Workloads Pods , confirm that at least the following pods on the new node are in Running state: csi-cephfsplugin-* csi-rbdplugin-* Verify that all other required OpenShift Data Foundation pods are in Running state. Ensure that the new incremental mon is created and is in the Running state. Example output: OSD and Mon might take several minutes to get to the Running state. Verify that new OSD pods are running on the replacement node. Optional: If cluster-wide encryption is enabled on the cluster, verify that the new OSD devices are encrypted. For each of the new nodes identified in step, do the following: Create a debug pod and open a chroot environment for the selected host(s). Run "lsblk" and check for the "crypt" keyword beside the ocs-deviceset name(s) If verification steps fail, contact Red Hat Support . 2.5.2. Replacing a failed node on Red Hat Virtualization installer-provisioned infrastructure Perform this procedure to replace a failed node which is not operational on Red Hat Virtualization installer-provisioned infrastructure (IPI) for OpenShift Data Foundation. Prerequisites Red Hat recommends that replacement nodes are configured with similar infrastructure, resources and disks to the node being replaced. You must be logged into the OpenShift Container Platform (RHOCP) cluster. If you upgraded to OpenShift Data Foundation version 4.8 from a version, and have not already created the LocalVolumeDiscovery and LocalVolumeSet objects, do so now by following the procedure described in Post-update configuration changes for clusters backed by local storage . Procedure Log in to OpenShift Web Console and click Compute Nodes . Identify the node that needs to be replaced. Take a note of its Machine Name . Get the labels on the node to be replaced. Identify the mon (if any) and OSDs that are running in the node to be replaced. Scale down the deployments of the pods identified in the step. For example: Mark the node as unschedulable. Remove the pods which are in the Terminating state. Drain the node. Click Compute Machines . Search for the required machine. Besides the required machine, click the Action menu (...) Delete Machine . Click Delete to confirm the machine deletion. A new machine is automatically created. Wait for the new machine to start and transition into Running state. Important This activity may take at least 5-10 minutes or more. Click Compute Nodes in the OpenShift web console. Confirm if the new node is in Ready state. Physically add the new device(s) to the node. Apply the OpenShift Data Foundation label to the new node using any one of the following: From User interface For the new node, click Action Menu (...) Edit Labels . Add cluster.ocs.openshift.io/openshift-storage and click Save. From Command line interface Execute the following command to apply the OpenShift Data Foundation label to the new node: Identify the namespace where OpenShift local storage operator is installed and assign it to local_storage_project variable: For example: Add a new worker node to localVolumeDiscovery and localVolumeSet . Update the localVolumeDiscovery definition to include the new node and remove the failed node. Remember to save before exiting the editor. In the above example, server3.example.com was removed and newnode.example.com is the new node. Determine which localVolumeSet to edit. Update the localVolumeSet definition to include the new node and remove the failed node. Remember to save before exiting the editor. In the above example, server3.example.com was removed and newnode.example.com is the new node. Verify that the new localblock PV is available. Change to the openshift-storage project. Remove the failed OSD from the cluster. You can specify multiple failed OSDs if required. <failed_osd_id> Is the integer in the pod name immediately after the rook-ceph-osd prefix. You can add comma separated OSD IDs in the command to remove more than one OSD, for example, FAILED_OSD_IDS=0,1,2 . The FORCE_OSD_REMOVAL value must be changed to true in clusters that only have three OSDs, or clusters with insufficient space to restore all three replicas of the data after the OSD is removed. Verify that the OSD was removed successfully by checking the status of the ocs-osd-removal-job pod. A status of Completed confirms that the OSD removal job succeeded. Ensure that the OSD removal is completed. Example output: Important If the ocs-osd-removal-job fails and the pod is not in the expected Completed state, check the pod logs for further debugging. For example: Identify the PV associated with the PVC. If there is a PV in Released state, delete it. For example: Identify the crashcollector pod deployment. If there is an existing crashcollector pod deployment, delete it. Delete the ocs-osd-removal job. Example output: Verification steps Execute the following command and verify that the new node is present in the output: Click Workloads Pods , confirm that at least the following pods on the new node are in Running state: csi-cephfsplugin-* csi-rbdplugin-* Verify that all other required OpenShift Data Foundation pods are in Running state. Ensure that the new incremental mon is created and is in the Running state. Example output: OSD and Mon might take several minutes to get to the Running state. Verify that new OSD pods are running on the replacement node. Optional: If cluster-wide encryption is enabled on the cluster, verify that the new OSD devices are encrypted. For each of the new nodes identified in step, do the following: Create a debug pod and open a chroot environment for the selected host(s). Run "lsblk" and check for the "crypt" keyword beside the ocs-deviceset name(s) If verification steps fail, contact Red Hat Support .
oc get nodes --show-labels | grep <node_name> oc get pods -n openshift-storage -o wide | grep -i <node_name> oc scale deployment rook-ceph-mon-c --replicas=0 -n openshift-storage oc scale deployment rook-ceph-osd-0 --replicas=0 -n openshift-storage oc scale deployment --selector=app=rook-ceph-crashcollector,node_name=<node_name> --replicas=0 -n openshift-storage oc adm cordon <node_name> oc adm drain <node_name> --force --delete-emptydir-data=true --ignore-daemonsets oc delete node <node_name> oc get csr oc adm certificate approve <Certificate_Name> oc label node <new_node_name> cluster.ocs.openshift.io/openshift-storage="" local_storage_project=USD(oc get csv --all-namespaces | awk '{print USD1}' | grep local) local_storage_project=USD(oc get csv --all-namespaces | awk '{print USD1}' | grep local) echo USDlocal_storage_project openshift-local-storage oc edit -n USDlocal_storage_project localvolumediscovery auto-discover-devices [...] nodeSelector: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - server1.example.com - server2.example.com #- server3.example.com - newnode.example.com [...] oc get -n USDlocal_storage_project localvolumeset NAME AGE localblock 25h oc edit -n USDlocal_storage_project localvolumeset localblock [...] nodeSelector: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - server1.example.com - server2.example.com #- server3.example.com - newnode.example.com [...] oc get pv | grep localblock | grep Available local-pv-551d950 512Gi RWO Delete Available localblock 26s oc project openshift-storage oc process -n openshift-storage ocs-osd-removal -p FAILED_OSD_IDS= <failed_osd_id> FORCE_OSD_REMOVAL=false | oc create -n openshift-storage -f - oc get pod -l job-name=ocs-osd-removal-job -n openshift-storage oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 | egrep -i 'completed removal' 2022-05-10 06:50:04.501511 I | cephosd: completed removal of OSD 0 oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 oc delete -n openshift-storage job ocs-osd-removal-job job.batch "ocs-osd-removal-job" deleted oc get nodes --show-labels | grep cluster.ocs.openshift.io/openshift-storage= |cut -d' ' -f1 oc get pod -n openshift-storage | grep mon rook-ceph-mon-a-cd575c89b-b6k66 2/2 Running 0 38m rook-ceph-mon-b-6776bc469b-tzzt8 2/2 Running 0 38m rook-ceph-mon-d-5ff5d488b5-7v8xh 2/2 Running 0 4m8s oc get pods -o wide -n openshift-storage| egrep -i new-node-name | egrep osd oc debug node/<node name> chroot /host lsblk oc get nodes --show-labels | grep <node_name> oc get pods -n openshift-storage -o wide | grep -i <node_name> oc scale deployment rook-ceph-mon-c --replicas=0 -n openshift-storage oc scale deployment rook-ceph-osd-0 --replicas=0 -n openshift-storage oc scale deployment --selector=app=rook-ceph-crashcollector,node_name=<node_name> --replicas=0 -n openshift-storage oc adm cordon <node_name> oc get pods -A -o wide | grep -i <node_name> | awk '{if (USD4 == "Terminating") system ("oc -n " USD1 " delete pods " USD2 " --grace-period=0 " " --force ")}' oc adm drain <node_name> --force --delete-emptydir-data=true --ignore-daemonsets oc delete node <node_name> oc get csr oc adm certificate approve <Certificate_Name> oc label node <new_node_name> cluster.ocs.openshift.io/openshift-storage="" local_storage_project=USD(oc get csv --all-namespaces | awk '{print USD1}' | grep local) local_storage_project=USD(oc get csv --all-namespaces | awk '{print USD1}' | grep local) echo USDlocal_storage_project openshift-local-storage oc edit -n USDlocal_storage_project localvolumediscovery auto-discover-devices [...] nodeSelector: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - server1.example.com - server2.example.com #- server3.example.com - newnode.example.com [...] oc get -n USDlocal_storage_project localvolumeset NAME AGE localblock 25h oc edit -n USDlocal_storage_project localvolumeset localblock [...] nodeSelector: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - server1.example.com - server2.example.com #- server3.example.com - newnode.example.com [...] oc get pv | grep localblock | grep Available local-pv-551d950 512Gi RWO Delete Available localblock 26s oc project openshift-storage oc process -n openshift-storage ocs-osd-removal -p FAILED_OSD_IDS= <failed_osd_id> FORCE_OSD_REMOVAL=false | oc create -n openshift-storage -f - oc get pod -l job-name=ocs-osd-removal-job -n openshift-storage oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 | egrep -i 'completed removal' 2022-05-10 06:50:04.501511 I | cephosd: completed removal of OSD 0 oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 oc delete -n openshift-storage job ocs-osd-removal-job job.batch "ocs-osd-removal-job" deleted oc get nodes --show-labels | grep cluster.ocs.openshift.io/openshift-storage= |cut -d' ' -f1 oc get pod -n openshift-storage | grep mon rook-ceph-mon-a-cd575c89b-b6k66 2/2 Running 0 38m rook-ceph-mon-b-6776bc469b-tzzt8 2/2 Running 0 38m rook-ceph-mon-d-5ff5d488b5-7v8xh 2/2 Running 0 4m8s oc get pods -o wide -n openshift-storage| egrep -i new-node-name | egrep osd oc debug node/<node name> chroot /host lsblk oc adm cordon <node_name> oc adm drain <node_name> --force --delete-emptydir-data=true --ignore-daemonsets oc label node <new_node_name> cluster.ocs.openshift.io/openshift-storage="" oc get nodes --show-labels | grep cluster.ocs.openshift.io/openshift-storage= |cut -d' ' -f1 oc get pods -o wide -n openshift-storage| egrep -i new-node-name | egrep osd oc debug node/<node name> chroot /host lsblk oc label node <new_node_name> cluster.ocs.openshift.io/openshift-storage="" oc get nodes --show-labels | grep cluster.ocs.openshift.io/openshift-storage= | cut -d' ' -f1 oc get pods -o wide -n openshift-storage| egrep -i new-node-name | egrep osd oc debug node/<node name> chroot /host lsblk oc get nodes --show-labels | grep <node_name> oc get pods -n openshift-storage -o wide | grep -i <node_name> oc scale deployment rook-ceph-mon-a --replicas=0 -n openshift-storage oc scale deployment rook-ceph-osd-1 --replicas=0 -n openshift-storage oc scale deployment --selector=app=rook-ceph-crashcollector,node_name=<node_name> --replicas=0 -n openshift-storage oc adm cordon <node_name> oc get pods -A -o wide | grep -i <node_name> | awk '{if (USD4 == "Terminating") system ("oc -n " USD1 " delete pods " USD2 " --grace-period=0 " " --force ")}' oc adm drain <node_name> --force --delete-emptydir-data=true --ignore-daemonsets oc delete node <node_name> oc get csr oc adm certificate approve <Certificate_Name> oc label node <new_node_name> cluster.ocs.openshift.io/openshift-storage='' local_storage_project=USD(oc get csv --all-namespaces | awk '{print USD1}' | grep local) local_storage_project=USD(oc get csv --all-namespaces | awk '{print USD1}' | grep local) echo USDlocal_storage_project openshift-local-storage oc edit -n USDlocal_storage_project localvolumediscovery auto-discover-devices [...] nodeSelector: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: #- worker-0 - worker-1 - worker-2 - worker-3 [...] oc get -n USDlocal_storage_project localvolume NAME AGE localblock 25h oc edit -n USDlocal_storage_project localvolume localblock [...] nodeSelector: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: #- worker-0 - worker-1 - worker-2 - worker-3 [...] oc get pv | grep localblock NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM STORAGECLASS AGE local-pv-3e8964d3 500Gi RWO Delete Bound ocs-deviceset-localblock-2-data-0-mdbg9 localblock 25h local-pv-414755e0 500Gi RWO Delete Bound ocs-deviceset-localblock-1-data-0-4cslf localblock 25h local-pv-b481410 500Gi RWO Delete Available localblock 3m24s local-pv-5c9b8982 500Gi RWO Delete Bound ocs-deviceset-localblock-0-data-0-g2mmc localblock 25h oc project openshift-storage osd_id_to_remove=1 oc get -n openshift-storage -o yaml deployment rook-ceph-osd-USD{osd_id_to_remove} | grep ceph.rook.io/pvc ceph.rook.io/pvc: ocs-deviceset-localblock-0-data-0-g2mmc ceph.rook.io/pvc: ocs-deviceset-localblock-0-data-0-g2mmc oc process -n openshift-storage ocs-osd-removal -p FAILED_OSD_IDS= <failed_osd_id> FORCE_OSD_REMOVAL=false | oc create -n openshift-storage -f - oc get pod -l job-name=ocs-osd-removal-job -n openshift-storage oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 | egrep -i 'completed removal' 2022-05-10 06:50:04.501511 I | cephosd: completed removal of OSD 0 oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 oc get pv -L kubernetes.io/hostname | grep localblock | grep Released local-pv-5c9b8982 500Gi RWO Delete Released openshift-storage/ocs-deviceset-localblock-0-data-0-g2mmc localblock 24h worker-0 oc delete pv <persistent-volume> oc delete pv local-pv-5c9b8982 persistentvolume "local-pv-5c9b8982" deleted oc get deployment --selector=app=rook-ceph-crashcollector,node_name=<failed_node_name> -n openshift-storage oc delete deployment --selector=app=rook-ceph-crashcollector,node_name=<failed_node_name> -n openshift-storage oc delete -n openshift-storage job ocs-osd-removal-job job.batch "ocs-osd-removal-job" deleted oc get nodes --show-labels | grep cluster.ocs.openshift.io/openshift-storage= |cut -d' ' -f1 oc get pod -n openshift-storage | grep mon rook-ceph-mon-b-74f6dc9dd6-4llzq 1/1 Running 0 6h14m rook-ceph-mon-c-74948755c-h7wtx 1/1 Running 0 4h24m rook-ceph-mon-d-598f69869b-4bv49 1/1 Running 0 162m oc get pods -o wide -n openshift-storage| egrep -i new-node-name | egrep osd oc debug node/<node name> chroot /host lsblk oc get nodes --show-labels | grep <node_name> oc get pods -n openshift-storage -o wide | grep -i <node_name> oc scale deployment rook-ceph-mon-c --replicas=0 -n openshift-storage oc scale deployment rook-ceph-osd-0 --replicas=0 -n openshift-storage oc scale deployment --selector=app=rook-ceph-crashcollector,node_name=<node_name> --replicas=0 -n openshift-storage oc adm cordon <node_name> oc adm drain <node_name> --force --delete-emptydir-data=true --ignore-daemonsets oc delete node <node_name> oc get csr oc adm certificate approve <Certificate_Name> oc label node <new_node_name> cluster.ocs.openshift.io/openshift-storage="" local_storage_project=USD(oc get csv --all-namespaces | awk '{print USD1}' | grep local) local_storage_project=USD(oc get csv --all-namespaces | awk '{print USD1}' | grep local) echo USDlocal_storage_project openshift-local-storage oc edit -n USDlocal_storage_project localvolumediscovery auto-discover-devices [...] nodeSelector: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - server1.example.com - server2.example.com #- server3.example.com - newnode.example.com [...] oc get -n USDlocal_storage_project localvolumeset NAME AGE localblock 25h oc edit -n USDlocal_storage_project localvolumeset localblock [...] nodeSelector: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - server1.example.com - server2.example.com #- server3.example.com - newnode.example.com [...] oc get pv | grep localblock | grep Available local-pv-551d950 512Gi RWO Delete Available localblock 26s oc project openshift-storage oc process -n openshift-storage ocs-osd-removal -p FAILED_OSD_IDS= <failed_osd_id> FORCE_OSD_REMOVAL=false | oc create -n openshift-storage -f - oc get pod -l job-name=ocs-osd-removal-job -n openshift-storage oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 | egrep -i 'completed removal' 2022-05-10 06:50:04.501511 I | cephosd: completed removal of OSD 0 oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 oc delete -n openshift-storage job ocs-osd-removal-job job.batch "ocs-osd-removal-job" deleted oc get nodes --show-labels | grep cluster.ocs.openshift.io/openshift-storage= |cut -d' ' -f1 oc get pod -n openshift-storage | grep mon rook-ceph-mon-a-cd575c89b-b6k66 2/2 Running 0 38m rook-ceph-mon-b-6776bc469b-tzzt8 2/2 Running 0 38m rook-ceph-mon-d-5ff5d488b5-7v8xh 2/2 Running 0 4m8s oc get pods -o wide -n openshift-storage| egrep -i new-node-name | egrep osd oc debug node/<node name> chroot /host lsblk oc get nodes --show-labels | grep <node_name> oc get pods -n openshift-storage -o wide | grep -i <node_name> oc scale deployment rook-ceph-mon-c --replicas=0 -n openshift-storage oc scale deployment rook-ceph-osd-0 --replicas=0 -n openshift-storage oc scale deployment --selector=app=rook-ceph-crashcollector,node_name=<node_name> --replicas=0 -n openshift-storage oc adm cordon <node_name> oc adm drain <node_name> --force --delete-emptydir-data=true --ignore-daemonsets oc label node <new_node_name> cluster.ocs.openshift.io/openshift-storage="" local_storage_project=USD(oc get csv --all-namespaces | awk '{print USD1}' | grep local) local_storage_project=USD(oc get csv --all-namespaces | awk '{print USD1}' | grep local) echo USDlocal_storage_project openshift-local-storage oc edit -n USDlocal_storage_project localvolumediscovery auto-discover-devices [...] nodeSelector: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - server1.example.com - server2.example.com #- server3.example.com - newnode.example.com [...] oc get -n USDlocal_storage_project localvolumeset NAME AGE localblock 25h oc edit -n USDlocal_storage_project localvolumeset localblock [...] nodeSelector: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - server1.example.com - server2.example.com #- server3.example.com - newnode.example.com [...] oc get pv | grep localblock | grep Available local-pv-551d950 512Gi RWO Delete Available localblock 26s oc project openshift-storage oc process -n openshift-storage ocs-osd-removal -p FAILED_OSD_IDS= <failed_osd_id> FORCE_OSD_REMOVAL=false | oc create -n openshift-storage -f - oc get pod -l job-name=ocs-osd-removal-job -n openshift-storage oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 | egrep -i 'completed removal' 2022-05-10 06:50:04.501511 I | cephosd: completed removal of OSD 0 oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 oc get pv -L kubernetes.io/hostname | grep localblock | grep Released local-pv-d6bf175b 1490Gi RWO Delete Released openshift-storage/ocs-deviceset-0-data-0-6c5pw localblock 2d22h compute-1 oc delete pv <persistent-volume> oc delete pv local-pv-d6bf175b persistentvolume "local-pv-d9c5cbd6" deleted oc get deployment --selector=app=rook-ceph-crashcollector,node_name=failed-node-name -n openshift-storage oc delete deployment --selector=app=rook-ceph-crashcollector,node_name=failed-node-name -n openshift-storage oc delete -n openshift-storage job ocs-osd-removal-job job.batch "ocs-osd-removal-job" deleted oc get nodes --show-labels | grep cluster.ocs.openshift.io/openshift-storage= |cut -d' ' -f1 oc get pod -n openshift-storage | grep mon rook-ceph-mon-a-cd575c89b-b6k66 2/2 Running 0 38m rook-ceph-mon-b-6776bc469b-tzzt8 2/2 Running 0 38m rook-ceph-mon-d-5ff5d488b5-7v8xh 2/2 Running 0 4m8s oc get pods -o wide -n openshift-storage| egrep -i new-node-name | egrep osd oc debug node/<node name> chroot /host lsblk oc get nodes --show-labels | grep <node_name> oc get pods -n openshift-storage -o wide | grep -i <node_name> oc scale deployment rook-ceph-mon-c --replicas=0 -n openshift-storage oc scale deployment rook-ceph-osd-0 --replicas=0 -n openshift-storage oc scale deployment --selector=app=rook-ceph-crashcollector,node_name=<node_name> --replicas=0 -n openshift-storage oc adm cordon <node_name> oc get pods -A -o wide | grep -i <node_name> | awk '{if (USD4 == "Terminating") system ("oc -n " USD1 " delete pods " USD2 " --grace-period=0 " " --force ")}' oc adm drain <node_name> --force --delete-emptydir-data=true --ignore-daemonsets oc delete node <node_name> oc get csr oc adm certificate approve <Certificate_Name> oc label node <new_node_name> cluster.ocs.openshift.io/openshift-storage="" local_storage_project=USD(oc get csv --all-namespaces | awk '{print USD1}' | grep local) local_storage_project=USD(oc get csv --all-namespaces | awk '{print USD1}' | grep local) echo USDlocal_storage_project openshift-local-storage oc edit -n USDlocal_storage_project localvolumediscovery auto-discover-devices [...] nodeSelector: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - server1.example.com - server2.example.com #- server3.example.com - newnode.example.com [...] oc get -n USDlocal_storage_project localvolumeset NAME AGE localblock 25h oc edit -n USDlocal_storage_project localvolumeset localblock [...] nodeSelector: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - server1.example.com - server2.example.com #- server3.example.com - newnode.example.com [...] oc get pv | grep localblock | grep Available local-pv-551d950 512Gi RWO Delete Available localblock 26s oc project openshift-storage oc process -n openshift-storage ocs-osd-removal -p FAILED_OSD_IDS= <failed_osd_id> FORCE_OSD_REMOVAL=false | oc create -n openshift-storage -f - oc get pod -l job-name=ocs-osd-removal-job -n openshift-storage oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 | egrep -i 'completed removal' 2022-05-10 06:50:04.501511 I | cephosd: completed removal of OSD 0 oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 oc delete -n openshift-storage job ocs-osd-removal-job job.batch "ocs-osd-removal-job" deleted oc get nodes --show-labels | grep cluster.ocs.openshift.io/openshift-storage= |cut -d' ' -f1 oc get pod -n openshift-storage | grep mon rook-ceph-mon-a-cd575c89b-b6k66 2/2 Running 0 38m rook-ceph-mon-b-6776bc469b-tzzt8 2/2 Running 0 38m rook-ceph-mon-d-5ff5d488b5-7v8xh 2/2 Running 0 4m8s oc get pods -o wide -n openshift-storage| egrep -i new-node-name | egrep osd oc debug node/<node name> chroot /host lsblk oc get nodes --show-labels | grep <node_name> oc get pods -n openshift-storage -o wide | grep -i <node_name> oc scale deployment rook-ceph-mon-c --replicas=0 -n openshift-storage oc scale deployment rook-ceph-osd-0 --replicas=0 -n openshift-storage oc scale deployment --selector=app=rook-ceph-crashcollector,node_name=<node_name> --replicas=0 -n openshift-storage oc adm cordon <node_name> oc get pods -A -o wide | grep -i <node_name> | awk '{if (USD4 == "Terminating") system ("oc -n " USD1 " delete pods " USD2 " --grace-period=0 " " --force ")}' oc adm drain <node_name> --force --delete-emptydir-data=true --ignore-daemonsets oc label node <new_node_name> cluster.ocs.openshift.io/openshift-storage="" local_storage_project=USD(oc get csv --all-namespaces | awk '{print USD1}' | grep local) local_storage_project=USD(oc get csv --all-namespaces | awk '{print USD1}' | grep local) echo USDlocal_storage_project openshift-local-storage oc edit -n USDlocal_storage_project localvolumediscovery auto-discover-devices [...] nodeSelector: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - server1.example.com - server2.example.com #- server3.example.com - newnode.example.com [...] oc get -n USDlocal_storage_project localvolumeset NAME AGE localblock 25h oc edit -n USDlocal_storage_project localvolumeset localblock [...] nodeSelector: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - server1.example.com - server2.example.com #- server3.example.com - newnode.example.com [...] oc get pv | grep localblock | grep Available local-pv-551d950 512Gi RWO Delete Available localblock 26s oc project openshift-storage oc process -n openshift-storage ocs-osd-removal -p FAILED_OSD_IDS= <failed_osd_id> FORCE_OSD_REMOVAL=false | oc create -n openshift-storage -f - oc get pod -l job-name=ocs-osd-removal-job -n openshift-storage oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 | egrep -i 'completed removal' 2022-05-10 06:50:04.501511 I | cephosd: completed removal of OSD 0 oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 oc get pv -L kubernetes.io/hostname | grep localblock | grep Released local-pv-d6bf175b 1490Gi RWO Delete Released openshift-storage/ocs-deviceset-0-data-0-6c5pw localblock 2d22h compute-1 oc delete pv <persistent-volume> oc delete pv local-pv-d6bf175b persistentvolume "local-pv-d9c5cbd6" deleted oc get deployment --selector=app=rook-ceph-crashcollector,node_name=failed-node-name -n openshift-storage oc delete deployment --selector=app=rook-ceph-crashcollector,node_name=failed-node-name -n openshift-storage oc delete -n openshift-storage job ocs-osd-removal-job job.batch "ocs-osd-removal-job" deleted oc get nodes --show-labels | grep cluster.ocs.openshift.io/openshift-storage= |cut -d' ' -f1 oc get pod -n openshift-storage | grep mon rook-ceph-mon-a-cd575c89b-b6k66 2/2 Running 0 38m rook-ceph-mon-b-6776bc469b-tzzt8 2/2 Running 0 38m rook-ceph-mon-d-5ff5d488b5-7v8xh 2/2 Running 0 4m8s oc get pods -o wide -n openshift-storage| egrep -i new-node-name | egrep osd oc debug node/<node name> chroot /host lsblk oc get nodes --show-labels | grep <node_name> oc get pods -n openshift-storage -o wide | grep -i <node_name> oc scale deployment rook-ceph-mon-c --replicas=0 -n openshift-storage oc scale deployment rook-ceph-osd-0 --replicas=0 -n openshift-storage oc scale deployment --selector=app=rook-ceph-crashcollector,node_name=<node_name> --replicas=0 -n openshift-storage oc adm cordon <node_name> oc adm drain <node_name> --force --delete-emptydir-data=true --ignore-daemonsets oc label node <new_node_name> cluster.ocs.openshift.io/openshift-storage="" local_storage_project=USD(oc get csv --all-namespaces | awk '{print USD1}' | grep local) local_storage_project=USD(oc get csv --all-namespaces | awk '{print USD1}' | grep local) echo USDlocal_storage_project openshift-local-storage oc edit -n USDlocal_storage_project localvolumediscovery auto-discover-devices [...] nodeSelector: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - server1.example.com - server2.example.com #- server3.example.com - newnode.example.com [...] oc get -n USDlocal_storage_project localvolumeset NAME AGE localblock 25h oc edit -n USDlocal_storage_project localvolumeset localblock [...] nodeSelector: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - server1.example.com - server2.example.com #- server3.example.com - newnode.example.com [...] USDoc get pv | grep localblock | grep Available local-pv-551d950 512Gi RWO Delete Available localblock 26s oc project openshift-storage oc process -n openshift-storage ocs-osd-removal -p FAILED_OSD_IDS=_<failed_osd_id>_ FORCE_OSD_REMOVAL=false | oc create -n openshift-storage -f - oc get pod -l job-name=ocs-osd-removal-job -n openshift-storage oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 | egrep -i 'completed removal' 2022-05-10 06:50:04.501511 I | cephosd: completed removal of OSD 0 oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 oc get pv -L kubernetes.io/hostname | grep localblock | grep Released local-pv-d6bf175b 512Gi RWO Delete Released openshift-storage/ocs-deviceset-0-data-0-6c5pw localblock 2d22h server3.example.com oc delete pv <persistent-volume> oc delete pv local-pv-d6bf175b persistentvolume "local-pv-d6bf175b" deleted oc get deployment --selector=app=rook-ceph-crashcollector,node_name=failed-node-name -n openshift-storage oc delete deployment --selector=app=rook-ceph-crashcollector,node_name=failed-node-name -n openshift-storage oc delete -n openshift-storage job ocs-osd-removal-job job.batch "ocs-osd-removal-job" deleted oc get nodes --show-labels | grep cluster.ocs.openshift.io/openshift-storage= |cut -d' ' -f1 oc get pod -n openshift-storage | grep mon rook-ceph-mon-a-cd575c89b-b6k66 2/2 Running 0 38m rook-ceph-mon-b-6776bc469b-tzzt8 2/2 Running 0 38m rook-ceph-mon-d-5ff5d488b5-7v8xh 2/2 Running 0 4m8s oc get pods -o wide -n openshift-storage| egrep -i new-node-name | egrep osd oc debug node/<node name> chroot /host lsblk oc get nodes --show-labels | grep <node_name> oc get pods -n openshift-storage -o wide | grep -i <node_name> oc scale deployment rook-ceph-mon-c --replicas=0 -n openshift-storage oc scale deployment rook-ceph-osd-0 --replicas=0 -n openshift-storage oc scale deployment --selector=app=rook-ceph-crashcollector,node_name=<node_name> --replicas=0 -n openshift-storage oc adm cordon <node_name> oc get pods -A -o wide | grep -i <node_name> | awk '{if (USD4 == "Terminating") system ("oc -n " USD1 " delete pods " USD2 " --grace-period=0 " " --force ")}' oc adm drain <node_name> --force --delete-emptydir-data=true --ignore-daemonsets oc label node <new_node_name> cluster.ocs.openshift.io/openshift-storage="" local_storage_project=USD(oc get csv --all-namespaces | awk '{print USD1}' | grep local) local_storage_project=USD(oc get csv --all-namespaces | awk '{print USD1}' | grep local) echo USDlocal_storage_project openshift-local-storage oc edit -n USDlocal_storage_project localvolumediscovery auto-discover-devices [...] nodeSelector: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - server1.example.com - server2.example.com #- server3.example.com - newnode.example.com [...] oc get -n USDlocal_storage_project localvolumeset NAME AGE localblock 25h oc edit -n USDlocal_storage_project localvolumeset localblock [...] nodeSelector: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - server1.example.com - server2.example.com #- server3.example.com - newnode.example.com [...] USDoc get pv | grep localblock | grep Available local-pv-551d950 512Gi RWO Delete Available localblock 26s oc project openshift-storage oc process -n openshift-storage ocs-osd-removal -p FAILED_OSD_IDS=_<failed_osd_id>_ FORCE_OSD_REMOVAL=false | oc create -n openshift-storage -f - oc get pod -l job-name=ocs-osd-removal-job -n openshift-storage oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 | egrep -i 'completed removal' 2022-05-10 06:50:04.501511 I | cephosd: completed removal of OSD 0 oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 oc get pv -L kubernetes.io/hostname | grep localblock | grep Released local-pv-d6bf175b 512Gi RWO Delete Released openshift-storage/ocs-deviceset-0-data-0-6c5pw localblock 2d22h server3.example.com oc delete pv <persistent-volume> oc delete pv local-pv-d6bf175b persistentvolume "local-pv-d6bf175b" deleted oc get deployment --selector=app=rook-ceph-crashcollector,node_name=failed-node-name -n openshift-storage oc delete deployment --selector=app=rook-ceph-crashcollector,node_name=failed-node-name -n openshift-storage oc delete -n openshift-storage job ocs-osd-removal-job job.batch "ocs-osd-removal-job" deleted oc get nodes --show-labels | grep cluster.ocs.openshift.io/openshift-storage= |cut -d' ' -f1 oc get pod -n openshift-storage | grep mon rook-ceph-mon-a-cd575c89b-b6k66 2/2 Running 0 38m rook-ceph-mon-b-6776bc469b-tzzt8 2/2 Running 0 38m rook-ceph-mon-d-5ff5d488b5-7v8xh 2/2 Running 0 4m8s oc get pods -o wide -n openshift-storage| egrep -i new-node-name | egrep osd oc debug node/<node name> chroot /host lsblk