Installing DataCore Puls8 on OpenShift
Explore this Page
- Overview
- Requirements
- Installation Flow
- Common Installation Steps
- Storage-Specific Installation
- Backup Components Installation
- Enabling Monitoring for User Workloads
- Troubleshooting
- Benefits of Using DataCore Puls8 on OpenShift
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:
- Review and follow steps in DataCore Puls8 Prerequisites documentation.
- Download and install the
kubectl-puls8
plugin. Refer DataCore Puls8 Kubectl Plugin documentation for more information.
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 - Steps required regardless of the storage you select.
- Storage-Specific Installation - Instructions that differ depending on whether you install Replicated PV Mayastor + Local PV LVM or Local PV LVM.
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.
-
Create a Namespace.
-
Configure User Workload Monitoring (UWM).
If you choose to use the built-in UWM of OpenShift, disable the
kube-prometheus-stack
Installation:CopyDisable 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:CopyGrant privileged SCC to service accounts required when enabling the built-in kube-prometheus-stackoc 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-exporterDo not set
--set monitoring.kube-prometheus-stack.install=false
if using the bundledkube-prometheus-stack
chart. -
Verify Puls8 pods are running in the
puls8
namespace.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
-
Install the DataCore Puls8 Helm Chart.
CopyInstall DataCore Puls8 Helm Chart with Replicated PV Mayastor Enabledhelm 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 -
Configure SCCs.
In a separate client session, add the required service accounts into the privileged SCC.
CopyAssign SCC Privilegesoc 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
.
- If you choose to use the built-in UWM, the
-
Verify Puls8 pods are running in the
puls8
namespace.CopySample 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 95sCopySample 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 -
Create a DiskPool.
Copydiskpool.yamlapiVersion: 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.
-
Create a Storage Class.
CopyCreate a Storage ClassapiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: mayastor-1
parameters:
protocol: nvmf
repl: "1" -
Create a PVC.
CopyCreate a PVCapiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: ms-volume-claim
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: mayastor-1 -
Verify your Storage class and PVC.
CopySample OutputNAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
mayastor-1 io.openebs.csi-mayastor Delete Immediate false 4mCopySample OutputNAME 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
-
Install the DataCore Puls8 Helm Chart.
CopyInstall DataCore Puls8 Helm Chart with Local PV LVM Enabledhelm 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> -
Configure SCCs.
In a separate client session, add the required service accounts into the privileged SCC.
CopyAssign SCC Privilegesoc 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
.
- If you choose to use the built-in UWM, the
-
Verify Puls8 pods are running in the
puls8
namespace.CopySample Output - Inbuilt kube-prometheus-stack DisabledNAME 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 126mCopySample Output - Inbuilt kube-prometheus-stack EnabledNAME 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 -
Create a Storage Class.
CopyCreate a Storage ClassapiVersion: 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.lanRefer Volume Management to set up a volume group, and update the values in the above file based on your configuration.
-
Create a PVC.
CopyCreate a PVCkind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: csi-lvmpv
spec:
storageClassName: puls8-lvmpv
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 4Gi -
Verify your Storage class and PVC.
CopySample OutputNAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
puls8-lvmpv local.csi.openebs.io Delete Immediate false 16hCopySample OutputNAME 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.
-
Edit the
cluster-monitoring-config
ConfigMap object -
Update the configuration to enable UWM.
CopyEnable UWMapiVersion: v1
kind: ConfigMap
metadata:
name: cluster-monitoring-config
namespace: openshift-monitoring
data:
config.yaml: |
enableUserWorkload: true -
Save and apply the changes. Monitoring for user-defined projects will be enabled automatically.
-
Verify that the monitoring stack pods are running.
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: - 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