Skip to content

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 k8s

Check the command set is available:

clever k8s

Use --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-team

Add --watch to follow the deployment until the cluster reaches ACTIVE:

clever k8s create myCluster --watch --org platform-team

When 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:3

The --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 json

Get 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 json

The 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-autoscaling

Updating --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 myCluster

Persistent 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=LoadBalancer

Activity 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 json

quota 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 json

Cluster 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 myCluster

Use JSON output to inspect versions without an interactive upgrade prompt:

clever k8s version check myCluster -F json

Drive 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.36

Node 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:prod

When 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_id

Update 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 --yes

Delete 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
Last updated on