Clever Kubernetes Engine (CKE)
Clever Tools 4.9+ exposes the full lifecycle of Clever Kubernetes Engine: cluster creation with detailed topology, ongoing operations, node group management, version upgrades, and quota visibility. Once a cluster is ACTIVE, you drive it with kubectl like any other Kubernetes cluster.
Prerequisites
Activate the k8s feature flag once per user account:
clever features enable k8sCheck the command set is available:
clever k8sUse --org (or -o) to target an organisation by ID or unambiguous name. Replace platform-team in the examples with your organisation name. Output format defaults to a human-readable table; pass --format json (or -F json) on read commands when you need structured output for scripts or pipelines.
Create a cluster
To create a cluster, provide a name. Clever Tools defaults to ALL_IN_ONE and selects the smallest flavor and minimum replication factor available for that topology:
clever k8s create myCluster --org platform-teamAdd --watch to follow the deployment until the cluster reaches ACTIVE:
clever k8s create myCluster --watch --org platform-teamWhen you need a specific shape, combine topology, flavor, replication factor, version and an initial node group in a single command. Topology values (all_in_one, dedicated_compute, distributed) are accepted in lowercase or uppercase. The --nodegroup <flavor>:<count> option provisions an initial node group named default, ready to schedule workloads as soon as the cluster reaches ACTIVE. Use it on dedicated_compute and distributed clusters, which otherwise come up with no worker. all_in_one bundles already include an integrated worker on each bundle VM, so passing --nodegroup adds an extra pool; Clever Tools warns you and asks for confirmation in that case:
clever k8s create myCluster --org platform-team \
--topology dedicated_compute --flavor S --replication-factor 3 \
--cluster-version 1.36 \
--description "Production cluster" \
--tag env:prod,team:platform \
--autoscaling \
--persistent-storage \
--nodegroup M:3The --cluster-version value is validated against the platform-supported versions before the API call: an unsupported value, for example 0.99, fails with the list of available versions.
List, get, and inspect
List the Kubernetes clusters of the active organisation:
clever k8s list
clever k8s list --format jsonGet full details for one cluster (topology, features, node groups, load balancers, storage usage). The first form resolves a cluster by name when unambiguous; the second targets a specific cluster by ID:
clever k8s get myCluster
clever k8s get kubernetes_id -F jsonThe human format shows topology and feature state in a single table, with extra tables for control plane components (in DISTRIBUTED), node groups and load balancers when present:
┌────────────────────┬─────────────────────────────────────────┐
│ (index) │ Values │
├────────────────────┼─────────────────────────────────────────┤
│ Name │ 'myCluster' │
│ ID │ 'kubernetes_id' │
│ Status │ 'ACTIVE' │
│ Version │ '1.36' │
│ Topology │ 'DEDICATED_COMPUTE (S, rf=3)' │
│ Autoscaling │ 'enabled' │
│ Persistent storage │ 'enabled' │
│ Tags │ 'env:prod, team:platform' │
│ Description │ 'Production cluster' │
└────────────────────┴─────────────────────────────────────────┘Update cluster metadata
Rename the cluster, change its description or tags, and toggle autoscaling without redeploying. Pass at least one of --name, --description, --tag, --autoscaling or --disable-autoscaling. The --autoscaling and --disable-autoscaling flags are mutually exclusive:
clever k8s update myCluster --description "Production cluster, EU" --tag env:prod,team:platform
clever k8s update myCluster --name myCluster-eu
clever k8s update myCluster --autoscaling
clever k8s update myCluster --disable-autoscalingUpdating --tag replaces the full list of tags. Pass an empty value to clear them.
Add persistent storage
Enable persistent storage on an existing cluster with a Ceph RBD CSI driver. The cluster gains a default StorageClass named csi-rbd-sc, ready to back any PersistentVolumeClaim:
clever k8s add-persistent-storage myClusterPersistent storage is a one-way toggle; once enabled, it cannot be removed from a running cluster. Create a new cluster without --persistent-storage if you no longer need it.
Get the kubeconfig file
Retrieve the kubeconfig of an ACTIVE cluster. Wait for the cluster to reach ACTIVE before redirecting the output to a file. The command is a no-op on non-ready clusters:
clever k8s get-kubeconfig myCluster
mkdir -p ~/.kube
clever k8s get-kubeconfig myCluster > ~/.kube/mycluster.yaml
export KUBECONFIG="$HOME/.kube/mycluster.yaml"Once the kubeconfig is in place, drive the cluster with kubectl as usual. With --persistent-storage enabled, the default StorageClass is provisioned automatically. kubectl get nodes lists the integrated workers immediately on all_in_one clusters; on dedicated_compute and distributed clusters, the list stays empty until you add a node group:
kubectl get nodes
kubectl get csidrivers
kubectl get storageclasses
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=LoadBalancerActivity and quota
activity lists recent deployment events of a cluster (creation steps, control plane rollout, node group resizes). The default limit is 50; pass --limit N (between 1 and 1000) to widen the window:
clever k8s activity myCluster
clever k8s activity myCluster --limit 100
clever k8s activity myCluster -F jsonquota reports the Kubernetes quota, current usage, and remaining capacity for your account. Add --org to inspect an organisation. Each organisation starts with 40 vCPU and 40 GB of RAM across all its Kubernetes clusters by default, as detailed in quotas and limits:
clever k8s quota
clever k8s quota --org platform-team -F jsonCluster version
Report the installed Kubernetes version of a cluster, and offer an interactive upgrade prompt when an upgrade is available:
clever k8s version myCluster
clever k8s version check myClusterUse JSON output to inspect versions without an interactive upgrade prompt:
clever k8s version check myCluster -F jsonDrive the upgrade explicitly to a target version. The target is validated against the supported versions before the API call:
clever k8s version update myCluster --target 1.36Node groups
A node group is a pool of worker VMs of the same flavor. dedicated_compute and distributed clusters need at least one node group to schedule workloads; all_in_one clusters already include an integrated worker on each bundle VM and only need a node group when you want extra capacity beyond the bundle. Create one alongside a cluster (with --nodegroup on clever k8s create) or independently with nodegroups create. The third positional argument follows the <flavor>:<count> format and accepts lowercase flavors:
clever k8s nodegroups create myCluster workers XS:3
clever k8s nodegroups create myCluster workers XS:3 --autoscaling --min 3 --max 10
clever k8s nodegroups create myCluster workers XS:3 --description "GPU-intensive workers" --tag env:prodWhen creating a node group, --autoscaling requires both --min and --max. Supplying both bounds also enables autoscaling without --autoscaling.
Inspect node groups attached to a cluster:
clever k8s nodegroups list myCluster
clever k8s nodegroups list myCluster -F json
clever k8s nodegroups get myCluster workers
clever k8s nodegroups get myCluster node_group_idUpdate bounds, target count, autoscaling state, or metadata. Pass at least one of --count, --min, --max, --autoscaling, --disable-autoscaling, --description or --tag. Resizes are queued: the API rejects a second update while a previous resize is still running:
clever k8s nodegroups update myCluster workers --count 5
clever k8s nodegroups update myCluster workers --autoscaling --min 2 --max 10
clever k8s nodegroups update myCluster workers --disable-autoscaling
clever k8s nodegroups update myCluster workers --description "Updated description"The --autoscaling and --disable-autoscaling flags are mutually exclusive. When supplying both bounds, --min must not exceed --max.
Delete a node group; nodes are drained and the underlying VMs are removed. Skip the confirmation prompt with --yes:
clever k8s nodegroups delete myCluster workers
clever k8s nodegroups delete myCluster workers --yesDelete a cluster
Delete a cluster by name (when unambiguous) or by ID. Skip the confirmation prompt with --yes:
clever k8s delete myCluster
clever k8s delete myCluster --yes
clever k8s delete kubernetes_id --yes