Flux and Argo CD are both popular application deployment tools on Kubernetes with GitOps but have different workflows and extensions. This blog post shows how users can get the “best of both worlds” with Flamingo - the Flux Subsystem for Argo CD.
In the ever-expanding ecosystem of DevOps and GitOps tools, Flux and Argo CD stand out as notable CNCF graduated projects with many passionate users and case studies.
However, as organizations scale and adopt diverse technologies, they may require more versatile GitOps solutions. Compliance is a good example - a large enterprise will cater to various teams’ constraints, preferences, and requirements. As the number of variables grows, individual GitOps tools struggle to address these needs because of:
• the complexity of managing infrastructure extensions like Terraform
• the necessity of Trusted Application Delivery using signed OCI images for Kustomization
• the demand for enterprise management and compliance solutions
In this blog post, we are showing how Flux and Argo CD can work together to solve these platform engineering challenges.
Introducing Flamingo
Flamingo - the Flux Subsystem for Argo - is a solution that integrates Flux into Argo CD for a seamless GitOps experience with Kubernetes clusters.
Flamingo is a drop-in and non-invasive component for any Argo CD users to explore today. Users may also wish to add new dashboards, templates, and policy management with the addition of Weave GitOps Assured or Enterprise.
Platform Engineering - Moving Beyond Argo CD
Argo CD provides an opinionated application experience but it has a tightly coupled architecture that can impact its flexibility in platform engineering. Argo CD tightly combines a Web UI and user store with the application-centric model and CD tools. This can make customization or extension of Argo CD's core functionality more challenging.
For example, in a developer platform, one might need to deploy Kustomization manifests from signed OCI images to improve the security and transparency of Kubernetes deployments. Argo CD’s monolithic architecture makes it harder to support this, and other features that impact “core” design.
Another example is Terraform integration. Most cloud native platform engineers want applications to deploy both Kubernetes and Terraform components together (or similar). Argo CD’s Kubernetes application model does not support diverse infrastructure management use cases like Terraform. Argo's single Application Custom Resource (CR) consolidates Kustomization and Helm chart installations within the specification, while the application controller is tasked to reconcile both. This leads to a complex and difficult-to-maintain specification when attempting to integrate Terraform support.
As a final example, we will explore why GitLab, facing similar limitations as those identified in Argo CD, chose Flux as their preferred GitOps integration solution.
Developer Platforms - GitLab Chooses Flux
GitLab, a leading web-based DevOps platform, enables teams to manage projects, collaborate, and automate CI/CD pipelines. In pursuit of providing users with a seamless and efficient GitOps experience in their products, GitLab evaluated various GitOps tools, including Flux and Argo CD. Despite Argo CD being a popular and mature option in the GitOps space, GitLab identified certain limitations. Argo CD's focus on being an all-in-one solution and reliance on a custom API made it less suitable for integrating with GitLab.
After a thorough evaluation, GitLab ultimately chose Flux to enhance its GitOps capabilities. Now, let's delve into the reasons behind this decision:
• Flexibility: Flux's component-based design enables seamless GitLab integration and avoids reliance on a single tool.
• Kubernetes API Compatibility: Flux's use of the standard Kubernetes API simplifies GitLab UI integration, streamlining the GitOps experience.
• Faster Value Delivery: Flux's existing features, adoption, and community support accelerate value delivery to GitLab customers.
The next section will explore how Flux provides a more extensible and modular approach to GitOps.
How Flux modularity overcomes Argo CD's Limitations
Flux is, technically, a collection of controllers that provide a more extensible and modular approach to GitOps than Argo CD, with each controller having its scope of responsibility and operating independently within the Flux system. This modular architecture allows users to customize and extend Flux to meet their specific requirements. For example, the Kustomize Controller reconciles Kustomization CRs, while the Helm Controller manages Helm releases. With Flux, users can create custom controllers to manage specific kinds of applications or workloads, such as Terraform resources.
One significant advantage of Flux's modular architecture is that it enables the development of third-party controllers like a native Terraform Controller (Weave GitOps Terraform Controller, a standard component of the commercial Weave GitOps offerings), which enables users to manage infrastructure as code using GitOps principles.
If you are already an Argo CD user, we acknowledge the importance of your time and investment in Argo CD. With this in mind, we are pleased to present Flamingo, a seamless extension designed to enhance your GitOps experience by integrating Flux features. Our goal is to enrich your GitOps journey with the best GitOps tools available while preserving its familiar environment.
Flamingo: Flux and Argo CD Integration
Flamingo is a drop-in extension for Argo CD, which includes Flux as a subsystem. Users can leverage Flux's benefits without migrating their entire GitOps setup to a new tool. Flamingo is designed to be easy to use, can be installed using the same configuration, and manifests as Argo CD. It includes all of the features of Argo CD and Flux's additional benefits and features, such as the ability to manage infrastructure as code using the Weave GitOps Terraform Controller.
Flamingo combines the best of Flux and Argo CD for GitOps implementation on Kubernetes clusters. Flamingo offers a seamless experience, integrating Flux's automation within Argo CD's user-friendly interface. Users can manage Argo CD workloads while leveraging Flux's additional features. You can also ensure that upstream CVEs in Argo CD are quickly backported to Flamingo, maintaining a secure and stable environment.
The Best of Argo CD & Flux with Flamingo
If you're a busy professional already using Argo CD, you might hesitate to try Flux due to concerns about switching tools.
However, Flamingo seamlessly integrates Flux into your existing Argo CD setup, enhancing your GitOps processes with additional benefits and features. Flamingo eases integrating Flux with Argo CD as a bridge between the two tools and allows you to leverage Flux's benefits without migrating your entire GitOps setup or leaving Argo CD. Flamingo reduces the complexity of managing multiple GitOps tools, providing an integrated experience for managing deployments by combining Flux's automation capabilities with Argo CD's user-friendly interface.
Flamingo ensures compatibility between Argo CD and Flux, enabling you to utilize Flux's capabilities without disrupting your existing setup or processes. This integration provides a unified GitOps experience, leveraging the strengths of both tools to enhance your GitOps processes without requiring the abandonment of your current tool.
Developer Platform with Weave GitOps & Flux
Flux is a powerful tool for managing GitOps processes on Kubernetes clusters. Weaveworks offers a free and open source dashboard for Flux called Weave GitOps, which provides a comprehensive view of GitOps on Kubernetes clusters. The open-source UI for Flux provides a user-friendly interface for managing Flux workloads and allows users to visualize and view Flux controllers, resources, and events.
Weave GitOps is the foundation for a user-friendly developer platform, making it easy to manage and visualize GitOps processes on Kubernetes clusters. The UI includes various features that allow users to manage Git repositories, images, Helm releases, alerts, notifications, and policies - enhancing GitOps processes and achieving greater automation and efficiency in Kubernetes deployments. You can streamline your workloads using pre-defined GitOps Templates, even from your editor like VSCode.
Weave GitOps Enterprise includes additional features, such as visualizations of GitOps operations, error notifications, and the ability to manage Git repositories, Kustomization, Helm releases, and Terraform. DevOps teams have the ability to manage alerts, notifications, promotion pipelines, and policies for reliable, stable and safe application delivery.
Getting Started with Flamingo: Installation and Configuration
To use Flamingo, you will need to install and configure it properly. Here's a step-by-step guide to help you get started with Flamingo:
1. Install the default set of Flux controllers.
brew install fluxcd/tap/flux
flux install
2. Choose the compatible version of Flamingo that you want to install from the provided table.
Flux Argo CD Image
v0.41 v2.6 v2.6.7-fl.4-main-c4ce7dcc
v0.41 v2.5 v2.5.16-fl.3-main-c4ce7dcc
v0.41 v2.4 v2.4.28-fl.3-main-c4ce7dcc
v0.38 v2.3 v2.3.13-fl.3-main-b0b6148f
v0.37 v2.2 v2.2.16-fl.3-main-2bba0ae6
3. Upgrade your existing Argo CD installation, replace the current Argo CD installation, or install FSA from scratch, depending on your needs:
If you want to upgrade your existing Argo CD installation, use Option 1.
If you want to replace the current Argo CD installation, including all your settings, use Option 2.
If you don't have an existing Argo CD installation, use Option 3 to install Flamingo from scratch.
Option 1 - Upgrade the existing Argo CD
export VERSION=v2.6.7-fl.4-main-c4ce7dcc
kustomize build “https://github.com/flux-subsystem-argo/flamingo//release?ref=${VERSION}” \
| yq e '. | select(.kind=="Deployment" or .kind=="StatefulSet")' - \
| kubectl -n argocd apply -f -
Option 2 - Replace the current Argo CD
export VERSION=v2.6.7-fl.4-main-c4ce7dcc
kubectl -n argocd apply -k https://github.com/flux-subsystem-argo/flamingo//release?ref=${VERSION}
Option 3 - Install Flamingo from Scratch
export VERSION=v2.6.7-fl.4-main-c4ce7dcc
kubectl create ns argocd
kubectl -n argocd apply -k https://github.com/flux-subsystem-argo/flamingo//release?ref=${VERSION}
What’s next?
If you are a current ArgoCD user, consider downloading Flamingo today and also give Weave GitOps open source a try. It’s the easiest way to extend your GitOps workflows to manage infrastructure as code with the Weave GitOps Terraform Controller. For enterprise teams that need additional features such as multi-tenancy, notifications, pipeline promotions, and policy engine, contact sales@weave.works for a demo.
And if you are a current Red Hat OpenShift GitOps user, consider taking your experience to the next level with Flamingo, which brings together the best of Argo CD and Flux.
Comments