What this deploys
The reference architecture uses a single Terraform root with separate modules for each resource. The two-phase apply exists because node pools and DFS volumes are Kubernetes manifests, which need a running cluster and kubeconfig before Terraform can create them.Phase 1: Networking and cluster
| Resource | Description |
|---|---|
| VPC | CoreWeave VPC with host prefixes and named CIDR prefixes for CKS (pod, service, internal LB). |
| CKS cluster | CKS cluster in the VPC. Supports OIDC configuration for external IdPs. |
Phase 2: Node pools and storage
| Resource | Description |
|---|---|
| NodePools | One or more CKS node pools (Kubernetes manifest). Requires kubeconfig from Phase 1. |
| DFS PVCs | One or more Distributed File Storage PVCs (shared-vast, ReadWriteMany). Requires kubeconfig from Phase 1. |
Optional: Object Storage add-on
Object Storage is independent of the two-phase apply, and you can add it at any point.| Resource | Description |
|---|---|
| Object Storage org access policy | Organization-wide access policy for Object Storage. At least one must exist before creating buckets. |
| Object Storage bucket | Object Storage (S3-compatible) bucket. |
| Object Storage bucket policy | Per-bucket S3-compatible access policy for fine-grained control. |
Phase 1: Deploy core infrastructure
Create a VPC and CKS cluster, then download kubeconfig.Deploy core infrastructure
Phase 2: Add node pools and storage
Add node pools, DFS volumes, and optionally Object Storage.Add node pools and storage
Prerequisites
Before you begin, ensure you have the required tools and Identity and Access Management (IAM) roles described in the following sections.Tools
- Terraform >= 1.2.
- A CoreWeave account with a CoreWeave API token (create one in Console).
kubectl(required for Phase 2 and ongoing cluster interaction).
IAM roles
Your CoreWeave user or API token must have the appropriate IAM roles for each phase. The following table lists the minimum required roles.| Phase | Required IAM role |
|---|---|
| Phase 1 (VPC and CKS cluster) | CKS Admin to create, update, and delete clusters and VPC resources. |
| Phase 2 (NodePool and DFS) | CKS Admin and kubeconfig for the cluster. |
| Object Storage add-on (optional) | Object Storage Admin to create or delete buckets and manage organization access policies. |
| OIDC WIF setup (optional) | IAM Admin to configure identity integrations, including Workload Identity Federation. |
If you’re using legacy group role assignments, users in the
admin or write groups already have the CKS Admin and Object Storage Admin roles.Repository structure
Review the repository layout before you start to locate the files you edit during each phase. The reference architecture repository organizes all resources as modules. The rootmain.tf wires them together.
- Don’t commit
terraform.tfvars. Create it fromterraform.tfvars.example. - Don’t commit state files (
*.tfstate). Use a remote backend for production environments.
Outputs
After apply, Terraform outputs include:| Output | Source | Description |
|---|---|---|
vpc_id | module.network | Created VPC ID. |
cks_cluster_id | module.cks | CKS cluster ID. |
cks_cluster_name | module.cks | CKS cluster name. |
cks_api_server_endpoint | module.cks | Kubernetes API server endpoint. |
cks_status | module.cks | Current cluster status. |
cks_service_account_oidc_issuer_url | module.cks | OIDC issuer URL for CKS service account tokens (use for WIF). |
nodepools | module.nodepool | Map of created NodePool names. |
dfs_pvcs | module.dfs | Map of created DFS PVCs. |
| Output | Source | Description |
|---|---|---|
object_storage_bucket_name | module.object_storage | Bucket name, if created. |
object_storage_org_access_policy_names | module.object_storage | Map of created org access policy names. |
object_storage_bucket_policy_json | module.object_storage | Bucket policy JSON, if applied. |