Plattformbereitstellung mit GitOps

Dieser Blogbeitrag bietet Einblicke in unser neuestes Projekt: den Aufbau der Plattform, die notwendig ist, um unsere neuen Managed Services zu betreiben und zu warten. Die Plattform integriert mehrere Tools für Monitoring und Geheimnisverwaltung, die alle auf AWS-Cloud-Infrastruktur bereitgestellt werden. Unser Ziel war es, ein vollständig beschreibbares Setup zu etablieren, das Infrastructure as Code (IaC) und Continuous Deployment (CD) nutzt und einen umfassenden GitOps Ansatz ermöglicht, um die Plattform einzurichten und zu verwalten.

Plattformübersicht

Unsere Service-Plattform ist darauf ausgelegt, unsere neuen Managed Service-Angebote zu überwachen und zu verwalten. Die Anwendungen, die unsere Plattform bilden, laufen alle auf dem Elastic Kubernetes Service (EKS) von AWS.

Auf dem EKS-Cluster betreiben wir die nächste Generation unseres 4Dmetrics-Observability-Stacks, der Metriken und Logs sammelt, die alle in Grafana visualisiert werden. Zusätzlich umfasst die Plattform eine angepasste HashiCorp Vault-Distribution für die sichere, zentrale Verwaltung von Geheimnissen für unsere Dienste. Darüber hinaus beinhaltet die Plattform Harbor als unser privates Image- und Helm-Chart-Registry.

Die Plattform unterstützt auch wesentliche Tools für unseren GitOps-Ansatz, wie ArgoCD und Crossplane. Schliesslich wird das Cilium Service Mesh auf dem Cluster bereitgestellt, um das Netzwerk zu sichern und zu steuern.

Wie Du sehen kannst, ist die Plattform umfangreich und erfordert die Bereitstellung und Konfiguration zahlreicher Komponenten. All dies wurde mit einem GitOps-Ansatz automatisiert, sodass wir die gesamte Plattform über eine einzige GitLab CI-Pipeline bereitstellen, konfigurieren und sogar zerstören können, ohne manuelles Eingreifen.

Wie haben wir das erreicht?

Bereitstellung der Plattform

Um die verschiedenen Teile, die unsere Plattform ausmachen, bereitzustellen, verwenden wir verschiedene beschreibende Methoden wie IaC und CD. Die Plattform kann in die folgenden drei Teile unterteilt werden:

  1. Cloud-Infrastruktur
  2. Service Mesh & ArgoCD
  3. Anwendungen, die von ArgoCD verwaltet werden

Durch die Verwendung einer GitLab CI-Pipeline können wir die Bereitstellung der Plattform vollständig automatisieren.

Cloud-Infrastruktur

Unsere Cloud-Infrastruktur wird mit standardmässigen IaC-Praktiken bereitgestellt und verwaltet, wobei OpenTofu verwendet wird, um statische Cloud-Ressourcen wie den EKS-Cluster, IAM-Berechtigungen und -Rollen zu definieren. Der Infrastruktur-Code wird über GitLab CI-Jobs in der Bereitstellungspipeline ausgeführt.

Für dynamischere Ressourcen wie EBS-Volumes, Route53-Einträge und EC2-Instanzen verlassen wir uns auf Operatoren innerhalb des EKS-Clusters, um diese als Kubernetes-Manifeste bereitzustellen und zu verwalten. Diese Manifeste werden später von ArgoCD angewendet.

Das Bild unten zeigt die Service-Plattform nach den Phasen „validate“, „plan“ und „apply“ der Pipeline.

Service Mesh & ArgoCD

Alle Anwendungen und Tools, ausser dem Service Mesh, werden auf dem EKS-Cluster mit ArgoCD bereitgestellt und verwaltet. Warum das Service Mesh ausschliessen?

Die Bereitstellung eines Service Meshes ist invasiv für den Cluster und wird am besten vor der Installation anderer Anwendungen durchgeführt. Daher verwenden wir die GitLab CI-Pipeline, um das Cilium Service Mesh direkt nach der Erstellung des Clusters mit IaC über Helm bereitzustellen und zu konfigurieren.

