Skip to content

ADR 021: OpenShift-Native Dashboard Strategy

Status

Accepted / Verified

Context

The Jupyter Notebook Validator Operator exposes Prometheus metrics for monitoring operator health, validation performance, and resource utilization. Currently, we have:

  1. Existing Metrics (ADR-010):
  2. Reconciliation duration and errors
  3. Validation job success/failure rates
  4. Git clone performance
  5. Active pod counts
  6. Pod creation metrics

  7. Upcoming Metrics (ADR-020):

  8. Model validation duration
  9. Model health checks
  10. Prediction validation results
  11. Platform detection performance

Current Challenges

  1. Dashboard Fragmentation: Users must install separate Grafana instances to visualize metrics
  2. Operational Overhead: Managing Grafana Operator adds complexity
  3. OpenShift Integration: Not leveraging OpenShift's built-in monitoring capabilities
  4. User Experience: Inconsistent dashboard experience across deployments

OpenShift Monitoring Capabilities

OpenShift 4.8+ provides: - Built-in Prometheus: User workload monitoring with Thanos Querier - Console Dashboards: Native dashboard support via ConfigMaps - No Additional Installation: Dashboards work out-of-the-box - Consistent UX: Integrated into OpenShift Console's Observe section

Decision

We will adopt OpenShift-native dashboards using ConfigMaps as our primary dashboard strategy, with Grafana as an optional alternative for advanced use cases.

Dashboard Strategy

Tier 1: OpenShift Console Dashboards (Primary) - Use ConfigMap resources with console.openshift.io/dashboard: "true" label - Deploy to openshift-config-managed namespace - Leverage built-in Thanos Querier for metrics - No additional operator installation required

Tier 2: Grafana Dashboards (Optional) - Provide Grafana dashboard JSON for users who prefer Grafana - Support Grafana Operator integration - Document installation and configuration

Core Dashboard Set

We will provide 5 built-in OpenShift Console dashboards:

  1. Operator Health Overview
  2. Reconciliation duration (p50, p95, p99)
  3. Validation success rate
  4. Active validation pods
  5. Error rate by type
  6. Git clone performance

  7. Notebook Validation Performance

  8. Validation duration by namespace
  9. Cell execution time distribution
  10. Notebook size distribution
  11. Success/failure trends
  12. Top 10 slowest notebooks

  13. Model-Aware Validation (Phase 4.3)

  14. Model health check status by platform
  15. Prediction validation results
  16. Platform detection success rate
  17. Model validation duration by platform
  18. Top failing models

  19. Resource Utilization

  20. Pod CPU/memory usage
  21. Active pods by phase
  22. Pod creation/deletion rate
  23. Queue depth
  24. Workload distribution by namespace

  25. Git Operations & Credentials

  26. Git clone duration by auth type
  27. Git operation success rate
  28. Credential resolution time
  29. Repository access patterns
  30. Top repositories by validation count

ConfigMap Structure

apiVersion: v1
kind: ConfigMap
metadata:
  name: jupyter-notebook-validator-<dashboard-name>
  namespace: openshift-config-managed
  labels:
    console.openshift.io/dashboard: "true"
    console.openshift.io/odc-dashboard: "true"
data:
  <dashboard-name>.json: |
    {
      "dashboard": {
        "title": "Jupyter Notebook Validator - <Title>",
        "tags": ["jupyter", "mlops", "operator"],
        "panels": [...]
      }
    }

Consequences

Positive

  1. Zero Installation Overhead: Works out-of-the-box on OpenShift
  2. Consistent UX: Integrated into OpenShift Console
  3. Lower Maintenance: No separate Grafana operator to manage
  4. Better Integration: Leverages OpenShift RBAC and authentication
  5. Faster Adoption: Users can view dashboards immediately after operator installation

Negative

  1. OpenShift-Specific: Dashboards only work on OpenShift (not vanilla Kubernetes)
  2. Limited Customization: Less flexible than Grafana for advanced visualizations
  3. Feature Parity: Some Grafana features not available in Console dashboards

Mitigation

  1. Provide Grafana Alternative: Include Grafana dashboard JSON for non-OpenShift users
  2. Document Limitations: Clearly document what's supported in each tier
  3. Community Contributions: Enable community to create advanced Grafana dashboards

Alternatives Considered

Alternative 1: Grafana-Only Strategy

Rejected: Requires additional operator installation, increases operational overhead, not OpenShift-native.

Alternative 2: No Dashboards (Metrics Only)

Rejected: Poor user experience, users must create their own dashboards, inconsistent adoption.

Alternative 3: Embedded Grafana in Operator

Rejected: Significantly increases operator complexity, resource overhead, security concerns.

Implementation Plan

Phase 1: Core Dashboards (Week 1-2)

  • Create ConfigMap templates for 5 core dashboards
  • Add Kustomize overlays for dashboard deployment
  • Test dashboards on OpenShift 4.18+ cluster
  • Document dashboard installation

Phase 2: Grafana Alternative (Week 3)

  • Export Grafana-compatible JSON for each dashboard
  • Create Grafana Operator integration guide
  • Test Grafana dashboards with Grafana Operator

Phase 3: Documentation (Week 4)

  • Create dashboard user guide
  • Add screenshots to documentation
  • Document PromQL queries used
  • Create troubleshooting guide

Phase 4: Model Validation Dashboards (Phase 4.3)

  • Add model-aware validation dashboard
  • Update metrics for model validation
  • Test with KServe and OpenShift AI
  • ADR-010: Observability and Monitoring Strategy (defines metrics)
  • ADR-020: Model-Aware Validation Strategy (defines model metrics)
  • ADR-022: Community Observability Contributions (defines contribution process)

References

Revision History

Date Author Description
2025-11-08 Team Initial OpenShift-native dashboard strategy
2026-09-12 Team Verified: 5 ConfigMap dashboards confirmed in config/monitoring/openshift-console/ and helm/dashboards/. Kustomization overlay references all 5. Helm chart includes matching dashboard files. OBSERVABILITY.md created with prerequisites. Live cluster validation (Console rendering, Grafana Operator CR acceptance) deferred to cluster-available E2E.