Phase 4: RHOAI Configuration

Configure the RHOAI operator instances to enable Models-as-a-Service. Because the PostgreSQL database and maas-db-config secret already exist (Phase 3), the maas-api deployment will start healthy immediately.

All file paths and oc apply commands in this guide are relative to the rhoai-maas-guide repository root. Make sure you have cloned it and are working from its root directory (see Getting Started).
This guide is not a replacement for the official Red Hat OpenShift AI Models as a Service documentation. It is a companion resource with opinionated Kustomize manifests and automation scripts to accelerate deployment.

Prerequisites

  • RHOAI operator is installed and CSV is in Succeeded state

  • Phase 3 (MaaS platform) is completed — PostgreSQL is running and maas-db-config secret exists

Verify the operator is ready before proceeding:

oc get csv -n redhat-ods-operator | grep rhods-operator

Expected output:

NAME                     DISPLAY                 VERSION   REPLACES               PHASE
rhods-operator.3.4.0     Red Hat OpenShift AI    3.4.0     rhods-operator.3.3.2   Succeeded

Apply

On a fresh install, apply in two stages. The OdhDashboardConfig CRD does not exist until the RHOAI operator has reconciled the DataScienceCluster, so applying the full kustomization in one shot will fail the first time.

The RHOAI operator auto-creates a default-dsci and odh-dashboard-config during installation. When you oc apply over these auto-created resources, you will see a warning: "resource is missing the kubectl.kubernetes.io/last-applied-configuration annotation". This is harmless — the annotation is patched automatically and subsequent applies will be clean.
# Stage 1: DSC and DSCI (triggers operator reconciliation)
oc apply -f manifests/04-rhoai-config/dscinitialization.yaml

Wait until the DSCI is created (this step must complete before creating the DSC):

oc wait --for=jsonpath='{.status.phase}'=Ready \
  dscinitialization/default-dsci --timeout=600s

Create the Data Science Cluster:

oc apply -f manifests/04-rhoai-config/datasciencecluster.yaml

The DataScienceCluster reconciles multiple components. Wait for KServe and the Model Controller (MaaS) to reach Ready:

oc wait --for=jsonpath='{.status.phase}'=Ready \
  datasciencecluster/default-dsc --timeout=600s

With the Data Science Cluster created we can now apply the dashboard configuration:

# Stage 2: Dashboard config (requires OdhDashboardConfig CRD to exist)
oc apply -f manifests/04-rhoai-config/odh-dashboard-config.yaml
On subsequent runs (CRDs already exist), oc apply -k manifests/04-rhoai-config/ works in one shot.

Verify

Check MaaS CRDs are installed

The operator installs MaaS CRDs when modelsAsService is set to Managed:

oc get crd | grep maas.opendatahub.io

Expected CRDs:

  • externalmodels.maas.opendatahub.io

  • maasauthpolicies.maas.opendatahub.io

  • maasmodelrefs.maas.opendatahub.io

  • maassubscriptions.maas.opendatahub.io

  • tenants.maas.opendatahub.io

Check maas-api deployment

Since PostgreSQL and the maas-db-config secret were created in Phase 3, the maas-api deployment should start healthy:

oc rollout status deployment/maas-api -n redhat-ods-applications --timeout=120s
The maas-api deployment may take 30-60 seconds to appear after the DSC is applied. If it is not found, wait and retry.

Check Tenant CR

The maas-controller auto-creates a default-tenant CR in the models-as-a-service namespace:

oc get tenant default-tenant -n models-as-a-service
The default-tenant CR may show either Ready=True (reason Reconciled) or Ready=False (reason DeploymentsNotReady) at this stage. Both are normal — if it shows Ready=False, it will become Ready=True after a model is deployed in Phase 5.

MaaS health endpoint

CLUSTER_DOMAIN=$(oc get ingresses.config.openshift.io cluster -o jsonpath='{.spec.domain}')
curl -sk "https://maas.${CLUSTER_DOMAIN}/maas-api/health"
# Expected: {"status":"healthy"}

Check OdhDashboardConfig flags

oc get odhdashboardconfig odh-dashboard-config -n redhat-ods-applications \
  -o jsonpath='{.spec.dashboardConfig}' | jq .

Verify the following flags are set:

  • modelAsService: true - enables the Models as a Service tab

  • genAiStudio: true - enables the GenAI Studio tab (requires llamastackoperator Managed)

  • maasAuthPolicies: true - enables MaaS auth policy management in the UI

  • observabilityDashboard: true - enables the Observability tab (requires COO + monitoring configured)

What this creates

Resource Purpose

DSCInitialization/default-dsci

Configures applications namespace, monitoring, and trusted CA bundle

DataScienceCluster/default-dsc

Enables all RHOAI components including KServe with modelsAsService Managed

OdhDashboardConfig/odh-dashboard-config

Enables MaaS, GenAI Studio, Auth Policies, and Observability UI tabs

Troubleshooting

If components do not become ready:

# Inspect DSC conditions and events
oc describe datasciencecluster default-dsc

# Check operator logs
oc logs -n redhat-ods-operator deployment/rhods-operator --tail=100

# Check pods in the applications namespace
oc get pods -n redhat-ods-applications

Appendix

Directory Structure

manifests/04-rhoai-config/
  kustomization.yaml             # Aggregates all RHOAI config resources
  dscinitialization.yaml         # DSCInitialization CR
  datasciencecluster.yaml        # DataScienceCluster CR
  odh-dashboard-config.yaml      # OdhDashboardConfig CR

Next step