Installing DataCore Puls8 on OpenShift

Explore this Page

Overview

This document provides detailed instructions for installing and configuring DataCore Puls8 on OpenShift container platform. The document covers prerequisites, installation of Local Storage and Replicated Storage, configuration of security context constraints (SCCs), monitoring options, storage class and PersistentVolumeClaim (PVC) setup, as well as verification and troubleshooting.

DataCore Puls8 integrates seamlessly with OpenShift to deliver enterprise-grade storage and monitoring capabilities. By following this document, you will be able to:

  • Prepare your environment and install the required DataCore Puls8 components.
  • Configure Local PV LVM or Replicated PV Mayastor) storage backends.
  • Enable or disable built-in monitoring stacks depending on your environment.
  • Validate installation by checking pod statuses, creating diskpools, and provisioning persistent volumes.
  • Enable user workload monitoring for project-level observability.

Requirements

Before you begin, ensure the following requirements are met:

Installation Flow

DataCore Puls8 can be deployed on OpenShift using two storage options:

  • Replicated PV Mayastor + Local PV LVM
  • Local PV LVM

Both installation types share a number of common steps, which are described first. Storage-specific instructions are provided in separate sections.

Common Installation Steps

Certain steps are required regardless of the storage you select. These common installation steps set up the Puls8 namespace and required configurations before proceeding with storage-specific instructions.

  • Local PV ZFS Disabled - The ZFS package cannot be installed on Red Hat Enterprise Linux CoreOS (RHCOS). Hence Local PV ZFS is disabled by default for OpenShift installation.
  • VolumeSnapshot CRDs Disabled in Helm - VolumeSnapshot CRDs are preinstalled in OpenShift. Charts should not attempt to re-install them.
  1. Create a Namespace.

    Copy
    Create a Dedicated Namespace for DataCore Puls8 Components
    oc create ns puls8
  2. Configure User Workload Monitoring (UWM).

    If you choose to use the built-in UWM of OpenShift, disable the kube-prometheus-stack Installation:

    Copy
    Disable kube-prometheus-stack Installation
    --set monitoring.kube-prometheus-stack.install=false

    If you want to enable the bundled kube-prometheus-stack, add these service accounts to the privileged SCC during installation:

    Copy
    Grant privileged SCC to service accounts required when enabling the built-in kube-prometheus-stack
    oc adm policy add-scc-to-user privileged system:serviceaccount:puls8:puls8-kube-prometheus-stac-admission
    oc adm policy add-scc-to-user privileged system:serviceaccount:puls8:puls8-kube-prometheus-stac-alertmanager 
    oc adm policy add-scc-to-user privileged system:serviceaccount:puls8:puls8-kube-prometheus-stac-operator
    oc adm policy add-scc-to-user privileged system:serviceaccount:puls8:puls8-kube-prometheus-stac-prometheus
    oc adm policy add-scc-to-user privileged system:serviceaccount:puls8:puls8-kube-state-metrics 
    oc adm policy add-scc-to-user privileged system:serviceaccount:puls8:puls8-prometheus-node-exporter

    Do not set --set monitoring.kube-prometheus-stack.install=false if using the bundled kube-prometheus-stack chart.

  3. Verify Puls8 pods are running in the puls8 namespace.

    Copy
    Verify Puls8 Pods
    kubectl get pods -n puls8

    Storage-specific sample outputs are provided below.

Storage-Specific Installation

Depending on your storage requirements, you can install DataCore Puls8 with either Replicated PV Mayastor + Local PV LVM or with Local PV LVM. The following sections provide step-by-step instructions for each option.

