Summary: This repository is a minimal example repo for training purposes around GitOps with Flux used throughout the SVA Academy course
GitOps with FLux. It serves as a starting point for labs where participants will incrementally extend the setup.
- Demonstrates the core idea of GitOps: Declarative state stored in Git, reconciled into the cluster by Flux.
- Provides a minimal, easy-to-understand baseline for exercises.
- Will be expanded step by step during labs (workloads, policies, observability, multi-tenancy, etc.).
- Structure follows the Flux standard bootstrap
- Clear separation of cluster base (CRDs/controllers), infrastructure (namespaces, services), and apps (deployments/HelmReleases).
- Paths and Kustomize layers are designed for readability and extensibility.
- This repo references Flux v2.6.4, see
clusters/flux-system/gotk-components.yaml - Do not upgrade unless explicitly instructed in a lab step.
.
ββ apps/ # Example workloads
ββ clusters/ # Usually contains multiple clusters
ββ infrastructure/ # Base infra (namespaces, repos, services)
ββ README.md
Although i believe it's rather pointless.
- Requirements: Kubernetes cluster,
kubectl,fluxCLI (v2.6.4), Git access. - Fork this repo: Ideally to your user space. Have a
GITHUB_TOKENin place. - Bootstrap (example):
flux bootstrap git --url=https://github.com/${GITHUB_USER}/flux-lab --username=${GITHUB_USER} --password=${GITHUB_TOKEN} --token-auth=true --path=clusters --components-extra=image-reflector-controller,image-automation-controller --silent
- Check status:
flux get all
# Show sources
flux get sources git -A
flux get sources helm -A
# Trigger sourcecode reconciliation
flux reconcile source git flΓΆux-system -n flux-system
# Check events/logs
kubectl -n flux-system logs deploy/source-controller
kubectl -n flux-system logs deploy/kustomize-controller
kubectl -n flux-system logs deploy/helm-controllerNote:
For multi-cluster setups, mirror the structure under clusters/<cluster-name>/ and keep kustomizations separated per cluster.
Obviously bootstrapping would have to reference the appropriate path.
--path=clusters would update to --path=clusters/<cluster-name>