3.5 KiB
Introduction to Flux CD v2
Create a kubernetes cluster
In this guide we we''ll need a Kubernetes cluster for testing. Let's create one using kind
kind create cluster --name fluxcd --image kindest/node:v1.23.5
See cluster up and running:
kubectl get nodes
NAME STATUS ROLES AGE VERSION
fluxcd-control-plane Ready control-plane,master 2m12s v1.23.5
Run a container to work in
run Alpine Linux:
docker run -it --rm -v ${HOME}:/root/ -v ${PWD}:/work -w /work --net host alpine sh
install some tools
# install curl
apk add --no-cache curl
# install kubectl
curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl
chmod +x ./kubectl
mv ./kubectl /usr/local/bin/kubectl
# install helm
curl -o /tmp/helm.tar.gz -LO https://get.helm.sh/helm-v3.10.1-linux-amd64.tar.gz
tar -C /tmp/ -zxvf /tmp/helm.tar.gz
mv /tmp/linux-amd64/helm /usr/local/bin/helm
chmod +x /usr/local/bin/helm
test cluster access:
/work # kubectl get nodes
NAME STATUS ROLES AGE VERSION
fluxcd-control-plane Ready control-plane,master 3m26s v1.23.5
Flux CD
get flux command-line tool
Let's download the flux
command-line utility.
We can get this utility from the GitHub Releases page
It's also worth noting that you want to ensure you get a compatible version of flux which supports your version of Kubernetes. Checkout the prerequisites page.
curl -o /tmp/flux.tar.gz -sLO https://github.com/fluxcd/flux2/releases/download/v0.41.1/flux_0.41.1_linux_amd64.tar.gz
tar -C /tmp/ -zxvf /tmp/flux.tar.gz
mv /tmp/flux /usr/local/bin/flux
chmod +x /usr/local/bin/flux
Now we can run flux --help
to see its installed
Check our cluster
flux check --pre
Documentation
As with every guide, we start with the documentation
The Core Concepts is a good place to start.
We begin by following the steps under the bootstrap section for GitHub
We'll need to generate a personal access token (PAT) that can create repositories by checking all permissions under repo
.
Once we have a token, we can set it:
export GITHUB_TOKEN=<your-token>
Then we can bootstrap it using the GitHub bootstrap method
flux bootstrap github \
--owner=marcel-dempers \
--repository=docker-development-youtube-series \
--path=kubernetes/fluxcd/clusters/dev-cluster \
--personal \
--branch fluxcd-2022
flux check
# flux manages itself using GitOps objects:
kubectl -n flux-system get GitRepository
kubectl -n flux-system get Kustomization
Check the source code that flux bootstrap
created
git pull origin <branch-name>
Repository structure
https://fluxcd.io/flux/guides/repository-structure/
- Mono Repo
- Repo per team
- Repo per app
- apps
- example-app-1
- example-app-2
- infrastructure
- ingress-nginx
- monitoring
- clusters
-dev-cluster
-prod-cluster
build our app
cd kubernetes\fluxcd\apps\example-app-1\src
docker build . -t example-app-1:0.0.1
#load the image to our test cluster so we dont need to push to a registry
kind load docker-image example-app-1:0.0.1 --name fluxcd