Update Verteilungsdiagramm authored by Jvan Fadda's avatar Jvan Fadda
......@@ -2,7 +2,7 @@
## Überblick
Die Lösung basiert auf einer GitOps-gesteuerte, verteilten Architektur. Alle relevanten Komponenten (Core, Agents, Infrastruktur wie NATS/Postgres, sowie Monitoring) werden zentral im Git-Repository versmoniert über Fleet automatisch in das Kubernetes-Cluster ausgerollt.
Die Lösung basiert auf einer GitOps-gesteuerte, verteilten Architektur. Alle relevanten Komponenten (Core, Agents, Infrastruktur wie NATS/Postgres, sowie Monitoring) werden zentral im Git-Repository versmoniert über Fleet automatisch in das Kubernetes-Cluster ausgerollt.
Damit trennen wir fachliche Logik (Core, Agents) von Basisdiensten (Messaging, Datenbank, Monitoring) und erhalten eine klare Struktur inNamespaces.
......@@ -16,7 +16,7 @@ Damit trennen wir fachliche Logik (Core, Agents) von Basisdiensten (Messaging, D
- Gitjob: holt den Code aus dem Git-Repository, damit Fleet die Inhalte verarbeiten kann.
- Helmops: rendert und installiert Helm-Chart, basierend auf den Source-Code (:red_circle: das in `/gitops/.`)
- Fleet-Agent: bietet das Bindeglied zwischen Fleet und Namespaces und spielt die Manifeste in die Ziel-Namespaes ein und reportiert Status zurück.
- Trennung Control Plait <-> Runtime
- Trennung Control Plait \<-\> Runtime
- Control Plane (Fleet) liegt im Namespace `cattle-fleet-system`.
- Runtime-Services liegen in eigenen Namespaces (core, agents, nats, postgres, monitoring).
......@@ -29,8 +29,9 @@ Damit trennen wir fachliche Logik (Core, Agents) von Basisdiensten (Messaging, D
- Namespace monitoring: ermöglicht Observability durch Loki/Promtail/Grafana.
### Kommunikationsmuster
- Agents <-> Core: Die Kommunikation ähnelt dem RPC-Pattern einfach über NATS. Die Agents senden einen Request und der Core antwortet darauf. Der Core imitiert keine Kommunikation.
- Core <-> Postgres: klassisches Read/Write mit DB-Connection
- Agents \<-\> Core: Die Kommunikation ähnelt dem RPC-Pattern einfach über NATS. Die Agents senden einen Request und der Core antwortet darauf. Der Core imitiert keine Kommunikation.
- Core \<-\> Postgres: klassisches Read/Write mit DB-Connection
- Logging: Promtail sammelt Container-Logs und pusht sie an Loki. Grafana visualisiert die Daten über Loki als Datasource (ausführlichere Beschreibung hier zu finden :link: LINK :red_circle:).
## :red_circle: ???
......@@ -49,7 +50,7 @@ Damit trennen wir fachliche Logik (Core, Agents) von Basisdiensten (Messaging, D
- Nachvollziehbarkeit: Jede Änderung im Cluster als Commit im Git-Repo nachvollziehbar.
- Automatisierung: Deployments erfolgen automatisch, kosistentund reproduzierbar.
- Abhängigkeiten steuerbar: Es wird sichergestellt, dass zB, der Core erst startet, wenn Postgres und NATS bereitstehen.
- Multi-Namespace & Multi-Cluster fähig: Struktur kann problemlos auf grössere Umgebungen erweitert werden.
- Multi-Namespace & Multi-Cluster fähig: Struktur kann problemlos auf grössere Umgebungen erweitert werden.
## Mehrwert für das Business
......@@ -61,6 +62,7 @@ Damit trennen wir fachliche Logik (Core, Agents) von Basisdiensten (Messaging, D
## Erweiterbarkeit (Beispiel zu Monitoring)
Ein grosser Vorteil der Architektur ist die einfache Erweiterbarkeit:
- Prometheus/Alertmanager oder OpenTelemetry Collector koennen analog zu Loki/Grafana als eigene Bundles im Namespace monitoring hunzugefuegt werden.
- Dank GitOps genügt ein zusätzlicher Eintrag im Repo (`gitops/infra/monitoring/prometheus`), und Fleet übernimmt das Deployment und die Steuerung.
- Keine strukturelle Änderungen nötig: Die Monitoring-Komponenten wären genauso lose gekoppelt wie heute Loki/Promtail.
......@@ -72,5 +74,127 @@ Damit Zeigt sich: Auch wenn Monitoring aktuell nur Logging abdeckt, ist ide Erwe
- Die Architektur trennt fachliche Logik, Infrastruktur und Steuerung klar voneinander.
- Durch GitOps mit Fleet haben wir eine automatisierte, reproduzierbare Deployment-Pipeline.
- Fachliche profitieren wir von Entkopplung, Erweiterbarkeit und Transparenz.
- Der Aufbau ist zukunftssicher: zusätzliche Monitoring-/Tracing-Komponenten können problemlos integriert werden.
- :red_circle: Das alles hilft dem Unternemen stabile und einsehbare Deployments and die Kunden auszuliefern.
\ No newline at end of file
- Der Aufbau ist zukunftssicher: zusätzliche Monitoring-/Tracing-Komponenten können problemlos integriert werden.
- :red_circle: Das alles hilft dem Unternemen stabile und einsehbare Deployments and die Kunden auszuliefern.
## Ein blick auf die Konsole
### Bundles (kubectl get bundle -A)
```
NAMESPACE NAME BUNDLEDEPLOYMENTS-READY
fleet-local agent-core-gitops-agent 1/1
fleet-local agent-core-gitops-core 1/1
fleet-local agent-core-gitops-infra-monitoring-grafana 1/1
fleet-local agent-core-gitops-infra-monitoring-loki 1/1
fleet-local agent-core-gitops-infra-monitoring-promtail 1/1
fleet-local agent-core-gitops-infra-nats 1/1
fleet-local agent-core-gitops-infra-postgres 1/1
fleet-local fleet-agent-local 1/1
```
### Namespaces (`kubectl get namespaces -A`)
```
NAME STATUS AGE
agents Active 4d
cattle-fleet-clusters-system Active 4d
cattle-fleet-system Active 4d
cluster-fleet-local-local-1a3d67d0a899 Active 4d
core Active 4d
default Active 4d
fleet-local Active 4d
kube-node-lease Active 4d
kube-public Active 4d
kube-system Active 4d
local-path-storage Active 4d
monitoring Active 4d
nats Active 4d
postgres Active 4d
```
### Deployments (`kubectl get deployments -A`)
```
NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE
cattle-fleet-system fleet-agent 1/1 1 1 4d
cattle-fleet-system fleet-controller 1/1 1 1 4d
cattle-fleet-system gitjob 1/1 1 1 4d
cattle-fleet-system helmops 1/1 1 1 4d
core core 1/1 1 1 4d
kube-system coredns 2/2 2 2 4d
local-path-storage local-path-provisioner 1/1 1 1 4d
monitoring grafana 1/1 1 1 4d
```
### Stateful-Sets (kubectl get statefulset -A)
```
NAMESPACE NAME READY AGE
monitoring loki 1/1 4d
nats nats 1/1 4d
postgres postgres-postgresql 1/1 4d
```
### Daemon-Sets (kubectl get daemonset -A)
```
NAMESPACE NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
kube-system kindnet 1 1 1 1 1 kubernetes.io/os=linux 4d
kube-system kube-proxy 1 1 1 1 1 kubernetes.io/os=linux 4d
monitoring promtail 1 1 1 1 1 <none> 4d
```
### Services (kubectl get service -A)
```
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
cattle-fleet-system gitjob ClusterIP 10.96.148.139 <none> 80/TCP 4d
cattle-fleet-system monitoring-fleet-controller ClusterIP 10.96.112.106 <none> 8080/TCP 4d
cattle-fleet-system monitoring-gitjob ClusterIP 10.96.149.30 <none> 8081/TCP 4d
core core ClusterIP 10.96.129.216 <none> 3088/TCP 4d
default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 4d
kube-system kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 4d
monitoring grafana NodePort 10.96.240.221 <none> 80:30080/TCP 4d
monitoring loki ClusterIP 10.96.226.56 <none> 3100/TCP,9095/TCP 4d
monitoring loki-headless ClusterIP None <none> 3100/TCP 4d
monitoring loki-memberlist ClusterIP None <none> 7946/TCP 4d
nats nats ClusterIP 10.96.59.149 <none> 4222/TCP,6222/TCP,8222/TCP 4d
nats nats-headless ClusterIP None <none> 4222/TCP,6222/TCP,8222/TCP 4d
postgres postgres-postgresql ClusterIP 10.96.193.140 <none> 5432/TCP 4d
postgres postgres-postgresql-hl ClusterIP None <none> 5432/TCP 4d
```
### Pods (kubectl get pods -A)
```
NAMESPACE NAME READY STATUS RESTARTS AGE
agents grenzkontrolle-agent-29275677-dhdnn 0/1 Completed 0 2m57s
agents grenzkontrolle-agent-29275678-f5hp4 0/1 Completed 0 117s
agents grenzkontrolle-agent-29275679-xwk5w 0/1 Completed 0 57s
agents marathon-agent-29275677-phqg9 0/1 Completed 0 2m57s
agents marathon-agent-29275678-h46ks 0/1 Completed 0 117s
agents marathon-agent-29275679-2bxp2 0/1 Completed 0 57s
agents noshow-agent-29275677-l8clq 0/1 Completed 0 2m57s
agents noshow-agent-29275678-5sbgn 0/1 Completed 0 117s
agents noshow-agent-29275679-mcdls 0/1 Completed 0 57s
cattle-fleet-system fleet-agent-6dc7d89d4-kgn6n 1/1 Running 1 (40h ago) 4d
cattle-fleet-system fleet-controller-65bc88b4b4-fkvcb 3/3 Running 4 (40h ago) 4d
cattle-fleet-system gitjob-977f8d74f-jbqld 1/1 Running 2 (40h ago) 4d
cattle-fleet-system helmops-6d76f79c-pqnhh 1/1 Running 2 (40h ago) 4d
core core-c77d8c5-4cmhw 1/1 Running 1 (40h ago) 4d
kube-system coredns-5dd5756b68-g99bm 1/1 Running 1 (40h ago) 4d
kube-system coredns-5dd5756b68-z7wtg 1/1 Running 1 (40h ago) 4d
kube-system etcd-fleet-poc-control-plane 1/1 Running 3 (40h ago) 4d
kube-system kindnet-7bthm 1/1 Running 1 (40h ago) 4d
kube-system kube-apiserver-fleet-poc-control-plane 1/1 Running 3 (40h ago) 4d
kube-system kube-controller-manager-fleet-poc-control-plane 1/1 Running 3 (40h ago) 4d
kube-system kube-proxy-r5dkg 1/1 Running 1 (40h ago) 4d
kube-system kube-scheduler-fleet-poc-control-plane 1/1 Running 3 (40h ago) 4d
local-path-storage local-path-provisioner-6f8956fb48-2bjkz 1/1 Running 2 (40h ago) 4d
monitoring grafana-6848d4d98b-b4pqw 1/1 Running 1 (40h ago) 4d
monitoring loki-0 2/2 Running 2 (40h ago) 4d
monitoring promtail-hsh2k 1/1 Running 1 (40h ago) 4d
nats nats-0 1/1 Running 1 (40h ago) 4d
postgres postgres-postgresql-0 1/1 Running 1 (40h ago) 4d
```
\ No newline at end of file