Installing Replicated PV Mayastor + Local PV LVM

  1. Install the DataCore Puls8 Helm Chart.

    Copy
    Install DataCore Puls8 Helm Chart with Replicated PV Mayastor Enabled
    helm install puls8 -n puls8 --create-namespace oci://docker.io/datacoresoftware/puls8 \
      --set openebs.openebs-crds.csi.volumeSnapshots.enabled=false \
      --set monitoring.kube-prometheus-stack.install=false \
      --set openebs.engines.local.zfs.enabled=false
  2. Configure SCCs.

    In a separate client session, add the required service accounts into the privileged SCC.

    Copy
    Assign SCC Privileges
    oc adm policy add-scc-to-user privileged system:serviceaccount:puls8:dcs-puls8
    oc adm policy add-scc-to-user privileged system:serviceaccount:puls8:loki
    oc adm policy add-scc-to-user privileged system:serviceaccount:puls8:minio-sa
    oc adm policy add-scc-to-user privileged system:serviceaccount:puls8:openebs-lvm-controller-sa
    oc adm policy add-scc-to-user privileged system:serviceaccount:puls8:openebs-lvm-node-sa
    oc adm policy add-scc-to-user privileged system:serviceaccount:puls8:puls8-alloy
    oc adm policy add-scc-to-user privileged system:serviceaccount:puls8:puls8-localpv-provisioner
    oc adm policy add-scc-to-user privileged system:serviceaccount:puls8:puls8-nats
    oc adm policy add-scc-to-user privileged system:serviceaccount:puls8:default
    oc adm policy add-scc-to-user privileged system:serviceaccount:puls8:puls8-service-account
    • If you choose to use the built-in UWM, the kube-prometheus-stack can be disabled using the command shown earlier.
    • If you enable the bundled kube-prometheus-stack, add the kube-prometheus service accounts listed in Common Installation Steps and do not set --set monitoring.kube-prometheus-stack.install=false.
  3. Verify Puls8 pods are running in the puls8 namespace.

    Copy
    Verify Puls8 Pods
    kubectl get pods -n puls8
    Copy
    Sample Output - Inbuilt kube-prometheus-stack Disabled
    [root@ocp-helper ~]# kubectl get pods -n puls8
    NAME                                                         READY   STATUS    RESTARTS   AGE
    dcs-puls8-down-pro-diskpoolclaim-operator-5975589785-24hx8   1/1     Running   0          95s
    dcs-puls8-license-agent-586fd69f8-k89kg                      1/1     Running   0          95s
    puls8-agent-core-df644d456-f5hq4                             2/2     Running   0          96s
    puls8-agent-ha-node-5gjr9                                    1/1     Running   0          96s
    puls8-agent-ha-node-f7pqn                                    1/1     Running   0          96s
    puls8-agent-ha-node-hkqp6                                    1/1     Running   0          96s
    puls8-alloy-7nn8x                                            2/2     Running   0          96s
    puls8-alloy-pjqbd                                            2/2     Running   0          96s
    puls8-alloy-rhj8t                                            2/2     Running   0          96s
    puls8-api-rest-7cf8d94fc5-kp298                              1/1     Running   0          96s
    puls8-csi-controller-7cf574bc65-fp4pb                        6/6     Running   0          95s
    puls8-csi-node-dnnxt                                         2/2     Running   0          96s
    puls8-csi-node-j9lbx                                         2/2     Running   0          96s
    puls8-csi-node-nb2lq                                         2/2     Running   0          96s
    puls8-etcd-0                                                 1/1     Running   0          95s
    puls8-etcd-1                                                 1/1     Running   0          95s
    puls8-etcd-2                                                 1/1     Running   0          95s
    puls8-io-engine-hp4gs                                        2/2     Running   0          96s
    puls8-io-engine-vrh2z                                        2/2     Running   0          95s
    puls8-io-engine-znqw2                                        2/2     Running   0          96s
    puls8-localpv-provisioner-7cbf67d6bc-j4mnc                   1/1     Running   0          96s
    puls8-loki-0                                                 2/2     Running   0          95s
    puls8-loki-1                                                 2/2     Running   0          94s
    puls8-loki-2                                                 2/2     Running   0          94s
    puls8-lvm-localpv-controller-57646cb6fb-9jfgd                5/5     Running   0          96s
    puls8-lvm-localpv-node-p5xj8                                 2/2     Running   0          96s
    puls8-lvm-localpv-node-qbntd                                 2/2     Running   0          96s
    puls8-lvm-localpv-node-wcntc                                 2/2     Running   0          96s
    puls8-minio-0                                                1/1     Running   0          95s
    puls8-minio-1                                                1/1     Running   0          95s
    puls8-minio-2                                                1/1     Running   0          95s
    puls8-nats-0                                                 3/3     Running   0          94s
    puls8-nats-1                                                 3/3     Running   0          94s
    puls8-nats-2                                                 3/3     Running   0          94s
    puls8-obs-callhome-75447568d4-cgrd6                          2/2     Running   0          95s
    puls8-operator-diskpool-74b8656847-99lpz                     1/1     Running   0          95s
    Copy
    Sample Output - Inbuilt kube-prometheus-stack Enabled
    [root@ocp-helper ~]# kubectl get pods -n puls8
    NAME                                                         READY   STATUS    RESTARTS   AGE
    alertmanager-puls8-kube-prometheus-stac-alertmanager-0       2/2     Running   0          94s
    dcs-puls8-down-pro-diskpoolclaim-operator-5975589785-24hx8   1/1     Running   0          95s
    dcs-puls8-license-agent-586fd69f8-k89kg                      1/1     Running   0          95s
    prometheus-puls8-kube-prometheus-stac-prometheus-0           2/2     Running   0          92s
    puls8-agent-core-df644d456-f5hq4                             2/2     Running   0          96s
    puls8-agent-ha-node-5gjr9                                    1/1     Running   0          96s
    puls8-agent-ha-node-f7pqn                                    1/1     Running   0          96s
    puls8-agent-ha-node-hkqp6                                    1/1     Running   0          96s
    puls8-alloy-7nn8x                                            2/2     Running   0          96s
    puls8-alloy-pjqbd                                            2/2     Running   0          96s
    puls8-alloy-rhj8t                                            2/2     Running   0          96s
    puls8-api-rest-7cf8d94fc5-kp298                              1/1     Running   0          96s
    puls8-csi-controller-7cf574bc65-fp4pb                        6/6     Running   0          95s
    puls8-csi-node-dnnxt                                         2/2     Running   0          96s
    puls8-csi-node-j9lbx                                         2/2     Running   0          96s
    puls8-csi-node-nb2lq                                         2/2     Running   0          96s
    puls8-etcd-0                                                 1/1     Running   0          95s
    puls8-etcd-1                                                 1/1     Running   0          95s
    puls8-etcd-2                                                 1/1     Running   0          95s
    puls8-grafana-75dd8d69fb-mdzdp                               3/3     Running   0          96s
    puls8-io-engine-hp4gs                                        2/2     Running   0          96s
    puls8-io-engine-vrh2z                                        2/2     Running   0          95s
    puls8-io-engine-znqw2                                        2/2     Running   0          96s
    puls8-kube-prometheus-stac-operator-7b9ff85fb8-xbzbf         1/1     Running   0          96s
    puls8-kube-state-metrics-558fd67756-jvkwz                    1/1     Running   0          96s
    puls8-localpv-provisioner-7cbf67d6bc-j4mnc                   1/1     Running   0          96s
    puls8-loki-0                                                 2/2     Running   0          95s
    puls8-loki-1                                                 2/2     Running   0          94s
    puls8-loki-2                                                 2/2     Running   0          94s
    puls8-lvm-localpv-controller-57646cb6fb-9jfgd                5/5     Running   0          96s
    puls8-lvm-localpv-node-p5xj8                                 2/2     Running   0          96s
    puls8-lvm-localpv-node-qbntd                                 2/2     Running   0          96s
    puls8-lvm-localpv-node-wcntc                                 2/2     Running   0          96s
    puls8-minio-0                                                1/1     Running   0          95s
    puls8-minio-1                                                1/1     Running   0          95s
    puls8-minio-2                                                1/1     Running   0          95s
    puls8-nats-0                                                 3/3     Running   0          94s
    puls8-nats-1                                                 3/3     Running   0          94s
    puls8-nats-2                                                 3/3     Running   0          94s
    puls8-obs-callhome-75447568d4-cgrd6                          2/2     Running   0          95s
    puls8-operator-diskpool-74b8656847-99lpz                     1/1     Running   0          95s
    puls8-prometheus-node-exporter-pdj4r                         1/1     Running   0          96s
    puls8-prometheus-node-exporter-wljm9                         1/1     Running   0          96s
    puls8-prometheus-node-exporter-xxkgp                         1/1     Running   0          96s
  4. Create a DiskPool.

    Copy
    diskpool.yaml
    apiVersion: openebs.io/v1beta3
    kind: DiskPool
    metadata:
      name: pool-on-node-1
      namespace: puls8
    spec:
      node: INSERT_WORKERNODE_HOSTNAME_HERE
      disks:
        - aio:///dev/disk/by-id/<id>

    Refer Creating a DiskPool Documentation for more information.

  5. Create a Storage Class.

    Copy
    Create a Storage Class
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: mayastor-1
    parameters:
      protocol: nvmf
      repl: "1"
  6. Create a PVC.

    Copy
    Create a PVC
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: ms-volume-claim
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi
      storageClassName: mayastor-1
  7. Verify your Storage class and PVC.

    Copy
    Verify StorageClass
    kubectl get sc mayastor-1
    Copy
    Sample Output
    NAME         PROVISIONER               RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
    mayastor-1   io.openebs.csi-mayastor   Delete          Immediate           false                  4m
    Copy
    Verify PVC
    kubectl get pvc
    Copy
    Sample Output
    NAME   STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
    test   Bound    pvc-aca9de87-e57c-46c8-ba0d-921de19a873e   2Gi        RWO            mayastor-1     <unset>                 30s

