Funnel on Kubernetes is in active development and may involve frequent updates 🚧

Quick Start

1. Deploying with Helm ⚡️

helm repo add ohsu https://ohsu-comp-bio.github.io/helm-charts
helm repo update
helm upgrade --install ohsu funnel
(Alternative) Deploying with kubectl ⚙️

1. Create a Service:

Deploy it:

kubectl apply -f funnel-service.yml

2. Create Funnel config files

funnel-server.yaml

funnel-worker.yaml

Get the clusterIP:

export HOSTNAME=$(kubectl get services funnel --output=jsonpath='{.spec.clusterIP}')

sed -i "s|\${HOSTNAME}|${HOSTNAME}|g" funnel-worker.yaml

3. Create a ConfigMap

kubectl create configmap funnel-config --from-file=funnel-server.yaml --from-file=funnel-worker.yaml

4. Create a Service Account for Funnel

Define a Role and RoleBinding:

role.yml

role_binding.yml

kubectl create serviceaccount funnel-sa --namespace default
kubectl apply -f role.yml
kubectl apply -f role_binding.yml

5. Create a Persistent Volume Claim

funnel-storage-pvc.yml

kubectl apply -f funnel-storage-pvc.yml

6. Create a Deployment

funnel-deployment.yml

kubectl apply -f funnel-deployment.yml

2. Proxy the Service for local testing

kubectl port-forward service/funnel 8000:8000

Now the funnel server can be accessed as if it were running locally. This can be verified by listing all tasks, which will return an empty JSON list:

funnel task list
# {}

A task can then be submitted following the standard workflow:

funnel examples hello-world > hello-world.json

funnel task create hello-world.json
# <Task ID>

Storage Architecture

Additional Resources 📚