Skip to content

Commit 5200c38

Browse files
committed
Merge remote-tracking branch 'upstream/main'
2 parents 5cdf123 + 0ff9ff8 commit 5200c38

18 files changed

Lines changed: 260 additions & 115 deletions

Makefile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ CHART_NAME ?=
232232
CHART_PATH ?= $(CHARTS_DIR)/$(if $(CHART_NAME),$(CHART_NAME),rhai-on-openshift-chart)
233233

234234
# Snapshot configuration (in scripts directory)
235-
HELM_DOCS_VERSION ?= 37d3055fece566105cf8cff7c17b7b2355a01677 # v1.14.2
235+
HELM_DOCS_VERSION ?= 37d3055fece566105cf8cff7c17b7b2355a01677 # v1.14.2
236236
##@ Helm Chart utilities
237237
.PHONY: chart-snapshots
238238
chart-snapshots: yq ## Create snapshots for chart(s). Use CHART_NAME=<name> for specific chart, omit for all
@@ -261,8 +261,8 @@ helm-verify: ## Verify helm chart installation and DSC components
261261
HELM_EXTRA_ARGS ?=
262262
HELM_INSTALL_VALUES_FILE ?= docs/examples/values-all-components-managed.yaml
263263
# Remove ogx to avoid nfd and nvidiaGPUOperator dependencies installation on tests.
264-
# TODO: Remove modelsAsService as it depends on PostgreSQL, need to support it in the chart
265-
HELM_INSTALL_ARGS := -f $(HELM_INSTALL_VALUES_FILE) --set components.ogx.dsc.managementState=Removed --set components.kserve.dsc.modelsAsService.managementState=Removed
264+
# Keep modelsAsAService Removed in CI — it depends on PostgreSQL (not installed by the chart yet).
265+
HELM_INSTALL_ARGS := -f $(HELM_INSTALL_VALUES_FILE) --set components.ogx.dsc.managementState=Removed --set components.aigateway.dsc.modelsAsAService.managementState=Removed
266266

267267
.PHONY: helm-install-verify
268268
helm-install-verify: ## Install helm chart and verify installation

charts/rhai-on-openshift-chart/README.md

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -99,23 +99,33 @@ The script can be customized with environment variables:
9999
100100
### Enable Models as Service
101101

102-
To enable Models as Service, Gateway and GatewayClass are needed. They could be created manually or with the chart.
103-
To create them with the chart, you need to manually set the gateway hostname, and the certificate secret name.
104-
By default, the Gateway creation is disabled. To enable it, you need to set the `components.kserve.modelsAsService.gateway.create`
105-
and `components.kserve.modelsAsService.gatewayClass.create` to `true`.
102+
To enable Models as Service, set `components.aigateway.dsc.managementState` and
103+
`components.aigateway.dsc.modelsAsAService.managementState` to `Managed`.
106104

107-
For example, it is possible to enable Models as Service with the following values,
108-
configuring correctly the `<HOSTNAME>`, `<SECRET_NAME>` and correctly define the `allowedRoutes`:
105+
Gateway and GatewayClass are created automatically when MaaS is Managed
106+
(`components.aigateway.modelsAsAService.gateway.create` / `gatewayClass.create`
107+
default to `auto`, matching the KServe gateway pattern). Set either flag to
108+
`false` to skip chart-managed creation and supply your own resources, or to
109+
`true` to always create them.
110+
111+
When using the chart-managed Gateway, customize the listener for your
112+
environment (hostname, `allowedRoutes`, and TLS / certificate secret as needed).
113+
The default annotations (`security.opendatahub.io/authorino-tls-bootstrap` and
114+
`opendatahub.io/managed`) should be kept unless you intentionally change MaaS
115+
TLS / ownership behavior.
116+
117+
For example:
109118

