Choosing the Right Kubernetes Plan

DigitalOcean Kubernetes (DOKS) is a managed Kubernetes service that lets you deploy Kubernetes clusters without the complexities of handling the control plane and containerized infrastructure. Clusters are compatible with standard Kubernetes toolchains, integrate natively with DigitalOcean Load Balancers and volumes, and can be managed programmatically using the API and command line. For critical workloads, add the high-availability control plane to increase uptime with 99.95% SLA.


Choosing the right Kubernetes plan highly depends on your workload. An oversized cluster underuses its resources and costs more, but an undersized cluster running at full CPU or memory suffers from degraded performance or errors.

This guide covers the following topics:

After creation, you can always resize a Kubernetes cluster to a different plan. For a full list of plans and prices, see the cluster pricing page.

If this is your first time testing out Kubernetes, see our Build and Deploy Your First Image to Your First Cluster tutorial.

Select Machine Type

Nodes are built on Droplets. You can choose from among the following Droplet plans for your node’s machine type:

Machine Type CPU vCPUs Memory Common Uses
Basic (Regular and Premium) Shared 1 - 8 1 - 16 GB RAM Testing, Low-Traffic Servers
General Purpose Dedicated 2 - 40 8 - 160 GB RAM
4 GB RAM / vCPU
Medium to High-Traffic Servers
CPU-Optimized Dedicated 2 - 48 4 - 96 GB
2 GB RAM / vCPU
CI/CD, Video Encoding, Batch Processing
Memory-Optimized Dedicated 2 - 32 16 - 256 GB RAM
8 GB RAM / vCPU
High-Performing Databases, Caches, Indexing
Storage-Optimized Dedicated 2 - 32 16 - 256 GB RAM
8 GB RAM / vCPU
150 - 225 GB SSD / vCPU
Data Storage, Monitoring, Analytics

All machine types, except the Basic nodes, are dedicated CPU Droplets. For more details on these machine types and their compatibility with your workload, see the respective Droplet plans.

Select Node Size and Count

Node size and count determine the overall CPU, RAM, and storage of your cluster. The better hardware a node has, the more pods can operate effectively within it before needing another node.

Node size determines the maximum amount of memory you can allocate to pods within it. For a full breakdown of memory available per pod, see the allocatable memory table.

Because of this, we recommend using nodes with less than 2GB of allocatable memory only for development purposes and not production. For production clusters, we recommend sizing nodes large enough (2.5 GB or more) to absorb the workload of a down node.

Larger nodes are easier to manage, are more cost efficient, and can run more demanding applications; however, they also require more pod management and cause a larger impact if they fail. If you later enable autoscaling for a node pool, DigitalOcean only adds and removes nodes of the chosen size, which results in larger spikes of both performance and cost.

Make a Data-Driven Decision

After creating a cluster, we recommend benchmarking and load testing your workload to see how it performs under simulated load. For bursty apps or batch jobs, look at resource usage when load is at its expected peak, especially when using shared CPU Basic nodes. If you notice that your app’s performance is too variable for your production needs, consider a machine type with dedicated vCPUs.

CPU and RAM

Using Kubernetes metrics, you can get more information on your cluster’s CPU load and memory usage:

  • If your cluster has high CPU usage most of the time and also significant memory usage, consider scaling both vCPUs and memory and using balanced General Purpose nodes.

  • If your cluster has high CPU usage most of the time but very low memory usage, you might be able to save money with CPU-Optimized nodes.

  • If your cluster has high memory usage most of the time (potentially maxing out and swapping to disk) but low or moderate CPU usage, consider scaling memory and using Memory-Optimized nodes.

  • If your cluster has low to moderate CPU or memory usage most of the time but sometimes bursts up and hits resource limits, consider shared CPU Basic nodes and scale the limiting resource accordingly.

Note
While a Kubernetes cluster’s RAM tends to remain constant, its CPU tends to spike with high bursts of activity. For this reason, we recommend sizing your CPU to accommodate these spikes in your workload.

Network

Nodes include unlimited free inbound data transfer and some amount of free outbound data transfer, depending on the Droplet instance type and size. Depending on your workload type and bandwidth usage, you could scale your nodes to take advantage of additional free outbound data transfer. For example, streaming and video applications require more bandwidth and network capabilities.

Disk

If you need additional storage, you can use network-attached block storage to attach additional volumes to a cluster.