Deploying at scale

REANA can be easily deployed on large Kubernetes clusters using Helm. Useful for production instances.

Pre-requisites

  • A Kubernetes cluster with version between v1.19 and v1.25 (included)
  • Helm v3
  • A shared file system to host all analyses' workspaces when running in a multinode deployment setup. See Configuring storage volumes.

Note

If you do not have any particular distributed file system in your Kubernetes cluster, you can easily deploy an NFS network file system following our documentation.

Deploy

1. Add REANA chart repository:

$ helm repo add reanahub https://reanahub.github.io/reana
"reanahub" has been added to your repositories
$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "reanahub" chart repository
...Successfully got an update from the "cern" chart repository
...Successfully got an update from the "stable" chart repository
Update Complete. ⎈ Happy Helming!⎈

2. Deploy REANA (note that you can pass any of the supported values):

$ helm install --devel reana reanahub/reana --wait
NAME: reana
LAST DEPLOYED: Wed Mar 18 10:27:06 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Thanks for flying REANA 🚀

Warning

Note that the above helm install command used reana as the Helm release name. You can choose any other name provided that it is less than 13 characters long. (This is due to current limitation on the length of generated pod names.)

Note

Note that you can deploy REANA in different namespaces by passing --namespace to helm install. Remember to pass --create-namespace if the namespace you want to use does not exist yet. For more information on how to work with namespaces see the official documentation.

Advanced deployment scenarios

High availability

REANA infrastructure services are critical for the platform to properly work, therefore it is a good technique to deploy them in dedicated nodes different from ones used to run user workflows and user jobs. To achieve this:

1. Create a multi-node Kubernetes cluster and check your nodes:

$ kubectl get nodes
NAME    STATUS   ROLES    AGE   VERSION
node1   Ready    master   97m   v1.18.2
node2   Ready    <none>   97m   v1.18.2
node3   Ready    <none>   97m   v1.18.2
node4   Ready    <none>   97m   v1.18.2

2. Label your nodes according to the responsibility they should take; reana.io/system: infrastructure for infrastructure nodes, reana.io/system: runtimebatch for runtime batch workflow nodes and reana.io/system: runtimejobs for runtime job nodes (additionally you can use reana.io/system: runtimesessions to split interactive sessions too). For example:

$ kubectl label nodes node2 reana.io/system=infrastructure
$ kubectl label nodes node3 reana.io/system=runtimebatch
$ kubectl label nodes node4 reana.io/system=runtimejobs

3. Configure REANA's values.yaml to specify the labels for runtime and infrastructure nodes:

+node_label_infrastructure: reana.io/system=infrastructure
+node_label_runtimebatch: reana.io/system=runtimebatch
+node_label_runtimejobs: reana.io/system=runtimejobs

4. Deploy REANA.