tech-trends

Sorgenfreier 24/7 Applikationsbetrieb

// 25-05-2023

gepardec-run in einem Satz: “Wir bauen und betreiben deine Individualsoftware.” So machen wir das im Detail.

… deine Individualsoftware.” Grundsätzlich können wir fast jede Software in Containern in OpenShift betreiben. Bei Individualsoftware, vor allem im Java-Umfeld, sind wir zu Hause und liegen im Speziellen unsere Stärken.

Wir bauen und betreiben…” drückt aus, dass wir die Verantwortung übernehmen und nicht nur Werkzeuge oder Beratung anbieten.

Wir bauen und betreiben…” sagt aus, dass der Build-Prozess einer unserer Stärken ist. Absichtlich nicht “entwickeln”. (Java-) Entwicklung bieten wir an, aber nicht im Rahmen dieses Angebots.

“... und betreiben…” Du als Kunde musst dich nicht um Installation und den Betrieb kümmern. Wir sorgen dafür, dass die Software läuft und du einfach die Funktionen nutzen kannst.

Etwas ausführlicher: “Wir stellen eine Plattform und Dienstleistungen zum Entwickeln, Bauen und Betreiben von Individualsoftware auf Basis der OpenShift Container Plattform zur Verfügung.”

// OpenShift und gepardec-run

Red Hat OpenShift bildet die Basis sowohl für die gepardec-run Container-Plattform als auch für Betriebs- und Entwicklungswerkzeuge. Damit Anwendungen auf gepardec-run laufen können, müssen sie auf OpenShift lauffähig sein. Die Werkzeuge von gepardec-run gehen in einigen Teilen über OpenShift hinaus.

Build Pipelines

In OpenShift können Build Pipelines mittels 

erstellt werden. In gepardec-run erstellen wir Pipelines mittels

Deployment

Wir setzen primär auf das in OpenShift vorhandene Argo CD. Das Deployment ist eng mit dem Build-Prozess (Argo Workflows) integriert, sodass Pipelines von der Entwicklung bis zur Produktion definiert werden können.

Observability

Unter Observability fassen wir die Themen Metriken, Logging und Tracing zusammen. OpenShift bietet derzeit dafür eher dürftige einzelne GUIs und einige vorgefertigte, nicht veränderbare Dashboards.

Wir arbeiten an einer integrierten Lösung, die Metriken, Logging und Tracing auf Basis von Grafana zusammenführt. Insbesondere sollen alle Metriken, egal aus welchen Bereichen (Entwicklung oder Betrieb), zentral verknüpfbar und auswertbar sein.

Alerting

Wir verwenden den AlertManager von OpenShift Monitoring.

Container Registry

Wir binden eine Container Registry des Kunden ein oder verwenden die interne OpenShift Registry.

Source Code Repository

Wir integrieren Git-Repos des Kunden oder freie, wie z.B. GitHub. OpenShift hat kein Source Repository integriert.

Security Scans

Trivy wird zum Scannen zur Build-Zeit verwendet. OpenShift hat per Default keine Security Scans. Zusatzprodukte können eingebunden werden.

// Managed OpenShift Angebote und gepardec-run

Es gibt mehrere Managed OpenShift Angebote. Siehe z.B. https://developers.redhat.com/products/openshift/overview oder auch https://www.appuio.ch/offering/managed/

Wie unterscheiden sich diese Angebote von gepardec-run?

Kurzfassung: Bei gepardec-run benötigst du als Kunde  kein Wissen zu OpenShift oder Kubernetes.

Managed OpenShift Angebote stellen die OpenShift Plattform zur Verfügung. Sie ist dann grundsätzlich installiert und läuft. Um sie zu verwenden, benötigst du aber einerseits beträchtliches Kubernetes-Wissen, wie Anwendungen darauf installiert und konfiguriert werden, andererseits auch anwendungsspezifisches technisches Wissen zum Betrieb der Applikationen. Dieses Wissen wird in gepardec-run bereitgestellt

Für die Entwicklung gilt analoges zum Betrieb. Managed OpenShift Angebote stellen einige Tools zur Verfügung, aber das Wissen über den Aufbau effektiver Build Prozesse muss beim Kunden vorhanden sein. Auch hier bietet gepardec-run einen wesentlichen Mehrwert.

// gepardec-run powered by VSHN

gepardec-run wird in Zusammenarbeit mit VSHN durchgeführt, wobei VSHN den OpenShift Cluster (auf A1 Exoscale Infrastruktur) baut und zur Verfügung stellt  und den 24/7 Support im technischen Betrieb gewährleistet. 

// Begriffsklärung

Technischer Anwendungsbetrieb

