Brev Scripted Deployment Quickstart
This guide shows the shortest path for using the Brev helper scripts to deploy one FLARE server and two FLARE clients on three existing Brev single-node Kubernetes environments.
For the full technical workflow, including project.yml details, PVC staging,
Helm chart behavior, and troubleshooting, see Brev Kubernetes Helm Deployment.
Scripts:
What the Scripts Do
prepare_brev_startup_kits.sh runs on your local workstation. It:
creates a simple three-participant
project.ymlunless you provide one;runs
nvflare provision;runs
nvflare deploy prepareforserver,site-1, andsite-2;packages the prepared participant folders;
copies the matching archive and launch script to each Brev environment with
brev copy.
launch_brev_nvflare.sh runs inside each Brev environment. It:
extracts the copied participant archive;
verifies that
nvflare deploy prepareconfigured the Kubernetes launcher (the expectedServerK8sJobLauncherorClientK8sJobLaunchercomponent with the samenamespaceyou launch into);reads
persistence.workspace.claimNamefrom the prepared chart and rejects any conflicting launch-timeWORKSPACE_PVC;creates the
nvflarenamespace and the workspace/data PVCs;copies the prepared
startup/andlocal/directories into the workspace PVC root so the chart finds them atworkspace_mount_path;runs a DNS lookup for
SERVER_HOSTfrom a temporary in-namespace pod for client participants;installs or upgrades the generated Helm chart;
waits for the participant deployment and prints recent pod logs.
Expected Results
After the prepare script finishes, each Brev environment should contain:
/home/ubuntu/nvflare-server.tgz,/home/ubuntu/nvflare-site-1.tgz, or/home/ubuntu/nvflare-site-2.tgz;/home/ubuntu/launch_brev_nvflare.sh.
After the launch script finishes in each environment:
kubectl -n nvflare get pvcshould show the PVCs asBound;helm list -n nvflareshould show one release for that participant;kubectl -n nvflare get podsshould show the participant pod running;the
site-1andsite-2logs should show that they are connecting to the server endpoint.
What You Need
Before running the scripts, have:
three running Brev Kubernetes environments for
server,site-1, andsite-2;a DNS name or IP for the server that both sites can reach;
an NVFlare container image that all three environments can pull;
the Brev CLI installed and logged in on your local workstation.
Prepare and Copy Kits
From your local NVFlare checkout, set the server host and image, then run the prepare script:
export SERVER_HOST=server1.example.com
export IMAGE=registry.example.com/nvflare:dev
bash docs/user_guide/admin_guide/deployment/brev_scripts/prepare_brev_startup_kits.sh
By default, the script copies kits to Brev environments named server,
site-1, and site-2.
If your Brev environment names are different, set them before running:
export SERVER_BREV=nvflare-server-k8s
export SITE_1_BREV=nvflare-site-1-k8s
export SITE_2_BREV=nvflare-site-2-k8s
bash docs/user_guide/admin_guide/deployment/brev_scripts/prepare_brev_startup_kits.sh
Or let the script prompt for the Brev environment names:
bash docs/user_guide/admin_guide/deployment/brev_scripts/prepare_brev_startup_kits.sh \
--prompt-brev-names
Expose the Server Port
In the Brev console, open the server environment’s Access page and expose TCP
port 8002. Make sure SERVER_HOST resolves to that exposed server host.
Do not include :8002 in SERVER_HOST.
Launch Each Environment
Run the launch script inside each Brev environment.
Server:
brev shell "${SERVER_BREV:-server}"
IMAGE="$IMAGE" bash /home/ubuntu/launch_brev_nvflare.sh server
Site 1:
brev shell "${SITE_1_BREV:-site-1}"
IMAGE="$IMAGE" SERVER_HOST="$SERVER_HOST" bash /home/ubuntu/launch_brev_nvflare.sh site-1
Site 2:
brev shell "${SITE_2_BREV:-site-2}"
IMAGE="$IMAGE" SERVER_HOST="$SERVER_HOST" bash /home/ubuntu/launch_brev_nvflare.sh site-2
The launch script verifies the prepared Kubernetes launcher config and the
prepared chart’s workspace PVC name, creates the namespace and PVCs, stages
startup/ and local/ into the workspace PVC root so the chart finds them
at workspace_mount_path, installs the Helm chart, and prints recent pod
logs.
Useful Overrides
Common optional environment variables:
NAMESPACE, PARENT_PORT, WORKSPACE_PVC, and
WORKSPACE_MOUNT_PATH are deploy-prepare inputs that are embedded into the
prepared resources and helm_chart/. Set them when running
prepare_brev_startup_kits.sh. Do not change them only at launch time; rerun
the prepare script first so the prepared kit matches the launch environment.
NAMESPACE: Kubernetes namespace, defaultnvflare. Use the same value when running both scripts. The launch script reads the preparedresources.json.defaultand refuses to launch if the launch-timeNAMESPACEdisagrees with the prepared launcher.DATA_PVC: optional job data PVC name, defaultnvfldata. Used only at launch time to create an additional PVC for study data.CLEAN_WORKSPACE_PVC=true: clear old workspace PVC contents before staging a new kit.
Prepare-only overrides:
WORKSPACE_PVC: workspace PVC name, defaultnvflws. The prepare script writes this into the generated Helm chart’spersistence.workspace.claimName. The launch script reads that value from the prepared chart and uses it for PVC creation and staging. If you also setWORKSPACE_PVCat launch and it disagrees with the prepared chart, the launch script fails so the chart, PVC, and staged content stay consistent.PARENT_PORT: in-cluster parent service port written bynvflare deploy prepare, default8102. The launch script reads the prepared Helm chart and launcher config; it does not read this variable.WORKSPACE_MOUNT_PATH: parent and job pod workspace path written bynvflare deploy prepare, default/var/tmp/nvflare/workspace. The launch script verifies the prepared value fromresources.json.default; it does not read this variable.
Run either script with --help for the current options.