Deploying to Kubernetes
Kubernetes (and OpenShift) provide a reliable way to run containerized applications at scale. With Kubernetes, you can:
- Orchestrate multiple Rasa Pro services (e.g., Rasa core container, Action Server, Rasa Pro Services) on any cloud or on-prem setup.
- Easily scale up or down by adding more replicas.
- Seamlessly manage rolling updates, networking, and load balancing.
- Simplify the deployment of new versions of your assistant.
If you are unfamiliar with Kubernetes or want a fully managed solution, consider Rasa’s Managed Service.
Deployment Requirements
Before deploying Rasa Pro on Kubernetes, make sure you have:
- A Kubernetes or OpenShift cluster
- Many providers (AWS EKS, Azure AKS, GCP, DigitalOcean) offer managed clusters.
- Ensure you have
kubectl
(for Kubernetes) oroc
(for OpenShift) installed and connected to your cluster.
- Helm CLI (v3.5 or newer)
- You’ll need it to install the Rasa Pro Helm chart.
- A valid Rasa Pro License
- You will pass it as a secret or an environment variable in your deployment.
- (Optional) A Model Storage Bucket
- If you plan to store or mount your trained models from cloud storage (AWS S3, GCP Storage, or Azure Blob), set this up in advance.
- (Optional) A Kafka cluster and Data Warehouse
- Required if you plan to deploy Rasa Pro Services for analytics and logging.
If you do not already have the above, see your cloud provider’s documentation for setting up a Kubernetes or OpenShift cluster. For additional details on Rasa Pro environment variables or advanced configuration, refer to the Reference.
How to Deploy Rasa Pro
1. Kubernetes/OpenShift Cluster
-
Confirm connectivity:
kubectl version
Ensure it shows both client and server versions (for OpenShift, use
oc version
). -
Create a dedicated namespace (recommended):
kubectl create namespace <your-namespace>
kubectl config set-context --current --namespace=<your-namespace>This helps isolate your Rasa Pro deployment from other workloads.
2. Rasa Pro Helm Chart
Rasa Pro provides a Helm chart to simplify deployment. The chart is hosted on a public Artifact Registry.
-
Download the Helm chart:
helm pull oci://europe-west3-docker.pkg.dev/rasa-releases/helm-charts/rasa
This command downloads a file named
rasa-<version>.tgz
. -
Check your Helm version:
helm version --short
You need v3.5 or newer.
3. Deploy Rasa Pro
Below is the minimal workflow for deploying Rasa Pro on Kubernetes or OpenShift using the Helm chart.
a) Prepare Secrets
-
Create a
secrets.yml
file (or name it as you wish) with the Rasa Pro license and any other secret values you may need (authentication tokens, etc.). Base64-encode your secret values.secrets.ymlapiVersion: v1
kind: Secret
metadata:
name: rasa-secrets
type: Opaque
data:
rasaProLicense: <BASE64ENCODED_LICENSE>
authToken: <BASE64ENCODED_VALUE>
jwtSecret: <BASE64ENCODED_VALUE> -
Apply the secrets:
kubectl apply -f secrets.yml
b) Create a values.yml
for your deployment
-
Minimal
values.yml
example:values.yml# Rasa Pro Container
rasa:
image:
repository: "europe-west3-docker.pkg.dev/rasa-releases/rasa-pro/rasa-pro"
tag: "3.8.0-latest"
# Additional Rasa configuration can go here.
# Disable the Rasa Pro Services container if not needed
rasaProServices:
enabled: false -
Deploy with Helm:
helm install \
--namespace <your-namespace> \
--values values.yml \
<release-name> \
rasa-<version>.tgzThis starts a Rasa Pro pod. If you need to update any configuration:
helm upgrade \
--namespace <your-namespace> \
--values values.yml \
<release-name> \
rasa-<version>.tgzTo remove:
helm delete <release-name>
4. Model Storage Bucket
To load a trained model from cloud storage:
- Set up a bucket on AWS S3, Azure Blob, or Google Cloud Storage, and upload your trained model.
- Mount or configure the bucket for your Rasa container.
For example, in Google Cloud:
rasa:
endpoints:
models:
enabled: false
volumes:
- csi:
driver: gcsfuse.csi.storage.gke.io
readOnly: true
volumeAttributes:
bucketName: <YOUR BUCKET NAME>
mountOptions: implicit-dirs,only-dir=<YOUR DIR>
name: rasa-models
volumeMounts:
- name: rasa-models
mountPath: /app/models
readOnly: true
serviceAccount:
create: true
annotations:
iam.gke.io/gcp-service-account: <YOUR SERVICE ACCOUNT EMAIL>
name: "rasa-pro-sa"
podAnnotations:
gke-gcsfuse/volumes: "true"
For other cloud platforms or more advanced configurations, see the Reference.
5. Deploy Action Server
If your assistant uses Custom Actions, you can build and deploy a separate Action Server container alongside your Rasa Pro container.
-
Build your custom action image:
-
Place your Python code in
actions/actions.py
. -
Optionally specify any dependencies in
requirements-actions.txt
. -
Create a
Dockerfile
extending the officialrasa/rasa-sdk
image:FROM rasa/rasa-sdk:latest
WORKDIR /app
# (Optional) for custom dependencies
# COPY actions/requirements-actions.txt ./
# RUN pip install -r requirements-actions.txt
COPY ./actions /app/actions
USER 1001 -
Build & push the image to your container registry (e.g., DockerHub, GCR, ECR).
-
-
Reference your Action Server in
values.yml
:values.ymlrasa:
endpoints:
actionEndpoint:
url: http://action-server:5055/webhook
actionServer:
enabled: true
image:
repository: <my-docker-username>/<my-action-repo>
tag: <custom-tag> -
Upgrade the Helm release:
helm upgrade \
--namespace <your-namespace> \
--values values.yml \
<release-name> \
rasa-<version>.tgz
6. Deploy Rasa Pro Services
Rasa Pro Services is an optional container providing analytics, data collection, and other enterprise features. It must connect to:
- A Kafka cluster (production-ready)
- A data warehouse (e.g., PostgreSQL)
-
Configure Kafka for your Rasa Pro container. In your
values.yml
, make sure:values.ymlrasa:
settings:
endpoints:
eventBroker:
enabled: true
type: kafka
# other settings as needed... -
Enable Rasa Pro Services:
values.ymlrasaProServices:
enabled: true
image:
repository: "europe-west3-docker.pkg.dev/rasa-releases/rasa-pro/rasa-pro-services"
tag: "3.2.0-latest"
environmentVariables:
KAFKA_BROKER_ADDRESS:
value: "<KAFKA-BROKER-URL>"
KAFKA_TOPIC:
value: "rasa-assistant"
RASA_ANALYTICS_DB_URL:
secret:
name: analytics-db-url
key: dburl
# More environment variables if needed... -
Upgrade via Helm:
helm upgrade \
--namespace <your-namespace> \
--values values.yml \
<release-name> \
rasa-<version>.tgz
You can confirm the Rasa Pro Services pod is running and check the /healthcheck
endpoint to verify status.
7. Adding Environment Variables
You can pass extra environment variables to any container by adding them to values.yml
. For example:
rasa:
extraEnvs:
- name: "LOG_LEVEL"
value: "warning"
If you have sensitive data (e.g., passwords), store them in Kubernetes secrets and reference them in values.yml
. A simple example:
rasa:
extraEnvs:
- name: "KAFKA_PASSWORD"
valueFrom:
secretKeyRef:
name: kafka-secrets
key: password
A full list of available environment variables for Rasa Pro, Rasa Pro Services, and the Rasa Action Server can be found in the Environment Variables reference.