Now that the Flux v2 extension for Azure Kubernetes Service and Azure Arc is generally available, let’s do a quick guide on the topic. A Quick Guide, at least on this site 😉, is a look at the topic from a command-line perspective for easy reproduction and evaluation.
This Quick Guide is also on GitHub.
You need the following to run the commands:
- An Azure subscription with a deployed AKS cluster; a single node will do
- Azure CLI and logged in to the subscription with owner access
- All commands run in bash, in my case in WSL 2.0 on Windows 11
- kubectl and a working kube config (use
az aks get-credentials)
Step 1: Register AKS-ExtensionManager and configure Azure CLI
Flux v2 is installed via an extension. The extension takes care of installing Flux controllers in the cluster and keeping them up-to-date when there is a new version. For extensions to work with AKS, you need to register the AKS-ExtensionManager feature in the Microsoft.ContainerService namespace.
# register the feature az feature register --namespace Microsoft.ContainerService --name AKS-ExtensionManager # after a while, check if the feature is registered # the command below should return "state": "Registered" az feature show --namespace Microsoft.ContainerService --name AKS-ExtensionManager | grep Registered # ensure you run Azure CLI 2.15 or later # the command will show the version; mine showed 2.36.0 az version | grep '"azure-cli"' # register the following providers; if these providers are already # registered, it is safe to run the commands again az provider register --namespace Microsoft.Kubernetes az provider register --namespace Microsoft.ContainerService az provider register --namespace Microsoft.KubernetesConfiguration # enable CLI extensions or upgrade if there is a newer version az extension add -n k8s-configuration --upgrade az extension add -n k8s-extension --upgrade # check your Azure CLI extensions az extension list -o table
Step 2: Install Flux v2
We can now install Flux v2 on an existing cluster. There are two types of clusters:
- managedClusters: AKS
- connectedClusters: Azure Arc-enabled clusters
To install Flux v2 on AKS and check the configuration, run the following commands:
RG=rg-aks CLUSTER=clu-pub # list installed extensions az k8s-extension list -g $RG -c $CLUSTER -t managedClusters # install flux; note that the name (-n) is a name you choose for # the extension instance; the command will take some time # this extension will be installed with cluster-wide scope az k8s-extension create -g $RG -c $CLUSTER -n flux --extension-type microsoft.flux -t managedClusters --auto-upgrade-minor-version true # list Kubernetes namespaces; there should be a flux-system namespace kubectl get ns # get pods in the flux-system namespace kubectl get pods -n flux-system
The last command shows all the pods in the flux-system namespace. If you have worked with Flux without the extension, you will notice four familiar pods (deployments):
- Kustomize controller: installs manifests (.yaml files) from configured sources, optionally using kustomize
- Helm controller: installs Helm charts
- Source controller: configures sources such as git or Helm repositories
- Notification controller: handles notifications such as those sent to Teams or Slack
Microsoft adds two other services:
- Flux config agent: communication with the data plane (Azure); reports back information to Azure about the state of Flux such as reconciliations
- Flux configuration controller: manages Flux on the cluster; checks for Flux Configurations that you create with the Azure CLI
Step 3: Create a Flux configuration
Now that Flux is installed, we can create a Flux configuration. Note that Flux configurations are not native to Flux. A Flux configuration is an abstraction, created by Microsoft, that configures Flux sources and customizations for you. You can create these configurations from the Azure CLI. The configuration below uses a git repository https://github.com/gbaeke/gitops-flux2-quick-guide. It is a fork of https://github.com/Azure/gitops-flux2-kustomize-helm-mt.
⚠️ In what follows, we create a Flux configuration based on the Microsoft sample repo. If you want to create a repo and resources from scratch, see the Quick Guides on GitHub.
# create the configuration; this will take some time az k8s-configuration flux create -g $RG -c $CLUSTER \ -n cluster-config --namespace cluster-config -t managedClusters \ --scope cluster \ -u https://github.com/gbaeke/gitops-flux2-quick-guide \ --branch main \ --kustomization name=infra path=./infrastructure prune=true \ --kustomization name=apps path=./apps/staging prune=true dependsOn=["infra"] # check namespaces; there should be a cluster-config namespace kubectl get ns # check the configuration that was created in the cluster-config namespace # this is a resource of type FluxConfig # in the spec, you will find a gitRepository and two kustomizations kubectl get fluxconfigs cluster-config -o yaml -n cluster-config # the Microsoft flux controllers create the git repository source # and the two kustomizations based on the flux config created above # they also report status back to Azure # check the git repository; this is a resource of kind GitRepository # the Flux source controller uses the information in this # resource to download the git repo locally kubectl get gitrepo cluster-config -o yaml -n cluster-config # check the kustomizations # the infra kustomization uses folder ./infrastructure in the # git repository to install redis and nginx with Helm charts # this kustomization creates other Flux resources such as # Helm repos and Helm Releases; the Helm Releases are used # to install nginx and redis with their respective Helm # charts kubectl get kustomizations cluster-config-infra -o yaml -n cluster-config # the app kustomization depends on infra and uses the ./apps # folder in the repo to install the podinfo application via # a kustomize overlay (staging) kubectl get kustomizations cluster-config-apps -o yaml -n cluster-config
In the portal, you can check the configuration:
The two kustomizations that you created, create other configuration objects such as Helm repositories and Helm releases. They too can be checked in the portal:
With the Flux extension, you can install Flux on your cluster and keep it up-to-date. The extension not only installs the Flux open source components. It also installs Microsoft components that enable you to create Flux Configurations and report back status to the portal. Flux Configurations are an abstraction on top of Flux, that makes adding sources and kustomizations easier and more integrated with Azure.