5 GitOps Tools that you need to know!
I have been getting hugely into GitOps in the home lab lately and carrying those skillings into production environments. GitOps is a methodology that focuses on deployments being sourced from a git repo. Using GitOps you can encapsulate everything in your git repo and then make sure your apps are applied to your environment in a declarative way. Let’s look at 5 tools that you need to know for your GitOps adventures. Let’s dive in.
Table of contents
What is GitOps again?
It is really not a “tool” but rather a “methdology” or mindset, workflow, etc. It means your Git repo is the source of truth for your applications. Developers or DevOps engineers just need to commit their code as normal, then an automated GitOps process makes sure the infrastructure and applications match what is described by the code in the git repo.
5 Tools for GitOps
While GitOps is not a tool in itself, you do need tools to implement the workflow of GitOps to your Kubernetes cluster or even Docker or Docker Swarm. Yes, there is one tool out there that can implement this in Docker or Docker Swarm along with Kubernetes. Let’s look at the list.
- FluxCD
- ArgoCD
- Portainer
- Rancher Fleet
- Manual CI/CD pipeline implementation
1. FluxCD
FluxCD is a great GitOps solution that is both lightweight and fairly simple to implement. Basically to install it, you download the FluxCD CLI tool and then bootstrap FluxCD into your Kubernetes cluster. I bootstrapped FluxCD into my Microk8s cluster without any issues.
One of the great things I really like that you can do with FluxCD is keeping your images up-to-date with the Image Controller component of FluxCD. This is an additional parameter you need to add to your bootstrap command. But once you do, that is it. If you have already bootstrapped, you can run the command again with the extra parameters no problem.
Check out my post on that topic here: FluxCD How to Modify Kustomize Image Tag.
With the image update controller in place, you can define image version ranges or use other logic to have the image controller continue to check your images and pull the latest image to keep your application images up to date.
Also, a cool point to note is that GitLab has officially stated they are choosing FluxCD as their GitOps integration of choice moving forward. You can read that official announcement from 2023 here: GitOps with GitLab.
Take a look at the official FluxCD site here: Flux.
2. ArgoCD
ArgoCD is another very popular tool out there that allows you to implement GitOps in your Kubernetes cluster. Unlike FluxCD, ArgoCD has a GUI interface that allows you to interact with your Kubernetes cluster “applications” that ArgoCD deploys. Like Flux, you can source your Git repo and target your Kubernetes cluster for declarative operations in your cluster.
You can learn more about ArgoCD here: Argo CD – Declarative GitOps CD for Kubernetes.
3. Portainer
Portainer is well known in the community for its capabilities with Docker and Kubernetes. I think it is one of the best tools that you can use to learn Docker, manage it, and take your environments to the next level. However, one feature of Portainer that you may not realize is its ability for GitOps. Unlike the other solutions mentioned so far, it isn’t just limited to Kubernetes clusters. You can use Portainer to perform GitOps type operations on everything from Kubernetes, Docker Swarm, and even down to a standalone Docker host.
Portainer has recently renamed its “auto updates” to GitOps updates and I think this is a smart rename since it really helps you to understand what it is actually doing. Note in the screenshot below, we have a stack deployed pointed to a git repository and have the GitOps updates enabled. Also, there are a couple of options I really like here:
- Re-pull image
- Prune services
The re-pull image option will make it where when it polls the Git repo, if it finds changed code, it will check the image as well and pull the latest image found. This works if you are using the <container>:”latest” tag or a specific tag. It will pull the latest version of that tag available.
This is a great way to keep things up-to-date. Also, the prune services option is great for housekeeping operations keeping services pruned out that have been tombstoned by new image pulls, etc.
I have been evangelizing Portainer for a while now (no sponsorship or endorsement here). I just like the product. Even paid for my own license I use in the home lab. They have a “take 3” license that allows you to make use of a Portainer Business edition license for 3 nodes for free. This is great for the home lab. Check that out here: Take 3 – Get your first 3 nodes free.
4. Rancher Fleet
I have been a big fan of Rancher for a while now. They actually have a GitOps tool that is known as Rancher Fleet. It helps manage Kubernetes clusters at scale and can help deploy applications across hundreds or even thousands of Kubernetes clusters. It integrates with Rancher and has multi-cluster orchestration built-in right out of the gate. I haven’t played around with this one as extensively as others, but it is a great option.
According to Rancher, the Fleet solution uses custom resource definitions (CRDs) and controller that allow you to manage your GitOps operations for a single cluster or thousands of cluster. Learn more about Rancher Fleet here: Overview | Fleet.
5. Manual CI/CD pipeline implementation
Without one of the solutions or something else, you can do this all manually using CI/CD tools. However, just keep in mind that you would need to manually build out the logic in your CI/CD pipelines to automatically deploy your applications when you have a code check in. You may even want to schedule your pipelines to run at other times.
However, as you can imagine, you are going to have tradeoffs between having control over everything and visbility over these processes with scalability becoming much more difficult doing everything manually. This approach is probably better for very small organizations with only a single or few clusters to manage.
Check out my post on how to get up and running with CI/CD in the home lab: GitLab CI CD Pipelines for Home Lab: A Step-by-Step Guide.
Lab Lab and Lab to learn GitOps
GitOps may seem like a foreign concept. However, as I was in this same boat just a year ago, I have learned a great deal since then in the home lab and able to implement several of the skills and disciplines in production environments as well. It really is cool to see that what you have defined in code is what your infrastructure looks like at all times. That is something we couldn’t really do nearly as easily with traditional infrastructure.
I like the wide range of options out there now for GitOps. If you already have Portainer, which I know many are already using in the home lab, you can get started with GitOps with just a few toggles in the Portainer interface. Definitely try out FluxCD and ArgoCD as well as these are great tools that have several really great features and capabilities for deployments.