Union.ai is a managed platform for Flyte, an open-source workflow orchestrator for data and ML pipelines. Union.ai provides a hosted control plane while the data plane runs on your infrastructure, keeping data and compute within your CoreWeave Kubernetes Service (CKS) cluster. This guide shows you how to deploy a Union.ai self-managed data plane on CKS with CoreWeave AI Object Storage as the storage backend. After completing this guide, you can run Flyte workflows on CoreWeave GPU and CPU instances managed through the Union.ai control plane. This guide is for operators who administer a CKS cluster and a Union.ai organization.Documentation Index
Fetch the complete documentation index at: https://docs.coreweave.com/llms.txt
Use this file to discover all available pages before exploring further.
Prerequisites
Before you begin, confirm you’ve met all of the following prerequisites:- A CKS cluster with
kubectlaccess configured. - The
helmCLI installed. For installation instructions, see Install Helm. - The
uctlCLI installed. - The
flyteCLI installed. - A Union.ai organization. Contact Union.ai to create one if you don’t have one.
Configure CoreWeave AI Object Storage
Union.ai uses AI Object Storage (S3-compatible) to store workflow data and artifacts. To configure storage, complete the following steps:Create a bucket
Create a bucket in the CoreWeave Cloud Console. Navigate to Storage > Object Storage and create a bucket in your desired Availability Zone. For detailed instructions, see Create a bucket.Generate access credentials
Navigate to Administration > Object Storage Access Keys in the Cloud Console and create an access key pair. Record the Access Key ID and Secret Key for use in later steps. You need this key pair so the Helm values and workload environment variables can authenticate to your bucket. For detailed instructions, see Create access keys.Create an access policy
Create an organization access policy that grants your access key permissions on the bucket. Navigate to Administration > Policies > Object Storage Access in the Cloud Console and create a policy with the following JSON. Replace[BUCKET-NAME] with the name of your bucket.
Configure the Union CLI
Update youructl configuration to point to your Union.ai organization endpoint.
Edit the ~/.union/config.yaml file:
[ORG-NAME] with your Union.ai organization name.
To verify connectivity, run:
uctl uses the correct organization endpoint.
Provision data plane resources
Set yourKUBECONFIG to the CKS cluster where you want to deploy the data plane:
Create the Helm values file
AI Object Storage requires virtual-hosted style S3 URLs. The default Union.ai configuration uses path-style URLs, which CoreWeave doesn’t support. Update the generated Helm values file with the following storage configuration. Replace all placeholder values with your actual credentials and settings.The
uctl selfserve provision-dataplane-resources command in the previous step generates the [CLIENT-ID] and [CLIENT-SECRET] values. Use the values from that command’s output.| Setting | Value | Purpose |
|---|---|---|
storage.custom.stow.config.disable_force_path_style | true | Enables virtual-hosted style S3 URLs. |
storage.custom.stow.config.endpoint | https://cwobject.com | AI Object Storage endpoint for the control plane. |
config.k8s.plugins.k8s.default-env-vars.FLYTE_AWS_ENDPOINT | https://[BUCKET-NAME].cwobject.com | Bucket-specific endpoint injected into task pods. |
executor.extraEnvVars.FLYTE_AWS_S3_ADDRESSING_STYLE | virtual | Configures the executor to use virtual-hosted style addressing. |
Deploy the Union data plane
To deploy the data plane, complete the following steps:-
Clone the Union Helm charts repository and check out the latest stable release:
Replace
[RELEASE-TAG]with the latest stable release tag (for example,dataplane-2026.3.3). Check the Union Helm charts repository for available tags.After checkout, you have the CRD and dataplane charts for the release you install. -
Install the Custom Resource Definitions (CRDs):
-
Build the chart dependencies and install the data plane:
Replace
[PATH-TO-VALUES-FILE]with the path to the Helm values file you customized in the previous section. -
Verify the deployment:
When the deployment succeeds, all pods show a
Runningstatus, includingunion-operator-proxy,union-operator-buildkit,flytepropeller, andexecutor.
Register the cluster
After deploying the data plane, register the cluster with the Union.ai control plane.-
Clone the Union cloud repository and create a branch for your organization:
Replace
[CLOUD-REPO-URL]with your organization’s cloud repository URL. Replace[ORG-NAME]with your organization name. -
Generate tenant configurations:
-
Commit and push the generated configurations:
- Trigger a Buildkite build for your organization’s staging pipeline. In Buildkite, start new build (not Rebuild) for the pipeline. That starts a pipeline run that picks up the branch you pushed.
-
Verify cluster registration:
The output is similar to the following:
Create the eager API key
To create an API key required for Flyte v2 task execution, run:If you receive a
PermissionDenied error, contact Union.ai support to have the permission enabled for your organization.Test a workflow
To run a sample workflow, complete the following steps:-
Create a Flyte CLI configuration file at the path
.flyte/config.yamlin your project directory: Replace[ORG-NAME]and[PROJECT-NAME]with your organization and project identifiers. -
Run a sample workflow:
If the remote image builder isn’t enabled for your organization, use the
--imageflag with a pre-built container image as in the precedingflyte runexample. -
Check the run status:
Replace
[RUN-NAME]with the workflow run identifier.Look forACTION_PHASE_SUCCEEDEDin the output.
ACTION_PHASE_SUCCEEDED appears in the output, this sample workflow completed successfully on your deployment.
Troubleshooting
| Symptom | Cause | Fix | |
|---|---|---|---|
PathStyleRequestNotAllowed 400 | The control plane generates path-style S3 URLs. | Set storage.custom.stow.config.disable_force_path_style to "true" in the Helm values file. | |
403 Forbidden on S3 operations | No access policy for the storage key. | Create an object storage access policy in the Cloud Console. | |
Task pods reach s3.us-east-1.amazonaws.com | Task pods are missing the CoreWeave endpoint. | Add FLYTE_AWS_ENDPOINT to config.k8s.plugins.k8s.default-env-vars with the value https://[BUCKET-NAME].cwobject.com. | |
| ”All enabled clusters are unhealthy” | The control plane can’t reach the data plane. | Verify the tunnel service is running: `kubectl get pods -n union | grep proxy`. |
| ”Remote image builder is not enabled” | The remote builder isn’t enabled on the control plane. | Contact Union.ai to enable the remote builder, or use --image with a pre-built image. | |
invalid keys: collectbillableresourceusage | Chart version mismatch with the operator. | Use matching chart and operator image versions. | |
| Helm “another operation in progress” | An interrupted Helm upgrade. | Run helm rollback unionai-dataplane [LAST-GOOD-REVISION] -n union. | |
| ”Provided Tunnel token is not valid” | The control plane isn’t configured for this cluster. | Complete cluster registration first. |