Unter technischem Anwendungsbetrieb verstehen wir, dass wir sicherstellen, dass Anwendungen technisch korrekt zur Verfügung stehen. Das beinhaltet, dass die Anwendung

  • … für den Anwender verfügbar ist 
  • … genügend Ressourcen an Speicher und CPU erhält
  • … die Verbindung zu benötigten internen Komponenten funktioniert
  • … die Verbindung zu benötigten externen Systemen funktioniert
  • … aus Securitysicht auf aktuellem Stand ist

Die Tätigkeiten des technischen Anwendungsbetriebs werden von der Rolle Technische:r Anwendungs-Betriebsmitarbeiter:in ausgeführt. Gute Kenntnisse im Thema Observability nutzt er oder sie, um auch andere Bereiche zu unterstützen.

Benötigte Kenntnisse:

  • Wie arbeitet Kubernetes, wie werden Applikationen darauf gestartet
  • Kubernetes Ressourcen und Umgang damit
  • Wie bekommt man Infos über Kernmetriken von in Kubernetes wie CPU oder Memory
  • Konzepte und Umgang mit Observability, Werkzeuge wie Grafana, Prometheus, …
  • Debuggen von Applikationen in Kubernetes
  • Grobes Verständnis über fachliche Zusammenhänge der Anwendungen

Fachlicher Betrieb

Der fachliche Betrieb ist dafür verantwortlich, dass die Anwendung inhaltlich korrekt funktioniert.

Die Tätigkeiten des fachlichen Betriebs werden von der Rolle Fachliche:r Betriebsmitarbeiter:in ausgeführt. 

Benötigte Kenntnisse:

  • Detailliertes Verständnis über fachliche Zusammenhänge der Anwendungen
  • Ablauf der Geschäftsprozesse
  • Datenmodelle und ihre fachliche Funktion
  • Grobes Verständnis der technischen Applikationslandschaft

Fachliche Feature-Entwicklung

Die Feature Entwicklung ist der Kern der Softwareentwicklung. Sie implementiert den für die fachlichen Funktionen notwendigen Code.

Die fachliche Feature-Entwicklung wird von der Rolle Fachliche:r Feature Entwickler:in ausgeführt.

Benötigte Kenntnisse:

  • Implementierungssprache der jeweiligen Fachanwendung (z.B. Java)
  • Softwarearchitektur
  • Interne Details der Fachapplikation
  • Grobes Verständnis zu Kubernetes und Cloud Plattformen

Build Automatisierung

Die Build Automatisierung ist dafür verantwortlich, dass die für die Entwicklung notwendigen Prozesse wie Build oder automatisierte Tests technisch funktionieren. Sie sorgt dafür, dass die fachliche Feature Entwicklung sich auf ihre Kernaufgabe konzentrieren kann. Die für die Tätigkeit nötige Rolle bezeichnen wir als Build Automatisierer:in

Benötigte Kenntnisse:

  • Konzepte und Werkzeuge zum Aufbau von Build- und Deployment Pipelines
  • Kubernetes Ressourcen und Umgang damit
  • Konfiguration der in der Applikation verwendeten Runtime (z.B. Quarkus, EAP)
  • Abhängigkeiten zu anderen Applikationen
  • Skriptsprachen und Werkzeuge zur Automatisierung von wiederkehrenden Tätigkeiten in der Entwicklung.

Transition

Die Transition ist das Bindeglied zwischen Entwicklung bzw. Build und Betrieb. Sie ist dafür verantwortlich, dass die in der Entwicklung erzeugten Anwendungen in Produktion gelangen. Dafür ist organisatorisch die Rolle Release Koordinator:in und auf technischer Ebene die Rolle Deployment Automatisierer:in verantwortlich.

Deployment Automatisierung

Dabei werden technische Deploymentprozesse von der Rolle Deployment Automatisierer:in entwickelt und umgesetzt.

Benötigte Kenntnisse:

  • Konzepte und Werkzeuge zum Deployment komplexer Applikationslandschaften
  • GitOps Konzepte und Werkzeuge, ArgoCD
  • Kubernetes Ressourcen und Umgang damit
  • Zusammenhänge der Applikationslandschaft

Release Koordination

Die Rolle Release Koordinator:in sorgt dafür, dass bei der Einführung einer neuen Funktion (neue Applikation oder neue Version einer Applikation) die fachlichen und organisatorischen Voraussetzungen gegeben sind.

Benötigte Kenntnisse:

  • Releasepläne der Anwendungen und der Abhängigkeiten
  • Fachliche Zusammenhänge der Anwendungen
  • Grobes Verständnis zu Kubernetes und Cloud Plattformen

Werkzeuge für Betrieb bereitstellen

