Skip to content

GitOps mit Flux

Flux automatisiert Deployments aus GitLab - Infrastructure as Code mit Git als Single Source of Truth.

graph LR
    subgraph Git ["GitLab (gitlab.ciss.de/ciss/janus)"]
        direction TB
        AnsibleRepo["ansible/<br/>Server-Konfiguration"]
        AppRepo["home/<br/>SvelteKit-App"]
        FluxRepo["flux/<br/>GitOps-Konfiguration"]
    end

    subgraph Janus ["Janus K3s Cluster"]
        FluxAgent["Flux Controller"]
        Kustomize["Kustomize"]
        Helm["Helm Controller"]
        Workloads["Workloads"]
    end

    FluxRepo -->|"reconcile"| FluxAgent
    AppRepo -->|"Image Updates"| FluxAgent
    FluxAgent --> Kustomize
    FluxAgent --> Helm
    Kustomize --> Workloads
    Helm --> Workloads
    AnsibleRepo -.->|"Ansible"| Janus
  1. Entwickler pusht Code nach GitLab
  2. GitLab CI/CD baut Container-Image
  3. Flux erkennt Änderung im Git-Repository
  4. Flux pullt neue Konfiguration und Images
  5. Flux aktualisiert K3s-Deployments
  6. Neue Pods starten automatisch

Flux läuft unter dem Service-Benutzer services mit Kubeconfig unter ~/.kube/config.

KomponenteAufgabe
Source ControllerÜberwacht Git-Repositories
Kustomize ControllerWendet Kustomize-Overlays an
Helm ControllerInstalliert/aktualisiert Helm-Releases
Notification ControllerSendet Status-Benachrichtigungen

Flux-Konfiguration liegt im flux-Repository:

flux/
├── clusters/
│ └── janus/
│ ├── flux-system/ # Flux-eigene Konfiguration
│ └── apps/ # App-Deployments
│ ├── kustomization.yaml
│ ├── namespace.yaml
│ └── deployment.yaml
├── infrastructure/ # Infrastruktur-Deployments
│ ├── ingress-nginx/
│ └── cert-manager/
└── apps/ # Applikationen
└── home/
Terminal window
# Flux-Status
flux get sources all
flux get kustomizations
flux get helmreleases
# Reconciliation erzwingen
flux reconcile kustomization --with-source