GitOps With Flux (Complete Setup Guide)
In a previous blog post talking about what GitOps is, which you can find here, you learned about the overall need for GitOps and why it’s important.
Now that you know a bit about GitOps, it’s time to get it up and running in your own cluster!
In this blog post, you’ll learn how to utilize Flux, which is a GitOps tool in your Kubernetes cluster.
Creating A Kubernetes Cluster
Depending on what type of environment you’re in or what you have access to, you can get a Kubernetes cluster up and running in a few different ways:
- On your localhost with something like Minikube
- On a Kubernetes service like AKS, EKS, or GKE
- On a bunch of VMs
- On Rasberry Pis using K3s
- And a bunch of other methods…
Regardless of which method you go with, Flux will work.
For the purposes of this blog post, you can use Minikube as it’s great for a local environment and you don’t have to worry about spending money in the cloud or deploying a bunch of virtual machines.
To get started with Minikube, check out this guide.
The whole idea behind GitOps is for a tool (like Flux) to look in your Git repos, check out the Kubernetes manifest, and confirm that what’s in the Kubernetes manifest is what’s on your Kubernetes cluster. Because of that, we need a Kubernetes application.
For the purposes of this blog post, you’ll use an Nginx app. It’s nothing too complex and perfect for just getting started.
You can find the public repository here.
When you’re getting ready to install Flux, there are a few components:
- The command-line tool
- Connecting to GitHub
- GitHub credentials
- Deploying Flux
In this section, we’ll go over everything you need to get Flux up and running.
To install Flux, you’ll have to check out the installation guide found here for your operating system.
For example, to install flux on MacOS, you can run the following command:
brew install fluxcd/tap/flux
To check that the installation was successful and that the Kubernetes cluster you’re using is compatible with Flux, you can run the following command:
flux check --pre
To install flux, you’ll need to specify your GitHub username.
flux bootstrap github command creates the GitHub repository if it doesn’t exist and commits the toolkit to the
master branch. Then it configures the Kubernetes cluster to sync with the repository.
For example, to use my username
adminturneddevops on the
kubernetes-examples GitHub repo, it would look like the below.
flux bootstrap github \\
You’ll be prompted for a Personal Access Token (PAT) for your GitHub organization. After the installation is complete, an output similar to the screenshot below will be shown.
Within the repository, you’ll see a new directory with the Flux configuration.
Deploying An Application
Now that Flux is installed, it’s time to deploy an application. The first thing you should do is clone the code repository from The App section and fork it to your GitHub organization.
Once you have the cloned repository,
cd (change directory) into the repository on your terminal/command-line.
Add The App To Flux
First, add the nginx app to Flux. The command below will pull the Nginx app in 30 second intervals.
flux create source git kubernetes-examples \\
--export > ./clusters/my-cluster/podinfo-source.yaml
Once you run the command above, a new file called
podinfo-source.yaml will be added to the repository. Push the new file/code up to GitHub.
Deploy The Nginx App
To deploy the app, you’re going to use Kubernetes kustomize, which is a tool for customizing Kubernetes applications in a declarative fashion.
First, create a file called
podinfo-kustomization.yaml and put it into your GitHub repository.
Next, run the command bellow. The command below will use the
kubernetes-examples app for a source.
flux create kustomization kubernetes-examples \\
--export > clusters/my-cluster/podinfo-kustomization.yaml
Notice how there is a
kustomize directory. That directory is created manually (it already exists in the GitHub repo). That’s where the application configuration goes (example: the Nginx Kubernetes manifest). Without the Kubernetes manifest for your app inside of the
kustomize directory, the Flux configuration won’t work.
Once you run the command above, commit and push it to your GitHub repo.
Ensure That The App Is Deployed
To ensure that the app is deployed, you can use the
flux get command to see the apps that are running and managed by Flux.
flux get kustomizations --watch