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
Succeededstate -
Phase 3 (MaaS platform) is completed — PostgreSQL is running and
maas-db-configsecret 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 |
|---|---|
|
Configures applications namespace, monitoring, and trusted CA bundle |
|
Enables all RHOAI components including KServe with modelsAsService Managed |
|
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
Next step
Proceed to Phase 5: Model Deployment.