Skip to main content
Ankra supports provisioning fully managed Kubernetes clusters on DigitalOcean. You can create clusters with configurable control planes, workers, and networking then scale workers up or down as needed.

Prerequisites

Before creating a DigitalOcean cluster, you need two credentials:

DigitalOcean API Credential

A DigitalOcean personal access token with read/write permissions. See DigitalOcean Credentials.

SSH Key Credential

An SSH public key for server access. You can provide your own or let Ankra generate one. See SSH Key Credentials.

Creating a DigitalOcean Cluster

Via the Platform UI

1

Navigate to Clusters

Go to Clusters in the Ankra dashboard and click Create Cluster.
2

Select DigitalOcean

Choose DigitalOcean as the provider.
3

Select Credentials

Pick your DigitalOcean API credential and SSH key credential from the dropdowns. You can also create new credentials directly from the wizard.
4

Choose Region

Select a DigitalOcean region (e.g., nyc3, fra1, lon1). Each region shows the location and country.
5

Configure Nodes

Set your cluster topology:
  • Bastion - Droplet size for the SSH bastion host (e.g., s-1vcpu-1gb)
  • Control Plane - Count (1 or 3) and size (e.g., s-2vcpu-4gb)
  • Workers - Count and size (e.g., 2× s-2vcpu-4gb)
The wizard shows vCPUs, RAM, and monthly cost for each size to help you choose.
6

Choose Distribution

Pick the Kubernetes distribution: kubeadm Vanilla upstream Kubernetes bootstrapped with kubeadm and containerd (preselected). kubeadm clusters always use Cilium CNI and optionally support an external etcd topology with dedicated etcd droplets. k3s Lightweight Kubernetes with a user-selectable CNI.See Kubernetes Distribution for details.
7

Create & Track Progress

Click Create to start provisioning. A live progress view tracks credential setup, VPC creation, NAT gateway setup, SSH key deployment, bastion provisioning, droplet creation, Kubernetes installation (k3s or kubeadm), and Ankra Agent setup. The cluster appears with an offline state until provisioning completes, then transitions to online.

Via the CLI

Via the API


Cluster Configuration Options

DigitalOcean Regions

Available regions and sizes depend on your account. Use ankra cluster digitalocean regions and ankra cluster digitalocean sizes to list what your credential can deploy.

Common Droplet Sizes


Kubernetes Distribution

DigitalOcean clusters can be provisioned with either kubeadm (preselected in the create wizard) or k3s (the API and CLI default when distribution is omitted).
kubeadm clusters always use Cilium CNI (eBPF-based networking, L7 policies, Hubble observability). The CNI cannot be changed after creation.

Advanced CNI features

k3s clusters can enable advanced CNI features at creation time via cni_features (also available as toggles in the create wizard). Features are fixed once the cluster is created.
kube_proxy_replacement and ebpf_dataplane pin the CNI’s API-server endpoint to the first control plane, so on k3s they require a single control plane. Creation and control-plane scaling both enforce this. Flannel accepts no feature toggles.

External etcd topology (kubeadm)

By default kubeadm runs etcd stacked on the control plane nodes. For larger clusters you can run etcd on dedicated droplets by setting etcd_topology to external:
The equivalent CLI flags are --distribution kubeadm, --etcd-topology external, --etcd-node-count 3, and --etcd-size s-2vcpu-4gb.

Node Groups

Node groups let you organize worker nodes into logical groups with independent droplet sizes, counts, labels, and taints. Each group can be scaled, resized, and configured independently.

Via the Platform UI

Navigate to cluster Settings > Nodes to manage node groups. From this tab you can:
  • View all node groups with their droplet size, count, labels, and taints
  • Add new node groups with a name, droplet size, count, and optional labels/taints
  • Scale individual groups up or down (0–100 nodes)
  • Upgrade the droplet size (upgrade only - see Droplet Size Changes)
  • Edit labels and taints per group
  • Delete a node group and all its nodes

List Node Groups

Response:

Add a Node Group

Scale a Node Group

Node groups can be scaled to 0 nodes. This keeps the group definition but removes all droplets.

Droplet Size Changes

Droplet size upgrades are one-way - you cannot downgrade a node group to a smaller size. To use a smaller size, create a new node group with the desired size and delete the old one.
Each node is powered off, resized, and powered back on. This causes brief downtime for workloads on those nodes.

Update Labels and Taints

Delete a Node Group

Deleting a node group removes all its droplets. Workloads running on those nodes will be evicted.

Node Group API Reference


Restarting a Node

Restart any node - a control plane node, a worker, or the bastion - as a tracked operation, from cluster Settings > Nodes in the dashboard, via the CLI, or via the API:
See Restarting a Node for the full walkthrough, response shape, and state requirements - identical across providers.

Resizing the Bastion or Gateway

Resize the bastion without recreating the cluster - Ankra powers it off, resizes it, and powers it back on.
See Resizing the Bastion or Gateway for the accept/wait contract - identical across providers.

