Deine erste Anwendung mit GitRepository und Kustomization deployen
Richte Flux mit einer Kustomization-Ressource auf Manifeste in Git aus und sieh dem Sync zu.
Flux wird wie alles andere im Cluster mit Kubernetes-Ressourcen konfiguriert. Zwei davon erledigen den Großteil der Arbeit: Eine Source wie ein GitRepository sagt, wo die Konfiguration liegt, und eine Kustomization sagt „nimm die Manifeste unter diesem Pfad in dieser Source und halte sie auf diesem Cluster angewendet“. Diese Anleitung deployt eine kleine Anwendung und ändert dann Git, um den Sync zu beobachten. Sie setzt voraus, dass Flux gegen ein Repository fleet-infra gebootstrapt ist (siehe die vorherige Anleitung).
Die Manifeste vorbereiten
Füge in deinem fleet-infra-Clone neben dem von Bootstrap erzeugten Ordner clusters einen Anwendungsordner hinzu:
fleet-infra/
├── clusters/
│ └── dev/
│ ├── flux-system/ # von Bootstrap erzeugt
│ └── webapp.yaml # die Flux-Kustomization (nächster Abschnitt)
└── apps/
└── webapp/
├── namespace.yaml
├── deployment.yaml
└── service.yaml
apps/webapp/namespace.yaml:
apiVersion: v1
kind: Namespace
metadata:
name: webapp
apps/webapp/deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: webapp
namespace: webapp
spec:
replicas: 2
selector:
matchLabels:
app: webapp
template:
metadata:
labels:
app: webapp
spec:
containers:
- name: webapp
image: nginx:1.25
ports:
- containerPort: 80
apps/webapp/service.yaml:
apiVersion: v1
kind: Service
metadata:
name: webapp
namespace: webapp
spec:
selector:
app: webapp
ports:
- port: 80
targetPort: 80
Anders als bei manchen Werkzeugen nennen die Manifeste hier ihren Namespace explizit, und der Ordner enthält das Namespace-Objekt, damit Flux ihn erstellt. Eine kustomization.yaml ist nicht nötig: Wenn ein Ordner keine enthält, baut Flux eine Liste aller YAML-Dateien darin.
Die Flux-Kustomization schreiben
Bootstrap hat bereits ein GitRepository namens flux-system erstellt, das auf dasselbe Repository zeigt, du kannst es also wiederverwenden. clusters/dev/webapp.yaml:
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: webapp
namespace: flux-system
spec:
interval: 10m
sourceRef:
kind: GitRepository
name: flux-system
path: ./apps/webapp
prune: true
wait: true
timeout: 2m
Die wichtigen Teile:
sourceRefist die Herkunft des Soll-Zustands. Hier ist es dasflux-system-Repository, das Bootstrap eingerichtet hat.pathist der Ordner in der Source, der angewendet wird.intervalgibt an, wie oft Flux die Manifeste erneut anwendet und Drift korrigiert, auch wenn sich Git nicht geändert hat.prune: truebedeutet, dass Objekte, die aus Git entfernt wurden, auch aus dem Cluster entfernt werden. Es ist aus, wenn du es nicht setzt.waitundtimeoutlassen Flux warten, bis die angewendeten Ressourcen bereit sind, bevor es Erfolg meldet.
Du kannst dieses YAML statt von Hand mit der CLI erzeugen:
flux create kustomization webapp \
--source=GitRepository/flux-system \
--path=./apps/webapp \
--prune=true --wait=true --timeout=2m --interval=10m \
--export > clusters/dev/webapp.yaml
Committen und Flux es aufgreifen lassen
git add -A
git commit -m "Add webapp"
git push
Die Kustomization flux-system beobachtet bereits ./clusters/dev und entdeckt die neue Kustomization webapp daher bei ihrem nächsten Lauf. Du führst nie kubectl apply für die Anwendung aus. Um das Warten zu überspringen, bitte Flux, sofort in Git nachzusehen:
flux reconcile source git flux-system
flux get kustomizations --watch
Das Deployment bestätigen
Die Kustomization webapp erscheint und wechselt zu Ready mit einer Nachricht, die die angewendete Revision nennt. Prüfe den Cluster und lass dir von Flux zeigen, was es besitzt:
kubectl get all -n webapp
flux tree kustomization webapp
Git ändern und den Sync beobachten
Bearbeite apps/webapp/deployment.yaml, ändere das Image auf nginx:1.26, committe und pushe. Flux holt Repositories im GitRepository-Intervall ab (nach Bootstrap standardmäßig eine Minute) und wendet die Änderung dann an. Ein neues ReplicaSet wird ausgerollt. Prüfe:
flux reconcile kustomization webapp --with-source
kubectl get deploy webapp -n webapp \
-o jsonpath='{.spec.template.spec.containers[0].image}'; echo
Das ist der ganze Kreislauf: Git bearbeiten, Flux bringt den Cluster auf diesen Stand. Die nächste Anleitung behandelt, wie du dieses Verhalten steuerst.
Ein anderes Repository verwenden
Du musst Anwendungsmanifeste nicht im Bootstrap-Repository halten. Um aus einem anderen zu deployen, erstelle ein GitRepository dafür und verweise in der Kustomization darauf:
flux create source git webapp-config \
--url=https://github.com/your-org/webapp-config \
--branch=main --interval=1m \
--export > clusters/dev/webapp-source.yaml
Für ein privates Repository füge Zugangsdaten mit flux create secret git hinzu und referenziere sie mit --secret-ref, oder nutze einen SSH Deploy Key. Setze dann sourceRef.name: webapp-config in der Kustomization.
Beliebte Anleitungen
-
Push vs. Pull: Wie Flux auf Kubernetes ausliefert Warum pull-basierte, Git-gesteuerte Auslieferung verändert, wie du Cluster deployst, absicherst und wiederherstellst. -
Sync-Verhalten steuern: Intervalle, Prune, Drift-Korrektur und Rollback Entscheide, wann Flux Änderungen anwendet, was es löscht, wie du es pausierst und wie du ein fehlerhaftes Deployment rückgängig machst. -
Image-Updates mit Flux Image Automation automatisieren Lass Flux neue Container-Image-Tags erkennen und in Git zurückcommitten. -
Multi-Cluster mit Flux konfigurieren Mehrere Cluster aus einem Repository verwalten, mit gemeinsamer Infrastruktur und Unterschieden pro Cluster. -
Flux CD vs. Argo CD: Ein GitOps-Werkzeug wählen Vergleiche Architektur, UI, Helm, Secrets, Mandantenfähigkeit und Image-Automatisierung, um das richtige Werkzeug zu wählen.