seawise-backup

Seawise Logo # OpenShift Installation - Simplified Guide Quick and easy guide to install Seawise Dashboard on OpenShift clusters with OADP [🌐 seawise.cloud](https://seawise.cloud) | [📦 GitHub](https://github.com/shwcloudapp/seawise-backup)

✅ Before You Start

You need:


🎯 Installation

Two supported paths: Option A — OperatorHub (recommended) or Option B — Helm. Both require OADP first:

Prerequisite: Verify OADP Installation

# Check if OADP is installed
oc get deployment -n openshift-adp

# Should show velero deployment

If OADP is not installed, see: OADP Installation Guide


Seawise is a Red Hat Certified Operator available in the in-cluster OperatorHub. This is the easiest path on OpenShift — the Operator deploys and manages the dashboard for you, and you get automatic upgrades.

A.1 — Install the Operator (Web Console)

  1. In the OpenShift Console, go to Operators → OperatorHub.
  2. Search for Seawise Backup Dashboard and click it.
  3. Click Install, keep the defaults, and Install again.
  4. Wait until the Operator status is Succeeded (Operators → Installed Operators).

CLI alternative:

oc apply -f - <<'YAML'
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  name: seawise-backup-operator
  namespace: openshift-operators
spec:
  channel: alpha
  name: seawise-backup-operator
  source: certified-operators
  sourceNamespace: openshift-marketplace
YAML

A.2 — Create a Seawise instance

In Installed Operators → Seawise Backup Dashboard → Create instance, or via CLI:

oc new-project seawise-app   # namespace for the dashboard

oc apply -f - <<'YAML'
apiVersion: backup.seawise.cloud/v1alpha1
kind: Seawise
metadata:
  name: seawise-dashboard
  namespace: seawise-app
spec:
  replicaCount: 1
  image:
    repository: quay.io/marcellshwcloud/seawise-backup-dashboard
    tag: v1.7.1-ubi
  app:
    veleroNamespace: openshift-adp        # where OADP/Velero is installed
  persistence:
    enabled: true
    accessMode: ReadWriteOnce
    size: 1Gi
    storageClassName: "nfs-storage-class" # <-- set YOUR cluster's StorageClass
  service:
    port: 80
    targetPort: 8080
  route:
    enabled: true
YAML

⚠️ Set persistence.storageClassName to a StorageClass that exists in your cluster (oc get storageclass). If left empty, the cluster default is used; if there is no default, the PVC stays Pending and the pod won’t start.

A.3 — Access it

oc get route -n seawise-app seawise-dashboard -o jsonpath='{.spec.host}'; echo

🔐 Default login is admin / admin123change the password on first login.

To upgrade later, the Operator handles it automatically when a new version is published. To remove: delete the Seawise instance, then uninstall the Operator.


🎯 Option B: Install via Helm (3 Steps)

Prefer Helm (no Operator)? Follow the steps below.

Step 2: Create Configuration File

Copy and paste this command (it will create the file automatically):

cat > openshift-values.yaml <<'YAML'
image:
  repository: shwcloud/seawise-backup
  tag: "v1.7.1"
  pullPolicy: IfNotPresent

app:
  veleroNamespace: "openshift-adp"
  timezone: "America/Sao_Paulo"

persistence:
  enabled: true
  storageClassName: "nfs-storage-class"
  size: 1Gi

route:
  enabled: true
  host: ""
  tls:
    enabled: true
    termination: edge

ingress:
  enabled: false

resources:
  requests:
    cpu: 250m
    memory: 256Mi
  limits:
    cpu: 500m
    memory: 512Mi

podSecurityContext:
  runAsNonRoot: true

securityContext:
  allowPrivilegeEscalation: false
  capabilities:
    drop:
    - ALL
  readOnlyRootFilesystem: false
  runAsNonRoot: true
YAML

Edit the StorageClass if needed:

# Check available storage classes
oc get storageclass

# Edit the file to use your storage class
nano openshift-values.yaml
# Change line 11: storageClassName: "YOUR-STORAGE-CLASS"

Step 3: Install

Latest Version: Check releases

# Set the version
export CHART_VERSION=1.7.1