Legacy Worker Scaling

The legacy scale-workers and worker-count endpoints still work for backward compatibility.
For new clusters, prefer using Node Groups for more granular control.

Upgrading Kubernetes Version

You can upgrade the Kubernetes version on all nodes in a DigitalOcean cluster. Upgrades are applied to control plane nodes first, then workers. Both k3s and kubeadm clusters are supported.
  • Both k3s and kubeadm clusters are supported for version upgrades, including kubeadm clusters with an external etcd topology: the dedicated etcd members are upgraded first, one at a time, each saving a pre-upgrade snapshot before its static pod rolls to the etcd image matching the target Kubernetes version.
  • Use the matching version format for the target: v1.35.1+k3s1 for k3s, or a plain v1.31.0 upstream tag for kubeadm.
  • Downgrades are not supported - downgrades require an etcd snapshot restore.
  • You can only upgrade one minor version at a time (e.g., v1.33.x to v1.34.x, not v1.33.x to v1.35.x).
  • The cluster must be online with no active operations.

Check Current Version

Upgrade Version

For a kubeadm cluster, use a plain upstream tag instead:

Stopping and Starting a Cluster

You can stop a DigitalOcean cluster to release its compute (node droplets, the bastion, and the VPC NAT gateway) while keeping its configuration, networking definition, and SSH keys. Starting the cluster re-provisions the compute and reconciles it back to a running state. This is useful for pausing non-production clusters to save cost. When starting, use --scope control_plane to bring up only the control plane first (for example to inspect or repair it), or --scope all (the default) to provision the whole cluster.
Stop and start are background operations. A start returns 409 if a stop or terminate operation is still running. The cluster’s saved topology is preserved while stopped - ankra cluster digitalocean nodes list includes the soft-deleted entries that are re-provisioned on the next start.
A plain stop keeps the block storage volumes your workloads provisioned through the CSI driver, and DigitalOcean bills them while the cluster is parked. Pass --force (or ?force=true on the API) to delete them together with any load balancers the cluster created. Ankra deletes exactly the volumes it recorded for this cluster, never other volumes in the account.
A forced stop destroys the data on those volumes. A later start brings the cluster back with empty storage.

Deprovisioning

Deprovisioning deletes all DigitalOcean resources (droplets, NAT gateway, VPC, SSH keys) and removes the cluster from Ankra.
This action is irreversible. All data on the cluster will be permanently deleted.
The CCM and CSI driver create Load Balancers and Volumes that outlive a plain deprovision and keep billing. Deprovision with --force to have Ankra delete the volumes and load balancers it recorded for the cluster, or delete Kubernetes LoadBalancer services and PVCs using the do-block-storage StorageClass before deprovisioning. Anything already orphaned by an earlier teardown can be removed in the DigitalOcean Control Panel.
--force also works on a cluster that was stopped earlier: the volumes recorded at stop time are still known and get reclaimed.

Architecture

A DigitalOcean cluster provisions the following infrastructure: All nodes are deployed within a private VPC. Cluster nodes are created as private droplets with no public IP - the bastion host is the only droplet with a public address and provides the only external SSH access point. Outbound traffic from the nodes (image pulls, package downloads, the Ankra Agent connection) leaves through a managed VPC NAT gateway set as the VPC’s default route. The tag-scoped cloud firewalls stay in place as defense in depth; inter-node and jump traffic stay on the VPC.
DigitalOcean bills the VPC NAT gateway separately (from $40/month per gateway). See DigitalOcean’s VPC NAT gateway pricing for current rates.
Clusters created before private-droplet support keep their original layout: all droplets carry public IPs and rely on tag-scoped cloud firewalls as the ingress boundary. Public networking is fixed at droplet creation, so existing clusters - including nodes added when scaling them - stay on that model. Only newly created clusters get private nodes and a NAT gateway.
Ankra automatically deploys a digitalocean-cloud-provider stack after the Ankra Agent is installed, including the DigitalOcean Cloud Controller Manager and CSI driver backed by your API credential.

Provider-native Managed Kubernetes (DOKS & UKS)

In addition to self-managed k3s or kubeadm on droplets, Ankra can provision and import provider-native managed Kubernetes services: See Managed Kubernetes for the full guide covering live options and pricing, preflight checks, discovery and import, node pool autoscaling, and upgrades - across DOKS, UKS, GKE, OVHcloud MKS, AKS, and EKS. Create a managed cluster from the platform UI or via the API:
Ankra provisions the cluster with the provider, stores kubeconfig securely, and installs the Ankra Agent so you can manage stacks and GitOps the same way as imported clusters.

Troubleshooting

Common Issues

DigitalOcean Account Quotas

DigitalOcean has default resource limits per account. If provisioning fails, check your quotas in the DigitalOcean Control Panel:
  • Droplets
  • VPCs
  • Load Balancers
  • Volumes
Contact DigitalOcean support to increase limits if needed.