Skalieren und optimieren Sie Jenkins auf der Oracle Cloud Infrastructure Kubernetes Engine

Jenkins ist ein CI/CD-System, das immer noch von Entwicklern verwendet wird, um ihren Code automatisch zu verifizieren, zu erstellen und bereitzustellen, sodass sie sich nur auf die Bereitstellung neuer Funktionen konzentrieren können.

Mit dem Release von Kubernetes sind verteilte und Shared-Nothing-Architekturen allmählich zur Norm geworden, so dass alle neuesten CI/CD-Systeme auf Kubernetes bereitgestellt werden. Was Jenkins betrifft, ist die Controller-/Agent-Architektur möglicherweise nicht skalierbar genug für große Unternehmen und Entwicklungsteams, aber dank des Aufwands der Community ist es möglich, Jenkins zu containerisieren und auf Cloud-native Weise bereitzustellen.

Sie können Jenkins auf der Oracle Cloud Infrastructure Kubernetes Engine (OCI Kubernetes Engine oder OKE) hosten, um Ihre Build-Automatisierung zu zentralisieren und sie bei wachsenden Softwareprojekten zu skalieren. Durch die Implementierung eines skalierbaren Jenkins auf OKE können Entwickler neue Services mit Agilität entwickeln und ihre CI/CD-Pipelines einfach skalieren.

Architektur

Diese Referenzarchitektur auf hoher Ebene zeigt ein Beispiel für mehrere Jenkins-Deployments auf OKE. Durch die Bereitstellung von Jenkins auf OKE as a Service ist es möglich, nach Bedarf zu skalieren.

Jeder Jenkins-Controller-Pod verfügt über ein persistentes Volume, um die Pipelinehistorie und die zusätzlichen Plug-ins zu behalten, die von Teams installiert werden. Die Jenkins-Agents werden jedes Mal erstellt, wenn ein Pipelinejob am Ende automatisch ausgelöst und gelöscht wird.

Jede Jenkins-Instanz kann entweder einzeln über einen Load Balancer oder mit einem Kubernetes-Ingress bereitgestellt werden.

Das folgende Diagramm veranschaulicht diese Referenzarchitektur.



oci-jenkins-oke-arch-oracle.zip

Die Architektur umfasst die folgenden Komponenten:

  • Region

    Eine Oracle Cloud Infrastructure-Region ist ein lokalisierter geografischer Bereich, der mindestens ein Data Center enthält, das als Availability-Domain bezeichnet wird. Regionen sind unabhängig von anderen Regionen, und große Entfernungen können sie trennen (über Länder oder sogar Kontinente).

  • Availability-Domains

    Availability-Domains sind eigenständige, unabhängige Data Center innerhalb einer Region. Die physischen Ressourcen in jeder Availability-Domain sind von den Ressourcen in den anderen Availability-Domains isoliert, was eine Fehlertoleranz sicherstellt. Availability-Domains haben keine gemeinsame Infrastruktur wie Stromversorgung oder Kühlung oder das interne Availability-Domainnetzwerk. Daher sollte ein Fehler in einer Availability-Domain sich nicht auf die anderen Availability-Domains in der Region auswirken.

  • Virtuelles Cloud-Netzwerk (VCN) und Subnetze

    Ein VCN ist ein anpassbares, softwaredefiniertes Netzwerk, das Sie in einer Oracle Cloud Infrastructure-Region einrichten können. Wie herkömmliche Data Center-Netzwerke erhalten Sie mit VCNs die Kontrolle über Ihre Netzwerkumgebung. Ein VCN kann mehrere sich nicht überschneidende CIDR-Blöcke aufweisen, die Sie nach dem Erstellen des VCN ändern können. Sie können ein VCN in Subnetze segmentieren, die sich auf eine Region oder eine Availability-Domain beschränken. Jedes Subnetz besteht aus einem Bereich zusammenhängender Adressen, die sich nicht mit anderen Subnetzen im VCN überschneiden. Sie können die Größe eines Subnetzes nach der Erstellung ändern. Ein Subnetz kann öffentlich oder privat sein.

  • Load Balancer

    Der Oracle Cloud Infrastructure Load Balancing-Service ermöglicht automatisierte Trafficverteilung von einem einzelnen Einstiegspunkt auf mehrere Server im Backend.

  • Sicherheitsliste

    Für jedes Subnetz können Sie Sicherheitsregeln erstellen, die Quelle, Ziel und Typ des Traffics angeben, der im Subnetz und aus dem Subnetz zugelassen werden muss.

  • Kubernetes Engine

    Oracle Cloud Infrastructure Kubernetes Engine (OCI Kubernetes Engine oder OKE) ist ein vollständig verwalteter, skalierbarer und hoch verfügbarer Service, mit dem Sie Ihre Containeranwendungen in der Cloud bereitstellen können. Sie geben die Compute-Ressourcen an, die Ihre Anwendungen benötigen, und Kubernetes Engine stellt sie in Oracle Cloud Infrastructure in einem vorhandenen Mandanten bereit. OKE automatisiert mit Kubernetes das Deployment, die Skalierung und die Verwaltung containerisierter Anwendungen über Cluster von Hosts hinweg.

Empfehlungen