helm install seawise-dashboard \
  https://github.com/shwcloudapp/seawise-backup/releases/download/v${CHART_VERSION}/seawise-dashboard-${CHART_VERSION}.tgz \
  --namespace seawise-app \
  --create-namespace \
  -f openshift-values.yaml

Done! Wait 1-2 minutes and get the URL:

oc get route -n seawise-app seawise-dashboard

Access the URL shown in the output! 🎉


🔍 Verify Installation

# Check if pod is running
oc get pods -n seawise-app

# Check the Route
oc get route -n seawise-app

# Check logs if needed
oc logs -n seawise-app -l app.kubernetes.io/name=seawise-dashboard -f

Expected output:

NAME                                 READY   STATUS    RESTARTS   AGE
seawise-dashboard-xxxxxxxxxx-xxxxx   1/1     Running   0          2m

NAME                HOST/PORT
seawise-dashboard   seawise-dashboard-seawise-app.apps.cluster.example.com

⚙️ Common Configurations

Change Timezone

helm upgrade seawise-dashboard \
  https://github.com/shwcloudapp/seawise-backup/releases/download/v${CHART_VERSION}/seawise-dashboard-${CHART_VERSION}.tgz \
  --namespace seawise-app \
  --reuse-values \
  --set app.timezone="America/New_York"

Use Custom Hostname

# Edit the file
nano openshift-values.yaml

# Change:
# route:
#   enabled: true
#   host: "backup.apps.cluster.example.com"

# Update
helm upgrade seawise-dashboard \
  https://github.com/shwcloudapp/seawise-backup/releases/download/v${CHART_VERSION}/seawise-dashboard-${CHART_VERSION}.tgz \
  --namespace seawise-app \
  -f openshift-values.yaml

Force HTTPS Redirect

helm upgrade seawise-dashboard \
  https://github.com/shwcloudapp/seawise-backup/releases/download/v${CHART_VERSION}/seawise-dashboard-${CHART_VERSION}.tgz \
  --namespace seawise-app \
  --reuse-values \
  --set route.tls.insecureEdgeTerminationPolicy="Redirect"

Change OADP Namespace

If OADP is in a different namespace:

# Find OADP namespace
oc get deployment --all-namespaces | grep velero

# Update
helm upgrade seawise-dashboard \
  https://github.com/shwcloudapp/seawise-backup/releases/download/v${CHART_VERSION}/seawise-dashboard-${CHART_VERSION}.tgz \
  --namespace seawise-app \
  --reuse-values \
  --set app.veleroNamespace="YOUR-OADP-NAMESPACE"

🐛 Common Issues

1. Pod Not Starting (CrashLoopBackOff)

# View logs
oc logs -n seawise-app -l app.kubernetes.io/name=seawise-dashboard

# Check PVC
oc get pvc -n seawise-app

Solution: Usually a storage issue. Check if the StorageClass exists:

oc get storageclass

If nfs-storage-class doesn’t exist, use another one:

helm upgrade seawise-dashboard \
  https://github.com/shwcloudapp/seawise-backup/releases/download/v${CHART_VERSION}/seawise-dashboard-${CHART_VERSION}.tgz \
  --namespace seawise-app \
  --reuse-values \
  --set persistence.storageClassName="ocs-storagecluster-cephfs"

Common OpenShift storage classes:


2. Route Not Appearing / URL Not Working

# Check if Route was created
oc describe route -n seawise-app seawise-dashboard

# Check service
oc get svc -n seawise-app

Solutions:


3. “OADP not found” in Dashboard

# Find where OADP/Velero is installed
oc get deployment --all-namespaces | grep velero

# If it's in a different namespace, update:
helm upgrade seawise-dashboard \
  https://github.com/shwcloudapp/seawise-backup/releases/download/v${CHART_VERSION}/seawise-dashboard-${CHART_VERSION}.tgz \
  --namespace seawise-app \
  --reuse-values \
  --set app.veleroNamespace="CORRECT-NAMESPACE"

4. Permission Errors

# Check RBAC
oc get clusterrole | grep seawise
oc get clusterrolebinding | grep seawise

# Check ServiceAccount
oc get sa -n seawise-app

