What is this service?
Common services help you run your application in Kubernetes but are not core to your application. Open source items such as setting DNS entries, getting HTTPS certificates, monitoring and many more. There is no to re-invent the wheel when most of the common things you need are already created for us, just like why write our own scheduler when there is Kubernetes.
While the community has created these applications, they don’t integrate them into your Kubernetes environment for you. That means for each of these applications, you have to add them into your Kubernetes cluster and make sure it works and it works with all of the other common services applications because one service can leverage another service. Basically “wiring it all up to work together”.
This service provides you an opinionated way of running these services where we keep the “common services” ecosystem up and running correctly with each other, updated, and a full GitOps workflow with a CI/CD pipeline to deliver these services into any number of Kubernetes clusters.
Get to what matters faster
Skip all of the undifferentiated heavy lifting and get to deploying your application faster.
What really matters is the blue part, which is where your application lives. Everything else exists only to help you to get to that point.
These common services are like Kubernetes. You just want it to work and you don't want to have to manage it.
Why would I use Kubernetes Common Services?
Can’t I do this myself?
Isn’t all of this open source?
Yup, it’s 100% open source.
Kubernetes Common Services offers the same benefit that GKE, EKS, AKS, or any other managed Kubernetes service offers. These items are also undifferentiated heavy lifting that you are doing to bring your application to the market.
It takes time to:
* “wire all of these applications up together”
* To perform upgrades to one of the pieces and test to make sure it is working with everything
* Keep up with security updates and best practices for these applications
Why focus your time on these items when you can instead refocus your time and resources towards other parts of your application?
There is no magic to this service
There is absolutely no magic to this service. What this service provides is the mundane work of maintaining the integration between all of these services and your Kubernetes cluster, writing a lot of unit tests and integrations tests, and being part of the community of these applications to ensure they work well individually and together.
Testing is the key to having an automated CD pipeline
We all know how important testing software is and when releasing software, it should be tested. This is mostly done manually at first and then automated. A lot of time, we never get to the automated part because we have other higher priority features or tasks to do instead. This usually leaves the testing to be manually done which means we can’t automatically deploy out the software because someone has to manually test it first. Then as you add in more applications, the last one didn’t have any testing, are you going to start writing tests for this one? Then the question becomes, why this one and not the other ones? This is a downward spiral to no testing at all.
We know how hard it is to write and maintain tests for infrastructure applications. It is plain old tedious work. As infrastructure becomes more like any other application code (infrastructure as code), it gets more important to test each item for the same reason we write unit and integration (e2e) tests for our own core applications. These are complex applications with a lot of functionalities, without testing, we can not guarantee there were no regressions or change of behavior from what was expected.
Another service this product provides are all of the CI, integration, and e2e tests for all of these applications. We will maintain these tests as the application changes throughout their lifecycle.
The following is Weaveworks Flux’s diagram on the GitOps workflow that their open source product provides. We leverage this tool heavily for the GitOps workflow.
(Image from https://github.com/fluxcd/flux)
This is a fantastic tool that provides a very good model for deploying in a GitOps fashion but we have found it is missing some pieces such as testing in the workflow. That makes sense since they are focused on the GitOps workflow mechanism and is not here to provide you with tests that you should be writing. This service extends that workflow and provides you with pre-written tests that slots into the delivery pipeline to make automatically delivering updates on these applications safe and predictable.