So, getting your apps up and running with Kubernetes has been a quite unexpected pleasant surprise. But now comes the... predictably challenging part: updating and deploying them. How do you set up a solid automated deployment pipeline? What continuous deployment tools for Kubernetes meet all your specific feature-needs?
Feature needs like:
- canary deployment
- release management
- secrets and variable storage in the tool itself (i.e. not in Kubernetes)
- easy rollbacks
- rolling and orchestrating application deployment
- blue-green deployment
- monitoring infrastructure and applications
And the offer of tools geared at making deployment more efficient sure is... overwhelming enough.
But fear not, for we've weighted some of the most popular Kubernetes cluster deployment tools' pros and cons, we've compared them to one another and shortlisted your bulky list of options to... 5.
The 5 best dedicated tools to orchestrate your releases with Kubernetes:
0. Manual Deployments vs Continuous Deployment Tools for Kubernetes
Why not just build a fully customed deployment script like... so many organizations out there still do?
It would fit your specific in-house processes and particular feature needs like a glove, wouldn't it?
"In a soon to be released survey by Codefresh, 32 percent of developers reported they don’t have CI/CD or the right kind of automation tools to help them deploy more often, making it challenging to take advantage of cloud-native technologies." (source: Devops.com)
Well, let me give you 8 key reasons why maintaining such a script would turn into a dread in the long term.
And why going with an “off-the-shelf”, “enterprise-level” solution would benefit you n times more:
- maintaining a deployment script is a slow and time-consuming process
- a custom build turns into a major challenge once you need to scale it up
- running manual Kubernetes deployments, that engage a large development team, is always more prone to errors
- managing rollbacks, keeping track of old and new deployments — particularly when dealing with a large team and a complex app — is n times more challenging (and riskier) when using manual deployments compared to running the right CD tools
- automated deployment tools for Kubernetes enable you to run specific deployment strategies like blue-green or canary
- YAML files have gained a reputation of being particularly error-prone; Kubernetes application deployment tools will streamline everything, from creating YAML files to generating and templating them
- storing secrets, managing them among multiple developers, across different repos, calls for extreme cautiousness and so... can get time-consuming and prone to “accidents”
- upgrading the entire ecosystem of resources that your Kubernetes app depends on gets quite challenging; by comparison, automating the entire updating workflow, using the right tooling, will help you save valuable time
In short: if scalability, maintainability and close to zero risks of failure are your two top priorities, choosing the right tooling for your continuous deployment workflow with Kubernetes becomes critical.
One of the best Kubernetes deployment tools that you could "turbocharge" your workflow with. Here's why:
- you can use it in production
- it relies on an operator in the cluster to run deployments inside Kubernetes: in other words: you won't need a different continuous deployment tool
- it detects new images, keeps an eye on image repositories and updates the running configurations based on a configurable policy and the configuration set in git
- it checks that all config updates and new container images get properly pushed out to your Kubernetes cluster
- it adjusts itself to any development process
In short: Flux will automate the deployment of services to Kubernetes.
Now, here's Flux "in action", in one of its typical use cases:
One of the developers in your team makes some changes... the operational cluster needs updated now... Flux detects the changes and deploys them to your cluster and keeps monitoring it.
Long story short: that developer in your team won't need to interact with an orchestrator; Flux provides him/her with a CLI to run all these operations manually.
But there are also 2 cons for using Flux as your automated deployment tool:
- it lacks webhook support
- it lacks multi-repo support
Tip: use this automated deployment tool at the end of the Continuous delivery pipeline.
A cloud deployment tool developed originally by Netflix, then open-sourced, that comes with support for Kubernetes.
How does it work with Kubernetes?
It's designed to complement Kubernetes, to make up for its limitations: it provides robust deployment pipelines that allow you to "joggle with" various deployment strategies.
Why would you choose Spinnaker over other continuous deployment tools for Kubernetes?
- it provides deployment pipelines, easy rollbacks and scaling (right from the console)
- it's open-source
- it integrates seamlessly with email, Slack, Hipchat, thus making pipeline notifications a breeze
- you get to use it for all types of Kubernetes resources (it's not "limited" to deployments)
- it supports Helm charts
- it handles blue/green and canary deployments and ships with support for any CI tool and cloud provider
- it'll monitor your Kubernetes app's (and cluster's) health
In short: you'll want to use Spinnaker if it's a robust, fully automated CD pipeline for Kubernetes that you want to set up; one "packed" with all the best practices, that'll help you streamline the deployment of apps.
2 Typical Use Cases for Spinnaker:
- you use packer for building an AMI in one of the stages and you deploy it to production; Spinnaker allows you to closely monitor the state of your deployed application
- to perform tests, detect a container image push and deploy that image to Kubernetes
Not just one of the continuous delivery tools to consider, but THE first Kubernetes-native CI/CD technology.
Codefresh is a GUI-based environment that streamlines your Kubernetes app building and deployment process.
Here are just some of the most powerful reasons why you'd add it to your box of continuous deployment tools for Kubernetes:
- it supports Helm charts
- it allows you to use your favorite tools: favorite CI, image repository, repo...
- it ships with a whole set of plugins that enable you to hook it to your favorite CI/CD tools (e.g. Jenkins)
And a few cons of using Codefresh:
- it won't store your secrets/variables
- its plugins are set up from their own GUI: if trouble strikes, addressing the problem might make your pipeline unnecessarily complex
- it doesn't handle cluster credentials living outside your cluster, leaving it exposed to imminent risks
4. Argo CD
Another one of the best Kubernetes deployment tools to consider when you're planning your continuous delivery workflow.
How does Argo CD work?
Argo uses git repositories as a reference for the target state of your app and the target deployment environments. It will synchronize your desired app state with each of the target environments that you'll define.
It's a declarative continuous system that it will provide you with, one supporting a whole variety of config management tools: Helm, ksonnet/jsonnet...
Argo CD's top features, that make it worthy of your shortlist, are:
- it provides continuous monitoring of your deployed apps
- rollback/roll-anywhere-in-the-git-repository features
- it ships with webhook support (BitBucket, GitLab, GitHub)
- it provides sync, presync and postsync hooks for complex app rollouts
- it provides SSO integration (GitLab, OIDC, Microsoft, LinkedIn, SAML 2.0, LDAP)
- you can use it alone or as a component of an existing setup of pipeline tools
An automated delivery tool designed to meet even the highest feature needs:
- Auto DevOps provides you with pre-built CI/CD configuration, so you can automatically identify, build, test, deploy and further monitor your Kubernetes apps
- it works with any Kubernetes cluster (you won't depend on GitLab's infrastructure)
- it allows you to use Containers as a Service or a self-hosted Kubernetes cluster on any public cloud
- it provides you with CI support out of the box
- it allows you to choose between its auto-deploy component for Kubernetes and Helm charts
Overall: GitLab will simplify and streamline your entire Kubernerted app development cycle.
Use it if you need an end-to-end automated deployment pipeline that doesn't depend on too many configurations. It makes that off-the-shelf solution that fits your scenario perfectly.
These are the 5 continuous deployment tools for Kubernetes to start evaluating first as you're getting your toolbox ready.
We do App development
Go to our App page!