Sobald das Service Mesh eingerichtet ist, wird im letzten Schritt der Pipeline ArgoCD bereitgestellt. Das Bild unten zeigt den Zustand der Service-Plattform nach den Phasen „servicemesh“ und „argocd“ der Pipeline.

Anwendungen, die von ArgoCD verwaltet werden

Alle Anwendungen und Tools, die auf dem EKS-Cluster laufen, werden mit ArgoCD bereitgestellt und gewartet, einschliesslich ArgoCD selbst. Zu diesem Zweck verwenden wir eine angepasste ArgoCD-Distribution, die wir „Argo-Platform“ nennen und die auf dem ArgoCD AutoPilot Projekt basiert.

Dies ermöglicht es, dass alle Anwendungen auf dem EKS-Cluster autonom bereitgestellt werden, sobald ArgoCD über die GitLab-Pipeline installiert ist. Die Anwendungen werden mit Helm, Kustomize oder Kubernetes-Manifeste bereitgestellt, die alle in einem zentralen GitLab-Projekt gespeichert sind.

Das Bild unten zeigt die vollständig bereitgestellte Service-Plattform mit allen verschiedenen Anwendungen.

Verwaltung der Plattform

Bis zu diesem Punkt sind alle erforderlichen Infrastrukturkomponenten sowie alle spezifizierten Anwendungen als Code definiert und in einem GitLab-Projekt gespeichert. Dies ermöglicht es uns, den GitOps-Ansatz zu verfolgen, indem wir geschützte Branches und Funktionen wie CODEOWNERS verwenden, um sicherzustellen, dass Änderungen überprüft und genehmigt werden, bevor sie in die Produktion übernommen werden.

Nun fehlt noch ein letzter Teil, um die Plattform vollständig zu automatisieren: die Konfiguration von HashiCorp Vault und Harbor. Um dies zu lösen, verwenden wir Crossplane.

Crossplane ist wie Terraform oder Pulumi ein IaC-Tool. Der Hauptunterschied besteht jedoch darin, dass Crossplane Kubernetes nutzt, um den Infrastrukturcode anzuwenden und den Konfigurationszustand zu bewahren. Durch die Verwendung von Crossplane-Providern für HashiCorp Vault und Harbor können wir diese als Kubernetes Custom Resource Definitions (CRDs) konfigurieren. Diese CRDs werden als Kubernetes-Manifeste zusammen mit den Bereitstellungsmanifesten in GitLab gespeichert.

Dadurch wird die gesamte Plattform – von der Infrastruktur-Einrichtung über die Anwendungsbereitstellungen bis hin zu deren Konfigurationen – in einem einzigen GitLab-Projekt konsolidiert.

Zusammenfassung

Wir haben es geschafft, die gesamte Einrichtung und den Abbau unserer Service-Plattform vollständig zu automatisieren. Alle benötigten Parameter und Einstellungen sind versionskontrolliert, sodass alle Änderungen überprüft und genehmigt werden, bevor sie in die Produktionsumgebung übernommen werden.

Die Anwendung der GitOps-Prinzipien für unsere Plattform hat sich als ideale Lösung für die Bereitstellung und den Betrieb unserer Kubernetes-Workloads erwiesen. Unsere Umgebung hostet jetzt über 40 Anwendungen, die von ArgoCD und Crossplane verwaltet werden. Sie wurde vollständig von Grund auf in weniger als einer Stunde bereitgestellt und konfiguriert und bietet eine hochverfügbare und stabile Plattform auf der AWS-Cloud-Infrastruktur.

Jegliches Feedback oder Fragen sind sehr willkommen. Wenn Du neugierig auf alle Details bist oder Hilfe bei der Anwendung von GitOps in Deiner Organisation benötigst, zögere nicht, uns zu kontaktieren.

Tobias Schlaepfer

DevOps / Cloud Architect

Immer daran interessiert, neue Technologien und Tools zu erlernen. Entwickelt und implementiert gerne innovative Lösungen mit Schwerpunkt auf Sicherheit und Automatisierung.

Kontakt

Kontaktiere uns

Ruf uns an

Schreib uns eine E-Mail