Is Kubernetes right for you?
CEO of Amethyst Platform
With the current hype around Kubernetes, we've seen that more and more organizations and individuals embrace the new way of managing containers, mainly Kubernetes.
But first, to get everybody up to speed: What is Kubernetes?
Kubernetes is a container orchestration platform. Basically you get some instances, install some software on them and they will become part of the Kubernetes cluster. This way, you can instruct the cluster via configuration files to deploy your applications in a descriptive manner (you describe what you need) and let the cluster controller figure out the resources and distribution of your containers.
But as any solution, it's not a "one size fits all" situation. Using a Kubernetes cluster for your applications has advantages and disadvantages and in this post, we're going to ask yourself a few question to determine if opting for using Kubernetes is the right choice.
How many containers do you have?
If the answer is not at least in high double digits, Kubernetes might be an over-kill solution for you at the moment. Managing a cluster and worrying about all the moving parts that compose it (network controller, kubelets, api-server, certificates, ingress controller, etc) might be not worth the trouble. At best, you could opt for using a managed solution, such as GKE, EKS, Scaleway's Kapsule or Digital Ocean's Kubernetes offering. It's not very expensive and they manage all the moving parts, so you can enjoy a smooth application development and deployment experience.
Is downtime crucial?
Although everybody will answer the "How much uptime do you strive for for your application?" question with 100%, we're sorry to tell you that is very hard to achieve and in most cases not worth it. Even the biggest tech companies in the world offer somewhere around 99.9% SLA uptime and usually that's enough for any business.
For smaller businesses, even a smaller SLA is acceptable, especially if they structure their applications intelligently with decoupled containerized services, so that a complete outage is very improbable and to prevent any single-point-of-failiure situation.
Kubernetes' main selling point is that it provides seamless and transparent horizontal scaling for your applications. If you don't need it or can get away with a load balancer that splits the load betweed a few instances of your application. From our experience this is more efficient cost-wise and effort-wise (your development team will spend less time and fewer resources deploying behind a load balancer than deploying and managing a Kubernetes cluster).
Can you afford a dedicated team for managing the cluster?
If the answer is no, then you should either explore other solutions, or consider paying for a managed Kubernetes cluster offering. Managing a production ready cluster is hard work and you'll need to hire specialized people for this task, or if you opt for a managed solution, your development team will need to be able to prepare and deploy the necessary resources on the cluster. Kubernetes being a relatively new technology which only in the recent years started to gain monentuum and has a pretty steep learning curve. Therefore, people with decent experience which are able to use it correctly are not that many. So, if you want to go down the Kubernetes route, you'll either need to spend more on finding and recruiting such people, or spend to train your current staff to get them where you need them to be. Either way, an investment is needed.
Do you have a concrete plan on how the services will run inside the cluster?
You need to be prepared to deploy your workloads on a cluster. Do you need Deployments, DaemonSets or StatefulSets? How do the services communicate with each other and how are they going to be accessed from inside the cluster or from the outside world? Will you need LoadBalancer services or will you go for Ingress controllers? How many nodes are you going to need and do you have a disaster recovery plan in place in case a node goes offline? What databases are you going to need and how are you going to ensure that they are properly backed up? How are secrets and configuration files going to be managed inside the cluster?
There are a lot of such questions you and your team need to figure out before deploying applications on Kubernetes. By design, Kubernetes' data model is resource based and you need to think about how every resource is configured and linked to each other so that everything works well together.
We know how difficult is to manage applications in Kubernetes, so we built a simpler way to deploy applications by leveraging the full power of Kubernetes and abstracting all the complexity away, with more high-level configurations that just work.
Do you have a Continuous Integration and Deployment pipeline implemented?
Because Kubernetes encourages the usage of microservices, you will need a way to bring the latest changes from the codebases into the cluster in a safe and efficient manner. People inside your organization should not have access directly to the cluster and enough permissions to directly modify resources inside it (it's just so easy to bring down a whole application when misconfiguring a single resource), so you will need a streamlined process to vet every change, apply it to the cluster automatically and eventually roll back quickly when necessary.
Opting for using Kubernetes to orchestrate your containers is a big task and has it's share of risk, but in some cases, the gains outweight the risks. We hope we provided you some help to decide whether using Kubernetes for your application is the best choice or not for you.
We hope you enjoyed this post and you found it useful. If you spot any error, have any suggestions or just want to get in touch, you can reach us at [email protected]
Deploy your applications in minutes
We are setting things up! Leave us an mail address to be the first to find out when we launch!
Or contact us directly at [email protected].
If you want, you can share this post via Twitter