Solution: The Helm chart automatically creates all required RBAC resources. If there are errors, reinstall:

helm uninstall seawise-dashboard -n seawise-app
helm install seawise-dashboard \
  https://github.com/shwcloudapp/seawise-backup/releases/download/v${CHART_VERSION}/seawise-dashboard-${CHART_VERSION}.tgz \
  --namespace seawise-app \
  --create-namespace \
  -f openshift-values.yaml

5. Security Context Constraints (SCC) Issues

OpenShift has strict security policies. The chart is configured to work with the default restricted-v2 SCC by:

The chart should work out-of-the-box with OpenShift’s default SCC!

If you still get SCC errors:

# Check which SCC is being used
oc describe pod -n seawise-app -l app.kubernetes.io/name=seawise-dashboard | grep scc

# Check available SCCs
oc get scc

Solution: The Helm chart v1.7.1+ is already configured correctly for OpenShift. Just make sure you’re NOT specifying runAsUser or fsGroup in your values file.

If upgrading from an older version:

# Uninstall old version
helm uninstall seawise-dashboard -n seawise-app

# Reinstall with correct SCC settings
helm install seawise-dashboard \
  https://github.com/shwcloudapp/seawise-backup/releases/download/v${CHART_VERSION}/seawise-dashboard-${CHART_VERSION}.tgz \
  --namespace seawise-app \
  --create-namespace \
  -f openshift-values.yaml

🔄 Update to New Version

helm upgrade seawise-dashboard \
  https://github.com/shwcloudapp/seawise-backup/releases/download/v${CHART_VERSION}/seawise-dashboard-${CHART_VERSION}.tgz \
  --namespace seawise-app \
  --reuse-values

🗑️ Uninstall

# Remove application
helm uninstall seawise-dashboard -n seawise-app

# Remove data (CAUTION: this deletes the database!)
oc delete pvc -n seawise-app seawise-dashboard-pvc

# Remove namespace
oc delete project seawise-app

🆘 Need Help?


📋 Complete Command Summary

For convenience, here’s the complete command in a single block:

# 1. Create configuration file
cat > openshift-values.yaml <<'YAML'
image:
  repository: shwcloud/seawise-backup
  tag: "v1.7.1"
  pullPolicy: IfNotPresent
app:
  veleroNamespace: "openshift-adp"
  timezone: "America/Sao_Paulo"
persistence:
  enabled: true
  storageClassName: "nfs-storage-class"
  size: 1Gi
route:
  enabled: true
  host: ""
  tls:
    enabled: true
    termination: edge
ingress:
  enabled: false
resources:
  requests:
    cpu: 250m
    memory: 256Mi
  limits:
    cpu: 500m
    memory: 512Mi
podSecurityContext:
  runAsNonRoot: true
securityContext:
  allowPrivilegeEscalation: false
  capabilities:
    drop:
    - ALL
  readOnlyRootFilesystem: false
  runAsNonRoot: true
YAML

# 2. EDIT storage class if needed
nano openshift-values.yaml

# 3. Install
helm install seawise-dashboard \
  https://github.com/shwcloudapp/seawise-backup/releases/download/v${CHART_VERSION}/seawise-dashboard-${CHART_VERSION}.tgz \
  --namespace seawise-app \
  --create-namespace \
  -f openshift-values.yaml

# 4. Verify
oc get pods,route -n seawise-app

# 5. Get URL
oc get route -n seawise-app seawise-dashboard -o jsonpath='{.spec.host}'
echo ""

Done! 🎉


💡 Pro Tips

Quick OADP Status Check

# Check OADP operator
oc get csv -n openshift-adp | grep oadp

# Check DataProtectionApplication
oc get dpa -n openshift-adp

# Check Velero deployment
oc get deployment -n openshift-adp velero

View Dashboard Without Route (Testing)

oc port-forward -n seawise-app svc/seawise-dashboard 8080:80
# Access: http://localhost:8080

Export Route URL

export SEAWISE_URL=$(oc get route -n seawise-app seawise-dashboard -o jsonpath='{.spec.host}')
echo "Access Seawise Dashboard at: https://$SEAWISE_URL"

Ready to backup! 🚀