Configuration
Everything is configured through the OpenStackLightspeed custom
resource (lightspeed.openstack.org/v1beta1). This page documents every
field in its spec.
Core fields
Field |
Required |
Description |
|---|---|---|
|
Yes |
URL of the LLM endpoint (e.g. |
|
Yes |
Provider type. See Supported LLM providers (llmEndpointType). |
|
Yes |
Model name to use at |
|
Yes |
|
|
No |
|
|
No |
Max response tokens. Minimum |
|
No |
Required by some providers (e.g. WatsonX). |
|
No |
Required by some providers (e.g. Azure OpenAI). |
|
No |
Required by some providers (e.g. Azure OpenAI). |
|
No |
User feedback collection. Defaults to |
|
No |
Conversation transcript collection. Defaults to |
Supported LLM providers (llmEndpointType)
openai— OpenAI-compatible endpoints (Ollama, vLLM, etc.)azure_openai— Azure OpenAI (needsllmDeploymentName,llmAPIVersion)watsonx— IBM watsonx.ai (needsllmProjectID)rhoai_vllm— vLLM via Red Hat OpenShift AIrhelai_vllm— vLLM via RHEL AIgemini— Google Gemini
Tip
This list grows over time. Check
oc explain openstacklightspeed.spec.llmEndpointType on your cluster
for the current, authoritative list.
Logging (logging)
Field |
Default |
Description |
|---|---|---|
|
|
llama-stack/OGX container. Standard level, or
|
|
|
lightspeed-service-api container. |
|
|
Feedback/transcript exporter sidecar. Same values as above. |
|
|
PostgreSQL container. |
Persistent storage (database)
PostgreSQL always gets a PersistentVolumeClaim — this field only overrides its size/class, it doesn’t control whether one exists:
spec:
database:
size: "5Gi" # default: 1Gi
class: "my-storage-class" # default: cluster's default StorageClass
Container resources (resources)
Every container has a default request/limit. Setting one replaces its default entirely:
spec:
resources:
llamaStack:
requests: {cpu: "500m", memory: "2Gi"}
limits: {cpu: "2", memory: "8Gi"}
lightspeedService:
requests: {cpu: "250m", memory: "512Mi"}
limits: {cpu: "1", memory: "2Gi"}
postgres:
requests: {cpu: "30m", memory: "300Mi"}
limits: {cpu: "500m", memory: "2Gi"}
okp:
requests: {cpu: "500m", memory: "2Gi"}
limits: {cpu: "2", memory: "4Gi"}
consolePlugin:
requests: {cpu: "50m", memory: "64Mi"}
limits: {cpu: "200m", memory: "256Mi"}
mcp:
requests: {cpu: "50m", memory: "64Mi"}
limits: {memory: "200Mi"}
Offline Knowledge Portal (okp)
Important
OKP is deployed on every install — spec.okp configures it, it
doesn’t gate whether it’s deployed. Pulling its image needs the same
free registry.redhat.io account as Access to registry.redhat.io images.
spec:
okp: {} # no access key: browse individual pages, full-text search doesn't work
spec:
okp:
accessKey: okp-access-key-secret # Secret key: "access_key"
No ``accessKey`` (default) — you can navigate directly to and read individual documentation and product lifecycle pages. The full-text search index, Solutions, and Articles are encrypted and require a key, so keyword search across the corpus doesn’t work. What upstream users run on.
With ``accessKey`` — unlocks that search index plus the encrypted knowledgebase. Needs an active Red Hat Satellite subscription (get one) — a bonus if you already have one, not something every user needs.
By default, RAG grounding is OKP-only — the bundled community
documentation is disabled unless you set dev.okpRagOnly: false (below).
Quota enforcement (quotas)
Configure one or more limiters to enable token quota enforcement. The
operator uses its managed PostgreSQL instance for quota storage. Omitting
quotas or leaving limiters empty disables enforcement.
spec:
quotas:
limiters:
- name: per-user-hourly
type: userLimiter
initialQuota: 1000
quotaIncrease: 1000
period: "1 hour"
- name: cluster-daily
type: clusterLimiter
initialQuota: 100000
quotaIncrease: 100000
period: "1 day"
scheduler:
period: 10
enableTokenHistory: true
Each entry in limiters requires these fields:
Field |
Description |
|---|---|
|
A human-readable limiter name. |
|
|
|
Number of tokens granted when the limiter resets. Must be zero or greater. |
|
Number of tokens added by the scheduler at each quota interval. Must be zero or greater. |
|
Interval that controls when the limiter resets or increases, such as
|
scheduler is optional and configures the background process that checks
limiters for reset or increase and reconnects to the database after a
connection failure:
period: check interval in seconds. Default:5.databaseReconnectionCount: number of database reconnection attempts. Default:10.databaseReconnectionDelay: delay in seconds between reconnection attempts. Default:1.
Set enableTokenHistory: true to record per-user, model, and provider token
usage for auditing. It does not affect enforcement and defaults to false.
Developer / experimental options (dev)
Warning
Not part of the stable API — may change without notice.
spec:
dev:
featureFlags:
- rhoso_mcps # enables the read-only MCP introspection sidecar
okpChunkFilterQuery: "product:(*openstack* OR *openshift*)" # example override
okpRagOnly: false # include bundled community docs too, not just OKP
rhosMCPConfig: |
debug: true
workers: 4
okpChunkFilterQueryandokpRagOnlytake effect immediately, with nofeatureFlagsentry needed — they’re independent ofrhoso_mcps. If unset,okpChunkFilterQueryauto-detects your OpenShift/RHOSO versions instead of using the literal example above.rhoso_mcps— the one flag that does need to be set. Deploys the MCP introspection sidecar, which is read-only by default. See Available Features.rhosMCPConfigis deep-merged on top of the operator’s own defaults — it can override anything the default config sets, including theallow_writeflags that keep introspection read-only. Only set this if you understand exactly what you’re overriding.