There are many managed Kubernetes (K8s) services out there. Every major cloud provider has one. GCP, AWS, and Azure all provide options for this de-facto container orchestration solution. Today I will be looking at the DigitalOcean's (DO) managed solution for the K8s. They provide a relatively low cost managed solution compared to the big providers. They complete by not charging for the Control Plane. They only charge for the nodes that you choose for the cluster.
Disclaimer: I have not been paid by DigitalOcean to write this review
Creating the cluster
As I mentioned in my previous post reviewing DO's core services, the creation is simple and intuitive. A single page allows you to set all the required options for creating a cluster. With the all costs shown up-front, you only pay for the nodes that you select. The control plane is free of charge. Which is not the case with some of the bigger providers.
The great thing is that at least three versions of Kubernetes are supported. This can be a double edge sword. If you haven't kept your application spec updated with the latest version of Kubernetes then you will be forced to migrate.
As with other resources, you're able to select you datacenter location and change you're VPC if you have a different one. I have the same criticisms as before, there aren't as many datacenters to choose from, most datacenters aren't split into multiple regions, and for datacenters that are split into regions, all of them have at least one region disabled. There are not enough physical resources avaialbe at the datacenters. This can be very problematic for critical applications that scale horizontally.
Creating a node pool is where things get a little bit interesting. You are able to create multiple pool, made of different machine types, and of varying costs. Minimum cost of a cluster will come to be around $10 USD. This is without a load balancer or any block storage. However, it is recommended to have two nodes in a pool to avoid downtime.
All machine types are available to be used and multiple machine types can be added to the same cluster. This is great because you can add or remove special machines from your cluster for your specialized applications. For example, if you need memory optimized machines, you can add them to your cluster, target the node pools using node affinity, and run your specialized application directly on the new nodes.
If you are creating a low cost cluster with two $10 nodes then you will be disappointed by the resources available on the node once your cluster is created. At least half of the resources (CPU and RAM) are taken up by the system services and applications. The remaining resources are only good for running one full application. For example, this blog is hosted on Ghost which I host in one of these clusters. My Ghost instance is the application running on my cluster because with a database instance, application instance, and load balancer there's no room for anything else. I'd like to see some of these services become optional during the installation process so the user has more choice on better security (Cilium) or more resources.
I actually host this blog on DigitalOcean completely. Using the DigitalOcean's managed Kubernetes solution.
If you like content on this blog you can support us by using the DO referral link to sign up and get free credit. And you'll support us as well.
Referral link: https://m.do.co/c/590c0c82c1fc
Also you can subscribe directly signing up for free, or support us with a small monthly or yearly fee. Simply click the button at the bottom right corner.
Installing applications and services on the cluster is just as simple as any other Kubernetes cluster. You can use either K8s spec files or helm charts to install applications. However there is a setup process required to get the cluster configuration on your local system.
The easiest way to do that is to have
doctl utilities installed.
kubectl is required to be able to connect to the cluster.
doctl is recommended to have installed to manage the connection certificates automatically because they expire every seven days. Once you have these installed you must run
doctl auth init to authorize the utility to connect to your DO account. After successful authorization, you have to run
doctl kubernetes cluster kubeconfig save [cluster-config-id]. You can get the exact cluster config ID from the your created cluster.
DO does a great job of guiding you through this process of connecting to your cluster. When your cluster is being created, DO provides a step-by-step guide to connect. You are able to get started with downloading the configuration files even while the cluster is being created.
Once the configuration files are downloaded, you now have full access to your cluster to install anything you like. DO does not restrict any APIs or resources. You get full access to anything from namespaces to customer resource definitions.
DO provides basic metrics about the cluster on creation. CPU, load, memory, disk, and bandwidth metrics are provided out of the box. There is an option to install additional DO metrics agent. Documentation for installing this agent can be found here. Installing this agent provides you with additional data about pods, daemon sets, and stateful sets.
The information provided by these metrics are pretty basic and the visualization is basic as well. It's great for an overall view of the cluster but not for a granular look at the cluster. The problem here is that the longest metrics period that can be selected is 30 days. Which is not a great way to get long term overall picture about the cluster. DO does provide a way to create alerts based on these metrics. But only for the basic CPU, memory, disk, and bandwidth metrics. Alerts cannot be created for any of the K8s specific resources such as pods. The metrics solution could be better.
I will making this content like this and more so please consider supporting me by subscribing.
Sign up by using the button at the bottom right corner. Also conider supporting with a small monthly fee.
Happy Hacking :)