110119
```yaml
111120
# values.yaml
112121
components:
113-
kserve:
114-
modelsAsService:
115-
gatewayClass:
116-
create: true
122+
aigateway:
123+
dsc:
124+
managementState: Managed
125+
modelsAsAService:
126+
managementState: Managed
127+
modelsAsAService:
117128
gateway:
118-
create: true
119129
spec:
120130
gatewayClassName: maas-gateway-class
121131
listeners:

charts/rhai-on-openshift-chart/api-docs.md

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,16 @@ A Helm chart for installing ODH/RHOAI dependencies and component configurations
88

99
| Key | Type | Default | Description |
1010
|-----|------|---------|-------------|
11+
| components.aigateway | object | `{"dependencies":{},"dsc":{"batchGateway":{"managementState":null},"managementState":null,"modelsAsAService":{"managementState":null}},"modelsAsAService":{"gateway":{"annotations":{"opendatahub.io/managed":"false","security.opendatahub.io/authorino-tls-bootstrap":"true"},"create":"auto","name":"maas-default-gateway","namespace":"openshift-ingress","spec":{"gatewayClassName":"maas-gateway-class","listeners":[{"allowedRoutes":{"namespaces":{"from":"All"}},"name":"https","port":443,"protocol":"HTTPS"}]}},"gatewayClass":{"create":"auto","name":"maas-gateway-class","spec":{"controllerName":"openshift.io/gateway-controller/v1"}}}}` | AI Gateway component (manages MaaS and BatchGateway sub-components) |
12+
| components.aigateway.dsc | object | `{"batchGateway":{"managementState":null},"managementState":null,"modelsAsAService":{"managementState":null}}` | DSC configuration for AI Gateway |
13+
| components.aigateway.dsc.managementState | string | `nil` | Management state for AI Gateway. Null uses profile default. |
14+
| components.aigateway.dsc.modelsAsAService | object | `{"managementState":null}` | Models as a Service sub-component (moved from kserve.modelsAsService in 3.5) |
15+
| components.aigateway.dsc.modelsAsAService.managementState | string | `nil` | Management state for Models as a Service. Null uses profile default. |
16+
| components.aigateway.modelsAsAService | object | `{"gateway":{"annotations":{"opendatahub.io/managed":"false","security.opendatahub.io/authorino-tls-bootstrap":"true"},"create":"auto","name":"maas-default-gateway","namespace":"openshift-ingress","spec":{"gatewayClassName":"maas-gateway-class","listeners":[{"allowedRoutes":{"namespaces":{"from":"All"}},"name":"https","port":443,"protocol":"HTTPS"}]}},"gatewayClass":{"create":"auto","name":"maas-gateway-class","spec":{"controllerName":"openshift.io/gateway-controller/v1"}}}` | Gateway and GatewayClass resources for MaaS (created independently of DSC) |
17+
| components.aigateway.modelsAsAService.gateway | object | `{"annotations":{"opendatahub.io/managed":"false","security.opendatahub.io/authorino-tls-bootstrap":"true"},"create":"auto","name":"maas-default-gateway","namespace":"openshift-ingress","spec":{"gatewayClassName":"maas-gateway-class","listeners":[{"allowedRoutes":{"namespaces":{"from":"All"}},"name":"https","port":443,"protocol":"HTTPS"}]}}` | Gateway configuration for the LLMInferenceService. |
18+
| components.aigateway.modelsAsAService.gateway.create | string | `"auto"` | Create the Gateway: auto (if modelsAsAService is Managed), true (always), false (never) |
19+
| components.aigateway.modelsAsAService.gatewayClass | object | `{"create":"auto","name":"maas-gateway-class","spec":{"controllerName":"openshift.io/gateway-controller/v1"}}` | GatewayClass configuration for the LLMInferenceService. |
20+
| components.aigateway.modelsAsAService.gatewayClass.create | string | `"auto"` | Create the GatewayClass: auto (if modelsAsAService is Managed), true (always), false (never) |
1121
| components.aipipelines | object | `{"dependencies":{},"dsc":{"managementState":null}}` | AI Pipelines component |
1222
| components.aipipelines.dependencies | object | `{}` | Dependencies required by AI Pipelines |
1323
| components.aipipelines.dsc.managementState | string | `nil` | Management state for AI Pipelines. Null uses profile default. |
@@ -18,13 +28,11 @@ A Helm chart for installing ODH/RHOAI dependencies and component configurations
1828
| components.feastoperator.dependencies | object | `{}` | Dependencies required by Feast Operator |
1929
| components.feastoperator.dsc | object | `{"managementState":null}` | DSC configuration for Feast Operator |
2030
| components.feastoperator.dsc.managementState | string | `nil` | Management state for Feast Operator. Null uses profile default. |
21-
| components.kserve | object | `{"dependencies":{"certManager":true,"customMetricsAutoscaler":false,"jobSet":null,"leaderWorkerSet":false,"rhcl":true},"dsc":{"managementState":null,"modelsAsService":{"managementState":null},"nim":{"managementState":null},"rawDeploymentServiceConfig":"Headless","wva":{"managementState":null}},"gateway":{"create":"auto","labels":{"istio.io/rev":"openshift-gateway"},"name":"openshift-ai-inference","namespace":"openshift-ingress","spec":{"gatewayClassName":"openshift-ai-inference","listeners":[{"allowedRoutes":{"namespaces":{"from":"All"}},"name":"https","port":443,"protocol":"HTTPS"}]}},"gatewayClass":{"create":"auto","name":"openshift-ai-inference","spec":{"controllerName":"openshift.io/gateway-controller/v1"}},"modelsAsService":{"gateway":{"annotations":{"opendatahub.io/managed":"false","security.opendatahub.io/authorino-tls-bootstrap":"true"},"create":false,"name":"maas-default-gateway","namespace":"openshift-ingress","spec":{"gatewayClassName":"maas-gateway-class","listeners":[{"allowedRoutes":{"namespaces":{"from":"All"}},"name":"https","port":443,"protocol":"HTTPS"}]}},"gatewayClass":{"create":false,"name":"maas-gateway-class","spec":{"controllerName":"openshift.io/gateway-controller/v1"}}}}` | KServe model serving component |
31+
| components.kserve | object | `{"dependencies":{"certManager":true,"customMetricsAutoscaler":false,"jobSet":null,"leaderWorkerSet":false,"rhcl":true},"dsc":{"managementState":null,"nim":{"managementState":null},"rawDeploymentServiceConfig":"Headless","wva":{"managementState":null}},"gateway":{"create":"auto","labels":{"istio.io/rev":"openshift-gateway"},"name":"openshift-ai-inference","namespace":"openshift-ingress","spec":{"gatewayClassName":"openshift-ai-inference","listeners":[{"allowedRoutes":{"namespaces":{"from":"All"}},"name":"https","port":443,"protocol":"HTTPS"}]}},"gatewayClass":{"create":"auto","name":"openshift-ai-inference","spec":{"controllerName":"openshift.io/gateway-controller/v1"}}}` | KServe model serving component |
2232
| components.kserve.dependencies | object | `{"certManager":true,"customMetricsAutoscaler":false,"jobSet":null,"leaderWorkerSet":false,"rhcl":true}` | Dependencies required by KServe (set to false to disable) |
2333
| components.kserve.dependencies.jobSet | string | `nil` | JobSet dependency. Null uses profile default (true for default, false for rhaii). |
24-
| components.kserve.dsc | object | `{"managementState":null,"modelsAsService":{"managementState":null},"nim":{"managementState":null},"rawDeploymentServiceConfig":"Headless","wva":{"managementState":null}}` | DSC configuration for KServe |
34+
| components.kserve.dsc | object | `{"managementState":null,"nim":{"managementState":null},"rawDeploymentServiceConfig":"Headless","wva":{"managementState":null}}` | DSC configuration for KServe |
2535
| components.kserve.dsc.managementState | string | `nil` | Management state for KServe. Null uses profile default. |
26-
| components.kserve.dsc.modelsAsService | object | `{"managementState":null}` | Models as Service configuration |
27-
| components.kserve.dsc.modelsAsService.managementState | string | `nil` | Management state for Models as Service. Null uses profile default. |
2836
| components.kserve.dsc.nim | object | `{"managementState":null}` | Enables NVIDIA NIM integration |
2937
| components.kserve.dsc.nim.managementState | string | `nil` | Management state for NIM. Null uses profile default. |
3038
| components.kserve.dsc.rawDeploymentServiceConfig | string | `"Headless"` | Raw deployment service config for KServe (Headless or Headed) |
@@ -36,10 +44,6 @@ A Helm chart for installing ODH/RHOAI dependencies and component configurations
3644
| components.kserve.gatewayClass.create | string | `"auto"` | Create the GatewayClass: auto (if KServe is Managed), true (always), false (never) |
3745
| components.kserve.gatewayClass.name | string | `"openshift-ai-inference"` | GatewayClass name |
3846
| components.kserve.gatewayClass.spec | object | `{"controllerName":"openshift.io/gateway-controller/v1"}` | GatewayClass spec |
39-
| components.kserve.modelsAsService.gateway | object | `{"annotations":{"opendatahub.io/managed":"false","security.opendatahub.io/authorino-tls-bootstrap":"true"},"create":false,"name":"maas-default-gateway","namespace":"openshift-ingress","spec":{"gatewayClassName":"maas-gateway-class","listeners":[{"allowedRoutes":{"namespaces":{"from":"All"}},"name":"https","port":443,"protocol":"HTTPS"}]}}` | Gateway configuration for the LLMInferenceService. |
40-
| components.kserve.modelsAsService.gateway.create | bool | `false` | Flag to create the Gateway (auto, true, false). If auto, it will be created if Models as Service is Managed. |
41-
| components.kserve.modelsAsService.gatewayClass | object | `{"create":false,"name":"maas-gateway-class","spec":{"controllerName":"openshift.io/gateway-controller/v1"}}` | Gateway Class configuration for the LLMInferenceService. |
42-
| components.kserve.modelsAsService.gatewayClass.create | bool | `false` | Flag to create the Gateway Class (auto, true, false). If auto, it will be created if Models as Service is Managed. |
4347
| components.kueue | object | `{"dependencies":{"certManager":true,"kueue":true},"dsc":{"defaultClusterQueueName":"default","defaultLocalQueueName":"default","managementState":null}}` | Kueue job queuing component |
4448
| components.kueue.dependencies | object | `{"certManager":true,"kueue":true}` | Dependencies required by Kueue |
4549
| components.kueue.dsc | object | `{"defaultClusterQueueName":"default","defaultLocalQueueName":"default","managementState":null}` | DSC configuration for Kueue |
@@ -98,7 +102,7 @@ A Helm chart for installing ODH/RHOAI dependencies and component configurations
98102
| dependencies.jobSet.config.spec | object | `{"logLevel":"Normal","operatorLogLevel":"Normal"}` | JobSetOperator CR spec (user can add any fields supported by the CR) |
99103
| dependencies.jobSet.dependencies | object | `{"certManager":true}` | Dependencies required by job-set |
100104
| dependencies.jobSet.enabled | string | `"auto"` | Enable job-set: auto (if needed), true (always), false (never) |
101-
| dependencies.kueue | object | `{"config":{"spec":{"config":{"integrations":{"frameworks":["Deployment","Pod","PyTorchJob","RayCluster","RayJob","StatefulSet","TrainJob"]}},"managementState":"Managed"}},"dependencies":{"certManager":true},"enabled":"auto","olm":{"channel":"stable-v1.3","name":"kueue-operator","namespace":"openshift-kueue-operator"}}` | Kueue operator |
105+
| dependencies.kueue | object | `{"config":{"spec":{"config":{"integrations":{"frameworks":["Deployment","Pod","PyTorchJob","RayCluster","RayJob","StatefulSet","TrainJob"]}},"managementState":"Managed"}},"dependencies":{"certManager":true},"enabled":"auto","olm":{"channel":"stable-v1.4","name":"kueue-operator","namespace":"openshift-kueue-operator"}}` | Kueue operator |
102106
| dependencies.kueue.config.spec | object | `{"config":{"integrations":{"frameworks":["Deployment","Pod","PyTorchJob","RayCluster","RayJob","StatefulSet","TrainJob"]}},"managementState":"Managed"}` | Kueue CR spec (user can add any fields) |
103107
| dependencies.kueue.dependencies | object | `{"certManager":true}` | Dependencies required by kueue |
104108
| dependencies.kueue.enabled | string | `"auto"` | Enable kueue: auto (if needed), true (always), false (never) |

charts/rhai-on-openshift-chart/templates/definitions/_operator.tpl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ apiVersion: v1
1616
kind: Namespace
1717
metadata:
1818
name: {{ .namespace }}
19+
annotations:
20+
helm.sh/resource-policy: keep
1921
labels:
2022
{{- include "rhoai-dependencies.labels" .root | nindent 4 }}
2123
{{- end }}

charts/rhai-on-openshift-chart/templates/dependencies/gateway/maas.yaml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
{{- $kserve := .Values.components.kserve | default dict -}}
2-
{{- $kserveDscMerged := include "rhoai-dependencies.componentDSCConfig" (dict "componentName" "kserve" "component" $kserve "root" .) | fromYaml -}}
3-
{{- $maas := $kserve.modelsAsService | default dict -}}
1+
{{- $aigateway := .Values.components.aigateway | default dict -}}
2+
{{- $aigatewayDscMerged := include "rhoai-dependencies.componentDSCConfig" (dict "componentName" "aigateway" "component" $aigateway "root" .) | fromYaml -}}
3+
{{- $maas := $aigateway.modelsAsAService | default dict -}}
44
{{- $gateway := $maas.gateway | default dict -}}
5-
{{- $effectiveKserveState := $kserveDscMerged.managementState | default "Removed" -}}
6-
{{- $effectiveMaaSState := ($kserveDscMerged.modelsAsService | default dict).managementState | default "Removed" -}}
7-
{{- $isMaaSEnabled := and (eq $effectiveMaaSState "Managed") (eq $effectiveKserveState "Managed") -}}
5+
{{- $effectiveAIGatewayState := $aigatewayDscMerged.managementState | default "Removed" -}}
6+
{{- $effectiveMaaSState := ($aigatewayDscMerged.modelsAsAService | default dict).managementState | default "Removed" -}}
7+
{{- $isMaaSEnabled := and (eq $effectiveMaaSState "Managed") (eq $effectiveAIGatewayState "Managed") -}}
88
{{- $gatewayClass := $maas.gatewayClass | default dict -}}
99
{{- if or (eq ($gatewayClass.create | toString) "true") (and $isMaaSEnabled (eq ($gatewayClass.create | toString) "auto")) -}}
1010
apiVersion: gateway.networking.k8s.io/v1

charts/rhai-on-openshift-chart/test/snapshots/all-components-managed.snap.yaml

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ apiVersion: v1
44
kind: Namespace
55
metadata:
66
name: cert-manager-operator
7+
annotations:
8+
helm.sh/resource-policy: keep
79
labels:
810
helm.sh/chart: HELM_CHART_VERSION_REDACTED
911
app.kubernetes.io/managed-by: Helm
@@ -13,6 +15,8 @@ apiVersion: v1
1315
kind: Namespace
1416
metadata:
1517
name: openshift-cluster-observability-operator
18+
annotations:
19+
helm.sh/resource-policy: keep
1620
labels:
1721
helm.sh/chart: HELM_CHART_VERSION_REDACTED
1822
app.kubernetes.io/managed-by: Helm
@@ -22,6 +26,8 @@ apiVersion: v1
2226
kind: Namespace
2327
metadata:
2428
name: openshift-jobset-operator
29+
annotations:
30+
helm.sh/resource-policy: keep
2531
labels:
2632
helm.sh/chart: HELM_CHART_VERSION_REDACTED
2733
app.kubernetes.io/managed-by: Helm
@@ -31,6 +37,8 @@ apiVersion: v1
3137
kind: Namespace
3238
metadata:
3339
name: openshift-kueue-operator
40+
annotations:
41+
helm.sh/resource-policy: keep
3442
labels:
3543
helm.sh/chart: HELM_CHART_VERSION_REDACTED
3644
app.kubernetes.io/managed-by: Helm
@@ -40,6 +48,8 @@ apiVersion: v1
4048
kind: Namespace
4149
metadata:
4250
name: openshift-nfd
51+
annotations:
52+
helm.sh/resource-policy: keep
4353
labels:
4454
helm.sh/chart: HELM_CHART_VERSION_REDACTED
4555
app.kubernetes.io/managed-by: Helm
@@ -49,6 +59,8 @@ apiVersion: v1
4959
kind: Namespace
5060
metadata:
5161
name: nvidia-gpu-operator
62+
annotations:
63+
helm.sh/resource-policy: keep
5264
labels:
5365
helm.sh/chart: HELM_CHART_VERSION_REDACTED
5466
app.kubernetes.io/managed-by: Helm
@@ -58,6 +70,8 @@ apiVersion: v1
5870
kind: Namespace
5971
metadata:
6072
name: openshift-opentelemetry-operator
73+
annotations:
74+
helm.sh/resource-policy: keep
6175
labels:
6276
helm.sh/chart: HELM_CHART_VERSION_REDACTED
6377
app.kubernetes.io/managed-by: Helm
@@ -67,6 +81,8 @@ apiVersion: v1
6781
kind: Namespace
6882
metadata:
6983
name: kuadrant-system
84+
annotations:
85+
helm.sh/resource-policy: keep
7086
labels:
7187
helm.sh/chart: HELM_CHART_VERSION_REDACTED
7288
app.kubernetes.io/managed-by: Helm
@@ -76,6 +92,8 @@ apiVersion: v1
7692
kind: Namespace
7793
metadata:
7894
name: openshift-tempo-operator
95+
annotations:
96+
helm.sh/resource-policy: keep
7997
labels:
8098
helm.sh/chart: HELM_CHART_VERSION_REDACTED
8199
app.kubernetes.io/managed-by: Helm
@@ -85,6 +103,8 @@ apiVersion: v1
85103
kind: Namespace
86104
metadata:
87105
name: opendatahub-operator-system
106+
annotations:
107+
helm.sh/resource-policy: keep
88108
labels:
89109
helm.sh/chart: HELM_CHART_VERSION_REDACTED
90110
app.kubernetes.io/managed-by: Helm
@@ -117,6 +137,12 @@ metadata:
117137
app.kubernetes.io/managed-by: Helm
118138
spec:
119139
components:
140+
aigateway:
141+
batchGateway:
142+
managementState: Removed
143+
managementState: Managed
144+
modelsAsAService:
145+
managementState: Managed
120146
aipipelines:
121147
managementState: Managed
122148
dashboard:
@@ -125,8 +151,6 @@ spec:
125151
managementState: Managed
126152
kserve:
127153
managementState: Managed
128-
modelsAsService:
129-
managementState: Managed
130154
nim:
131155
managementState: Managed
132156
rawDeploymentServiceConfig: Headless
@@ -463,7 +487,7 @@ metadata:
463487
helm.sh/chart: HELM_CHART_VERSION_REDACTED
464488
app.kubernetes.io/managed-by: Helm
465489
spec:
466-
channel: stable-v1.3
490+
channel: stable-v1.4
467491
installPlanApproval: Automatic
468492
name: kueue-operator
469493
source: redhat-operators

charts/rhai-on-openshift-chart/test/snapshots/default.snap.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ apiVersion: v1
44
kind: Namespace
55
metadata:
66
name: opendatahub-operator-system
7+
annotations:
8+
helm.sh/resource-policy: keep
79
labels:
810
helm.sh/chart: HELM_CHART_VERSION_REDACTED
911
app.kubernetes.io/managed-by: Helm

0 commit comments

Comments
 (0)