Verwenden Sie die folgenden Empfehlungen als Ausgangspunkt. Ihre Anforderungen können von der hier beschriebenen Architektur abweichen.
  • VCN

    Wenn Sie ein VCN erstellen, bestimmen Sie die Anzahl der erforderlichen CIDR-Blöcke und die Größe jedes Blocks basierend auf der Anzahl der Ressourcen, die Sie an Subnetze im VCN anhängen möchten. Verwenden Sie CIDR-Blöcke, die sich innerhalb des privaten IP-Standardadressraums befinden.

    Wählen Sie CIDR-Blöcke aus, die sich nicht mit einem anderen Netzwerk (in Oracle Cloud Infrastructure, Ihrem On-Premise-Data Center oder einem anderen Cloud-Provider) überschneiden, zu dem Sie private Verbindungen einrichten möchten.

    Nachdem Sie ein VCN erstellt haben, können Sie die CIDR-Blöcke ändern, hinzufügen und entfernen.

    Berücksichtigen Sie beim Entwerfen der Subnetze Ihren Trafficfluss und Ihre Sicherheitsanforderungen. Hängen Sie alle Ressourcen innerhalb einer bestimmten Ebene oder Rolle an dasselbe Subnetz an, das als Sicherheitsgrenze dienen kann.

  • Sicherheit

    Mit Oracle Cloud Guard können Sie die Sicherheit Ihrer OCI-Ressourcen in Oracle Cloud Infrastructure proaktiv überwachen und verwalten. Cloud Guard verwendet Detektorrezepte, die Sie definieren können, um Ihre Ressourcen auf Sicherheitsschwächen zu untersuchen und Operatoren und Benutzer auf riskante Aktivitäten zu überwachen. Wenn eine falsche Konfiguration oder unsichere Aktivität erkannt wird, empfiehlt Cloud Guard Korrekturmaßnahmen und unterstützt Sie bei der Ausführung dieser Aktionen basierend auf Responder-Rezepten, die Sie definieren können.

    Für Ressourcen, die maximale Sicherheit erfordern, empfiehlt Oracle die Verwendung von Sicherheitszonen. Eine Sicherheitszone ist ein Compartment, das mit einem von Oracle definierten Rezept von Sicherheits-Policys verknüpft ist, die auf Best Practices basieren. Beispiel: Die Ressourcen in einer Sicherheitszone dürfen nicht über das öffentliche Internet zugänglich sein und müssen mit vom Kunden verwalteten Schlüsseln verschlüsselt werden. Wenn Sie Ressourcen in einer Sicherheitszone erstellen und aktualisieren, validiert OCI die Vorgänge anhand von Policys im Rezept der Sicherheitszone und lehnt Vorgänge ab, die eine der Policys verletzen.

  • Load-Balancer-Bandbreite

    Beim Erstellen des Load Balancers können Sie entweder eine vordefinierte Ausprägung auswählen, die eine feste Bandbreite bereitstellt, oder eine benutzerdefinierte (flexible) Ausprägung angeben, in der Sie einen Bandbreitenbereich festlegen und den Service die Bandbreite automatisch basierend auf Trafficmustern skalieren lassen. Bei beiden Verfahren können Sie die Ausprägung nach dem Erstellen des Load Balancers jederzeit ändern.

  • Oracle Cloud Infrastructure Kubernetes Engine und Compute-Ausprägungen

    Mindestens zwei Knotenpools werden auf der OCI Kubernetes Engine bereitgestellt: einer für die Jenkins-Controller und einer für die Jenkins-Agents.

    Um Kosten zu sparen und die gesamte Lösung zu optimieren, wird empfohlen, VM.Standard.A1 zu verwenden. Flex-Instanzen für Jenkins-Controller, da Jenkins vollständig mit ARM-Instanzen kompatibel ist. Für den Agent-Knotenpool wird empfohlen, präemptive Instanzen zu verwenden, da die Pipelinejobs im Allgemeinen von kurzer Dauer und fehlertolerant sind.

  • Oracle Cloud Infrastructure Registry

    Oracle Cloud Infrastructure Registry ist ein privates OCI-konformes Container-Repository zum Hosten von Images. In dieser Architektur ist es optional und kann verwendet werden, um Ihre eigenen benutzerdefinierten Jenkins-Images mit allen erforderlichen Plugins zu hosten. Es wird empfohlen, ein benutzerdefiniertes Jenkins-Controllerimage zu erstellen, um die Sicherheit durchzusetzen und alle häufig verwendeten Plug-ins in einem einzigen Containerimage zu verpacken.

Hinweise

Beachten Sie beim Deployment dieser Referenzarchitektur die folgenden Punkte:

  • Performance und Skalierbarkeit

    Durch die Verwendung von Kubernetes ist es einfach, sowohl den Jenkins-Controller als auch die Agenten zu skalieren, wenn das Entwicklungsteam wächst oder schrumpft. Da die Agent-Pods bei jeder Ausführung eines Pipelinejobs erstellt werden, können Sie außerdem die von diesen Pods verwendeten Ressourcen pro Pipelinebasis anpassen.

  • Verfügbarkeit

    Um die Verfügbarkeit zu maximieren, wird empfohlen, mehrere OKE-Knoten in verschiedenen Verfügbarkeits- oder Faultdomains bereitzustellen. Um Jenkins vor freiwilligen und unfreiwilligen Störungen zu schützen, ist es außerdem möglich, den standardmäßigen Kubernetes-Mechanismus wie Pod-Störungsbudgets und Pod-Anti-Affinität zu verwenden.

  • Kostenfaktor

    Ziel dieser Architektur ist es auch, die Kosten bei der Verwendung von Jenkins auf OKE zu minimieren. Es ist möglich, ARM-Knoten für Jenkins-Controller zu verwenden, die ein Viertel der flexiblen Compute-Instanzen kosten. Wie bei Jenkins-Agents ermöglichen präemptive Instanzknoten Kunden, die Hälfte des Budgets zu sparen.

Danksagungen

  • Author: Alberto Campagna
  • Contributor: Marta Tolosa