Skip to main content
Version: dev

Install on OpenShift

The recommended method is the OpenShift installation script. One command installs SPIRE, cert-manager, Keycloak, the operator, the MCP Gateway and the console.

Requirements​

RequirementVersion
oc4.16.0 or later
An OpenShift clusterAdministrator access. The project tested version 4.19. The test pipeline uses version 4.20.
Helm3.18.0 or later, below 4
Remove an existing cert-manager first

Rossoctl installs its own cert-manager. If your cluster already has cert-manager, for example from the Red Hat OpenShift cert-manager Operator, remove it before you run the script.

Install the platform​

git clone https://github.com/rossoctl/rossoctl.git
cd rossoctl

oc login https://api.your-cluster.example.com:6443 -u kubeadmin -p <password>

./scripts/ocp/setup-rossoctl.sh

Run the script from the root directory of the repository, and after you sign in.

The options​

OptionFunction
--rossoctl-repo PATH|URLA local directory or a GitHub address. The default action is a clone of main into ~/.cache/rossoctl.
--realm REALMThe Keycloak realm. The default is rossoctl.
--skip-ovn-patchOmits the OVN routing change. The operator gives a warning at start-up if the change is absent.
--skip-mcp-gatewayOmits the MCP Gateway.
--skip-uiOmits the console and the backend.
--skip-mlflowOmits MLflow.
--operator-image IMG:TAGUses a different operator image.
--dry-runPrints each command. It makes no change.

Open the console​

echo "https://$(kubectl get route rossoctl-ui -n rossoctl-system \
-o jsonpath='{.status.ingress[0].host}')"

If the cluster uses a self-signed certificate, accept the certificate in your browser. The MCP Inspector and its proxy use one host name, so one action covers both.

To get the Keycloak administrator credentials:

kubectl get secret keycloak-initial-admin -n keycloak \
-o go-template='Username: {{.data.username | base64decode}} Password: {{.data.password | base64decode}}{{"\n"}}'

Confirm the installation​

kubectl get daemonsets -n zero-trust-workload-identity-manager
kubectl get deployments -n rossoctl-system

If SPIRE reports 0 in the Current column or the Ready column, see Troubleshooting.

Models​

Ollama cannot run on your computer for an OpenShift cluster. The agent is in a remote cluster and cannot reach your computer. Select one of these three methods.

Method 1: run Ollama in the cluster​

Create a Deployment and a Service in the rossoctl-system namespace:

apiVersion: apps/v1
kind: Deployment
metadata:
name: ollama
labels:
app: ollama
spec:
replicas: 1
selector:
matchLabels:
app: ollama
template:
metadata:
labels:
app: ollama
spec:
containers:
- name: ollama
image: ollama/ollama:latest
ports:
- containerPort: 11434
resources:
requests:
cpu: "2"
memory: "8Gi"
limits:
cpu: "4"
memory: "16Gi"
volumeMounts:
- name: ollama-data
mountPath: /root/.ollama
volumes:
- name: ollama-data
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
name: ollama
spec:
selector:
app: ollama
ports:
- port: 11434
targetPort: 11434

Apply the file with kubectl apply -n rossoctl-system -f ollama.yaml. Then get a model:

kubectl exec -n rossoctl-system deploy/ollama -- ollama pull qwen2.5:3b

Set the LLM_API_BASE variable of each agent to this address:

http://ollama.rossoctl-system.svc.cluster.local:11434/v1

Use this table to select the resources:

ModelMemoryCPUs
3B, for example qwen2.5:3b8 Gi2
8B, for example granite3.3:8b16 Gi4
70B or larger64 Gi or more8 or more, and a GPU

For more than a test, do these three actions. Request nvidia.com/gpu on a node that has a GPU. Replace emptyDir with a PersistentVolumeClaim, so the model remains after a restart. Use node affinity to place the pod on a node that has sufficient memory.

Method 2: use an external Ollama server​

Run OLLAMA_HOST=0.0.0.0 ollama serve on a computer that the cluster can reach. Then set LLM_API_BASE to http://<that-address>:11434/v1.

Method 3: use a cloud provider​

This method is the simplest. See Configure a model.