Pick a Path for Your Hardware
Prerequisites
- The
createandusepermissions on locations. For the Linux servers path, alsocreateandclusterAdminon Managed Kubernetes clusters. - The
cplnCLI andkubectl. - Capacity for the BYOK components, which run on your nodes beside your workloads: at least 2 nodes with 2 CPUs and 8 GB of memory each, as listed with the rest of the BYOK requirements.
- For an existing cluster: at least one node labeled
cpln.io/nodeType=core, a load balancer controller that assignsLoadBalancerservices an address, a default StorageClass, and no service mesh. - For Linux servers: each server meets the Generic provider server requirements.
- Outbound internet access from every node. For an air-gapped site, contact support@controlplane.com.
Create the Location
- Console
- CLI
- Terraform
- Pulumi
1
Open the location form
Click
Locations in the left menu, then click New.2
Create the location
Enter a name such as
my-hardware and click Create. The location page opens.Connect Your Hardware
- Existing Cluster
- Linux Servers
1
Label the core nodes
BYOK runs its critical system pods on nodes labeled
cpln.io/nodeType=core. Label at least one:2
Generate the install command
In the Console, open the location and choose The first line of the output is the deadline:The link downloads the location’s install token, so treat the command as a secret.
Actions > Install. The Install Location dialog shows the command and the time left to apply it under Expires In. With the CLI:3
Apply the command to the cluster
With
kubectl pointed at the cluster, run the kubectl apply command before its deadline. It creates the cpln-byok-agent deployment in the kube-system namespace.4
Wait for the agent
controlplane, istio-system, and monitoring. Rerun kubectl get pods -A until every pod reports Running or Completed.Deploy a Workload to the Location
Create a GVC that spans the location, then a workload in it:Verify
my-hardware row reports ready=true once the workload runs on your hardware. Its endpoints resolve to the address your load balancer controller gave the BYOK ingress gateway, so they answer from any network that can reach that address.
Troubleshoot
error: unable to read URL "https://byok-api.cpln.io/install/download/.../byok-agent.k8s.yaml", server reported 404 Not Found, status code=404
error: unable to read URL "https://byok-api.cpln.io/install/download/.../byok-agent.k8s.yaml", server reported 404 Not Found, status code=404
The install command’s link expired before
kubectl ran it. Generate a new command and apply it before the deadline on its first line.0/2 nodes are available: 2 Insufficient memory
0/2 nodes are available: 2 Insufficient memory
BYOK pods stay
Pending, and kubectl describe pod reports this event. The BYOK components alone fill nodes smaller than the BYOK requirements. Add nodes or memory until every node meets them.BYOK PersistentVolumeClaims stay Pending
BYOK PersistentVolumeClaims stay Pending
The BYOK components claim persistent volumes from the cluster’s default StorageClass, and the cluster has none. Install a storage provisioner or mark an existing StorageClass as the default.
The ingress gateway LoadBalancer service has no external address
The ingress gateway LoadBalancer service has no external address
The
LoadBalancer services in the istio-system namespace stay <pending>, and workloads never report ready. On an existing cluster, install a load balancer controller. On Linux servers with only private addresses, label the nodes with cpln.io/allowPrivateIPs=true as described in Ingress IPs.When to Use Something Else
- Workloads stay in the cloud and only need to reach something in your network, such as a database: use a wormhole agent or native networking.
- You want to declare Control Plane resources from
kubectlor Argo CD: use the Kubernetes operator. - A single server, or nodes below the BYOK requirements: the BYOK components need that capacity before any workload runs.
Next Steps
CPLN BYOK
Settings, cloud provider recommendations, and the uninstall procedure.
Generic Provider
Networking, ingress IPs, and the full server requirements.