Installing Local PV LVM

  1. Install the DataCore Puls8 Helm Chart.

    Copy
    Install DataCore Puls8 Helm Chart with Local PV LVM Enabled
    helm install puls8 -n puls8 oci://docker.io/datacoresoftware/puls8 \
    --set openebs.openebs-crds.csi.volumeSnapshots.enabled=false \
    --set openebs.engines.replicated.mayastor.enabled=false \
    --set monitoring.kube-prometheus-stack.install=false \
    --set openebs.engines.local.zfs.enabled=false \
    --version <version>
  2. Configure SCCs.

    In a separate client session, add the required service accounts into the privileged SCC.

    Copy
    Assign SCC Privileges
    oc adm policy add-scc-to-user privileged system:serviceaccount:puls8:loki
    oc adm policy add-scc-to-user privileged system:serviceaccount:puls8:minio-sa
    oc adm policy add-scc-to-user privileged system:serviceaccount:puls8:openebs-lvm-node-sa
    oc adm policy add-scc-to-user privileged system:serviceaccount:puls8:puls8-alloy
    oc adm policy add-scc-to-user privileged system:serviceaccount:puls8:puls8-localpv-provisioner
    • If you choose to use the built-in UWM, the kube-prometheus-stack can be disabled using the command shown earlier.
    • If you enable the bundled kube-prometheus-stack, add the kube-prometheus service accounts listed in Common Installation Steps and do not set --set monitoring.kube-prometheus-stack.install=false.
  3. Verify Puls8 pods are running in the puls8 namespace.

    Copy
    Verify Puls8 Pods
    kubectl get pods -n puls8
    Copy
    Sample Output - Inbuilt kube-prometheus-stack Disabled
    NAME                                            READY   STATUS    RESTARTS   AGE
    dcs-puls8-license-agent-6c4c6595bf-m2nkq        1/1     Running   0          126m
    puls8-alloy-h6mjs                               2/2     Running   0          126m
    puls8-alloy-rxzrb                               2/2     Running   0          126m
    puls8-alloy-xzkv6                               2/2     Running   0          126m
    puls8-localpv-provisioner-7cbf67d6bc-djf52      1/1     Running   0          126m
    puls8-loki-0                                    2/2     Running   0          121m
    puls8-loki-1                                    2/2     Running   0          121m
    puls8-loki-2                                    2/2     Running   0          121m
    puls8-lvm-localpv-controller-57646cb6fb-9gjgl   5/5     Running   0          126m
    puls8-lvm-localpv-node-6kwh8                    2/2     Running   0          126m
    puls8-lvm-localpv-node-8mzfd                    2/2     Running   0          126m
    puls8-lvm-localpv-node-vrvnf                    2/2     Running   0          126m
    puls8-minio-0                                   1/1     Running   0          126m
    puls8-minio-1                                   1/1     Running   0          126m
    puls8-minio-2                                   1/1     Running   0          126m
    Copy
    Sample Output - Inbuilt kube-prometheus-stack Enabled
    NAME                                                     READY   STATUS    RESTARTS   AGE
    alertmanager-puls8-kube-prometheus-stac-alertmanager-0   2/2     Running   0          118s
    dcs-puls8-license-agent-6c4c6595bf-875lj                 1/1     Running   0          2m4s
    prometheus-puls8-kube-prometheus-stac-prometheus-0       2/2     Running   0          118s
    puls8-alloy-2kk26                                        2/2     Running   0          2m4s
    puls8-alloy-f87n8                                        2/2     Running   0          2m4s
    puls8-alloy-rbcbv                                        2/2     Running   0          2m4s
    puls8-grafana-75dd8d69fb-fdgc6                           2/3     Running   0          31s
    puls8-kube-prometheus-stac-operator-7b9ff85fb8-92vnz     1/1     Running   0          2m4s
    puls8-kube-state-metrics-558fd67756-2xfm9                1/1     Running   0          2m4s
    puls8-localpv-provisioner-7cbf67d6bc-hkgjc               1/1     Running   0          2m4s
    puls8-loki-0                                             2/2     Running   0          2m4s
    puls8-loki-1                                             2/2     Running   0          2m3s
    puls8-loki-2                                             2/2     Running   0          2m3s
    puls8-lvm-localpv-controller-57646cb6fb-wcjnb            5/5     Running   0          2m4s
    puls8-lvm-localpv-node-9qsb8                             2/2     Running   0          2m4s
    puls8-lvm-localpv-node-s65r2                             2/2     Running   0          2m4s
    puls8-lvm-localpv-node-xsrtw                             2/2     Running   0          2m4s
    puls8-minio-0                                            1/1     Running   0          2m4s
    puls8-minio-1                                            1/1     Running   0          2m4s
    puls8-minio-2                                            1/1     Running   0          2m4s
    puls8-prometheus-node-exporter-4xzjh                     1/1     Running   0          2m4s
    puls8-prometheus-node-exporter-6bgdh                     1/1     Running   0          2m4s
    puls8-prometheus-node-exporter-dsp6f                     1/1     Running   0          2m4s
  4. Create a Storage Class.

    Copy
    Create a Storage Class
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: puls8-lvmpv
    parameters:
      storage: "lvm"
      volgroup: "lvmvg"
    provisioner: local.csi.openebs.io
    allowedTopologies:
    - matchLabelExpressions:
      - key: kubernetes.io/hostname
        values:
        - ocp-cp-1.lab.ocp.lan

    Refer Volume Management to set up a volume group, and update the values in the above file based on your configuration.

  5. Create a PVC.

    Copy
    Create a PVC
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
     name: csi-lvmpv
    spec:
     storageClassName: puls8-lvmpv
     accessModes:
       - ReadWriteOnce
     resources:
       requests:
         storage: 4Gi
  6. Verify your Storage class and PVC.

    Copy
    Verify StorageClass
    oc get sc puls8-lvmpv
    Copy
    Sample Output
    NAME          PROVISIONER            RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
    puls8-lvmpv   local.csi.openebs.io   Delete          Immediate           false                  16h
    Copy
    Verify PVC
    oc get pvc csi-lvmpv
    Copy
    Sample Output
    NAME        STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
    csi-lvmpv   Bound    pvc-7a707908-2da2-4238-a7bb-ff07f95430bd   4Gi        RWO            puls8-lvmpv    <unset>                 22m