Bei diesen Tätigkeiten werden von der Rolle Betriebs-Tools Ersteller:in Applikationen bereitgestellt, die der Betrieb für seine Arbeit benötigt. z.B. Monitoring oder Logging Tools. Sie sind danach in einem Zustand, wie sie vom Erzeuger per Default ausgeliefert wurden. Es gibt keine Anpassung an die speziellen Anforderungen des Betriebs. Diese werden von der Rolle Technische:r Anwendungs-Betriebsmitarbeiter:in durchgeführt.

Benötigte Kenntnisse:

  • Kubernetes Ressourcen und Umgang damit

Werkzeuge für Entwicklung bereitstellen

Analog zu oben für die Rolle Entwicklungs-Tools Ersteller:in für Entwicklung statt Betrieb.

Benötigte Kenntnisse:

  • Kubernetes Ressourcen und Umgang damit
Rollen

// Rollenverteilung und Zusammenarbeit mit Kunden

Die grobe Aufteilung der Verantwortung zwischen dir als Kunde und Gepardec bei der Arbeit in gepardec-run ist:

Du als Kunde kümmerst dich um die fachlichen Aspekte deiner Applikationslandschaft und um die Implementierung der Geschäftslogik. Die Mitarbeiter sollten ein grundlegendes Verständnis zur Cloud Plattform haben, benötigen aber kein Detailwissen, wie die Plattform installiert, bzw. wie Applikationen darauf installiert werden.

Gepardec kümmert sich darum, dass aus vorhandenem Source Code eine ausführbare Applikation wird und diese stabil und sicher auf einer Cloud Plattform betrieben wird.

Aus dieser Aufgabenverteilung ergeben sich Schnittstellen, die Notwendigkeit zur Zusammenarbeit und gegenseitige Anforderungen.

Technischer Betrieb – Fachlicher Betrieb

Beide Rollen sind für die korrekte Funktion der Anwendungen verantwortlich. Der eine auf fachlicher, der andere auf technischer Ebene. Die Grenzen, besonders bei komplexen Fehlerbildern oder Performanceproblemen, sind nicht immer scharf zu ziehen. Dadurch ist ein gewisses Verständnis der jeweils anderen Domäne nötig. Der technische Betrieb benötigt vom fachlichen Betrieb Informationen über die fachlichen Zusammenhänge in den Anwendungen. Umgekehrt kann der technische Betrieb den fachlichen Betrieb bei Auswertungen oder bei der Erstellung von Dashboards unterstützen, die diesem bei der Analyse der Anwendung helfen.

Technischer Betrieb – Entwicklung

Die Rolle Technische:r Anwendungs-Betriebsmitarbeiter:in ist auch für die Sicherheit der Applikationen verantwortlich. Dazu gehört, dass die Systeme auf aktuellem technischen Stand sind. Versionsupgrades benötigen aber oft auch Tätigkeiten der Entwicklung (fachliche:r Feature-Entwickler:in, Build Automatisierer:in). Auf Anforderung müssen diese Tätigkeiten durchgeführt werden.

Auch zur Verbesserung der Observability, z.B. beim Einbau von speziellen Metriken, kann der Betrieb Änderungen von der Entwicklung benötigen.

Bei der Fehleranalyse ist eine Zusammenarbeit von Entwicklung und technischem Betrieb notwendig. Damit dies effizient geschieht, stellt der technische Betrieb der Entwicklung Informationen, z.B. Logs und Metriken zur Verfügung.

Deployment Automatisierer:in – Release Koordinator:in

Beide Rollen sind für die Inbetriebnahme von Anwendungen verantwortlich. Einerseits auf technischer, andererseits auf organisatorischer Ebene. Damit die Inbetriebnahme reibungslos funktioniert, müssen sich beide Rollen zeitlich und inhaltlich abstimmen.

Build Automatisierer:in – fachliche:r Feature-Entwickler:in

Die Rolle Build Automatisierer:in benötigt von der Feature Entwicklung Informationen, welche Komponenten es gibt und wie sie zusammenspielen. 

Umgekehrt stellt die Rolle Build Automatisierer:in der Feature-Entwicklung Auswertungen über Builds und Tests zur Verfügung. Darüber hinaus unterstützt sie bei entwicklungsspezifischen Automatisierungen.

// Organisation und Rollen

Die oben dargestellten Rollen werden in gepardec-run nicht unbedingt von unterschiedlichen Personen ausgeführt. Die Rollen Technische:r Anwendungs-Betriebsmitarbeiter:in, Deployment Automatisierer:in, Build Automatisierer:in sollten für eine Applikation von 1-2 Personen ausgefüllt werden. Wir präferieren die Organisation in cross-funktionalen Teams, in denen ein Team eine Anwendung unterstützt. Die Teams sollten einem agilen Prozess (z.B. Scrum) folgen.

// Autor:in

Erhard Siegl