Skip to main content
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. The procedures cover configuring object storage, provisioning and deploying the data plane, registering the cluster with the control plane, and testing a sample workflow.

Prerequisites

Before you begin, confirm you’ve met all of the following prerequisites:
  • A CKS cluster with kubectl access configured.
  • The helm CLI installed. For installation instructions, see Install Helm.
  • The uctl CLI installed.
  • The flyte CLI 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 chosen 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.
For detailed instructions on creating and managing policies, see Organization access policies.
Without an access policy, API operations return 403 Forbidden errors even with valid access keys.
You now have a bucket, credentials, and a policy that allow the data plane to use AI Object Storage.

Configure the Union CLI

Update your uctl configuration to point to your Union.ai organization endpoint. Edit the ~/.union/config.yaml file:
Replace [ORG-NAME] with your Union.ai organization name. To verify connectivity, run:
A successful response shows that uctl uses the correct organization endpoint.

Provision data plane resources

Set your KUBECONFIG to the CKS cluster where you want to deploy the data plane:
To provision the data plane resources, run:
This command generates a Helm values file with default configuration. Don’t use the generated file as-is. You must update the storage configuration for AI Object Storage as described in Create the Helm values file. You now have a generated Helm values file to customize.

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 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.
You need these settings for AI Object Storage compatibility. Together, these values align the chart with AI Object Storage.

Deploy the Union data plane

To deploy the data plane, complete the following steps:
  1. 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.
  2. Install the Custom Resource Definitions (CRDs):
  3. 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.
  4. Verify the deployment:
    When the deployment succeeds, all Pods show a Running status, including union-operator-proxy, union-operator-buildkit, flytepropeller, and executor.
At this point the Union.ai data plane runs in your cluster.

Register the cluster

After deploying the data plane, register the cluster with the Union.ai control plane so that the control plane can schedule workflows on the cluster. To register the cluster, complete the following steps:
  1. 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.
  2. Generate tenant configurations:
  3. Commit and push the generated configurations:
  4. 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.
  5. Verify cluster registration:
    The output is similar to the following:
When your cluster appears in this output, you’ve registered the CKS cluster with the Union.ai control plane.

Create the eager API key

Flyte v2 task execution requires an eager API key. To create the key, run:
If you receive a PermissionDenied error, contact Union.ai support to enable the permission for your organization.

Test a workflow

Run a sample workflow to confirm that the data plane, control plane, and storage backend work together end to end. To run a sample workflow, complete the following steps:
  1. Create a Flyte CLI configuration file at the path .flyte/config.yaml in your project directory: Replace [ORG-NAME] and [PROJECT-NAME] with your organization and project identifiers.
  2. Run a sample workflow:
    If the remote image builder isn’t enabled for your organization, use the --image flag with a pre-built container image as in the flyte run example.
  3. Check the run status: Replace [RUN-NAME] with the workflow run identifier.
    Look for ACTION_PHASE_SUCCEEDED in the output.
When ACTION_PHASE_SUCCEEDED appears in the output, the sample workflow has completed successfully on your deployment.

Troubleshooting

Additional resources

For more information, see the following resources:
Last modified on June 10, 2026