Demonstrates how to configure GitOps using OCI artifacts with Flux. All cluster deployments are managed from a single source of truth stored as OCI images in a registry.
Registry: For this demo, a registry runs in-cluster. In production, use a cloud provider registry (ACR, ECR, GCR, etc.).
GitOps Root: The gitops-root OCI artifact contains all cluster resources - both plain manifests and references to other OCI artifacts. See oci-artifacts/README.md for details.
Infrastructure: Flux controllers and bootstrap configuration. See infrastructure/README.md for details.
Notifications: A webhook logger service prints notification bodies. In production, use Slack, Teams, or other notification providers.
-
kind - Kubernetes in Docker for local cluster creation https://kind.sigs.k8s.io/docs/user/quick-start/#installation
-
Flux CLI - GitOps toolkit for Kubernetes https://fluxcd.io/flux/installation/
-
Helm - Package manager for Kubernetes (required for pushing Helm charts) https://helm.sh/docs/intro/install/
-
Setup cluster and infrastructure:
make setup
This creates a kind cluster, deploys the registry, installs Flux, and pushes the gitops-root artifact.
-
Deploy dummy-service (optional):
make push-dummy-service
Flux automatically reconciles and deploys the service. Test notifications by checking webhook-logger logs.
-
Deploy dummy-helmrelease (optional):
make push-dummy-helmrelease # Or with custom version: make push-dummy-helmrelease DUMMY_HELM_VERSION=0.2.0Pushes both the Helm chart and HelmRelease manifest as OCI artifacts. Flux automatically reconciles.
-
Cleanup:
make kind-delete
make setup- Create cluster, install infrastructure, push gitops-rootmake push-gitops- Push gitops-root OCI artifactmake push-dummy-service- Push dummy-service OCI artifactmake push-dummy-helmrelease- Push Helm chart and HelmRelease manifest as OCI artifacts (default version: 0.1.0)make push-helm-chart- Push only the Helm chart OCI artifactmake push-helmrelease-manifest- Push only the HelmRelease manifest OCI artifactmake registry-port-forward- Forward registry port to localhost:5000 (stores PID in /tmp/registry-pf.pid)make stop-port-forward- Stop registry port-forward (reads PID from /tmp/registry-pf.pid)make kind-delete- Delete the kind cluster