Backup Components Installation

Refer to the Backup and Restore Documentation for details on installing and configuring backup components.

Enabling Monitoring for User Workloads

You can enable UWM in OpenShift to collect and visualize metrics from DataCore Puls8 components. Refer to the Configuring User Workload Monitoring Documentation for more information.

  1. Edit the cluster-monitoring-config ConfigMap object

    Copy
    Edit ConfigMap Object
    oc -n openshift-monitoring edit configmap cluster-monitoring-config
  2. Update the configuration to enable UWM.

    Copy
    Enable UWM
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: cluster-monitoring-config
      namespace: openshift-monitoring
    data:
      config.yaml: |
        enableUserWorkload: true
  3. Save and apply the changes. Monitoring for user-defined projects will be enabled automatically.

  4. Verify that the monitoring stack pods are running.

    Copy
    Verify Monitoring Stack Pods
    oc -n openshift-user-workload-monitoring get pod

    Alerting rules are automatically detected. You can also copy the dashboard JSON ConfigMaps from the puls8 namespace into your Grafana namespace to access DataCore Puls8 dashboards.

Troubleshooting

  • Check recent events in the puls8 namespace:
  • Copy
    Check Recent Events
    kubectl get events -n puls8 --sort-by=.lastTimestamp
  • Refer to the Troubleshooting Documentation for more information.
  • Gather a support bundle if additional diagnostics are required. Refer to the Supportability Documentation for more information.

Benefits of Using DataCore Puls8 on OpenShift

  • Cloud-Native and Container-Aware Architecture: DataCore Puls8 integrates seamlessly with OpenShift, delivering Container Native Storage (CNS) that operates as Kubernetes microservices and supports dynamic provisioning.
  • Dynamic and Scalable Storage: Automatically provisions volumes on demand to match the scale and pace of application growth in OpenShift.
  • Support for Stateful Applications: Ideal for databases, message queues, and other workloads that require persistent, high-performance, and redundant storage.
  • Integration with OpenShift Ecosystem: Compatible with OpenShift operators, pipelines, and monitoring tools, enhancing observability and management.
  • Simplified Snapshot Management: VolumeSnapshot CRDs are preinstalled on OpenShift, reducing configuration overhead.
  • Backup Integration: Dedicated backup components and guides help protect workloads and support recovery strategies.
  • Enterprise-Ready Supportability: Built-in troubleshooting commands, event logs, and support bundle collection simplify issue diagnosis and resolution.

Learn More