You need:

  • The exc CLI installed and authenticated.
  • kubectl on your $PATH.
  • A registered SSH key (the cluster VMs use it).
  • A reasonable vCPU quota (exc quota to check).

1. Create the cluster

exc k8s cluster create \
  --control_plane_image_id 1 \
  --control_plane_instance_type m1a.large \
  --subnet_id 1 \
  --ssh_pubkey my-key \
  --root_volume_size_gib 40

This provisions the control-plane VM (visible in exc compute list). The command returns the cluster ID and prints (or writes, with -o) the admin kubeconfig.

Capture the cluster ID for later:

CLUSTER_ID=<id-from-create>

2. Use the kubeconfig

If you didn’t write it to disk at create time, fetch it now:

exc k8s cluster kubeconfig get --cluster_id $CLUSTER_ID -o ~/.kube/excloud-dev.yaml
export KUBECONFIG=~/.kube/excloud-dev.yaml
kubectl get nodes

Or merge it into your default ~/.kube/config:

exc k8s cluster kubeconfig merge --cluster_id $CLUSTER_ID

The kubeconfig contains an admin client certificate. Treat it like a credential — it bypasses cluster RBAC.

At this point the only “node” is the control plane and it’s tainted away from regular pods. You need workers.

3. Add a worker

exc k8s cluster worker create \
  --cluster_id $CLUSTER_ID \
  --worker_name worker-1 \
  --worker_image_id 1 \
  --worker_instance_type m1a.xlarge \
  --subnet_id 1 \
  --ssh_pubkey my-key

The worker is a regular VM that auto-joins the cluster. Add as many as you want; each becomes a Node that can run pods.

Verify:

kubectl get nodes
NAME                STATUS   ROLES           AGE     VERSION
cluster-7-cp-1      Ready    control-plane   3m12s   v1.30.2
worker-1            Ready    <none>          45s     v1.30.2

4. Run a pod

kubectl run hello --image=nginx:alpine --port=80
kubectl expose pod hello --port 80
kubectl port-forward svc/hello 8080:80

In another terminal:

curl localhost:8080

5. Clean up

exc k8s cluster worker list   --cluster_id $CLUSTER_ID
exc k8s cluster worker delete --cluster_id $CLUSTER_ID --worker_id <id>
exc k8s cluster delete        --cluster_id $CLUSTER_ID

Cluster deletion terminates the control-plane VM. Delete any remaining workers first.

Next

  • Workload Identity — let your pods authenticate to other Excloud (or external) services without baked-in secrets.
  • Install an ingress controller (ingress-nginx, traefik) and a LoadBalancer provisioner that targets an Excloud Public IPv4.