Quickstart
You need:
- The
excCLI installed and authenticated. kubectlon your$PATH.- A registered SSH key (the cluster VMs use it).
- A reasonable vCPU quota (
exc quotato 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 40This 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 nodesOr merge it into your default ~/.kube/config:
exc k8s cluster kubeconfig merge --cluster_id $CLUSTER_IDThe 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-keyThe 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 nodesNAME STATUS ROLES AGE VERSION
cluster-7-cp-1 Ready control-plane 3m12s v1.30.2
worker-1 Ready <none> 45s v1.30.24. Run a pod
kubectl run hello --image=nginx:alpine --port=80
kubectl expose pod hello --port 80
kubectl port-forward svc/hello 8080:80In another terminal:
curl localhost:80805. 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_IDCluster 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
LoadBalancerprovisioner that targets an Excloud Public IPv4.