GitLab-Läufer auf der OCI Kubernetes Engine mit Cluster Autoscaling bereitstellen

Stellen Sie GitLab-Läufer auf der Oracle Cloud Infrastructure (OCI) Kubernetes Engine mit Autoscaling-Funktionalität bereit, um Worker-Knoten automatisch basierend auf der Last für Jobs mit reibungsloser Ausführung in der CI/CD-Pipeline zu skalieren.

Architektur

Diese Architektur zeigt GitLab Runner an, die in einem OCI Kubernetes Engine-(OKE-)Cluster bereitgestellt sind.

Das folgende Diagramm veranschaulicht diese Referenzarchitektur.

Beschreibung von git-lab-runner-kubernetes.png folgt
Beschreibung der Abbildung git-lab-runner-kubernetes.png

git-lab-runner-kubernetes-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.

  • Faultdomains

    Eine Faultdomain ist eine Gruppierung aus Hardware und Infrastruktur innerhalb einer Availability-Domain. Jede Availability-Domain umfasst drei Faultdomains mit unabhängiger Stromversorgung und Hardware. Wenn Sie Ressourcen auf mehrere Faultdomains verteilen, können Ihre Anwendungen physische Serverausfälle, Systemwartungen und Stromausfälle innerhalb einer Faultdomain tolerieren.

  • 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.

  • Servicegateway

    Das Servicegateway bietet Zugriff von einem VCN auf andere Services, wie Oracle Cloud Infrastructure Object Storage. Der Traffic vom VCN zum Oracle-Service wird über die Oracle-Netzwerkstruktur geleitet und durchläuft nicht das Internet.

  • 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.

  • Cloud Guard

    Mit Oracle Cloud Guard können Sie die Sicherheit Ihrer Ressourcen in Oracle Cloud Infrastructure ü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 bestimmte 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 den Responder-Rezepten, die Sie definieren können.

  • Sicherheitszone

    Sicherheitszonen stellen die Best Practices für die Sicherheit von Oracle von Anfang an sicher, indem sie Policys wie die Verschlüsselung von Daten durchsetzen und den öffentlichen Zugriff auf Netzwerke für ein gesamtes Compartment verhindern. Eine Sicherheitszone ist mit einem Compartment mit demselben Namen verknüpft und umfasst Sicherheitszonen-Policys oder ein "Rezept", das für das Compartment und die zugehörigen Sub-Compartments gilt. Sie können kein Standard Compartment in ein Sicherheitszonen-Compartment hinzufügen oder verschieben.

  • Kubernetes Cluster Autoscaler

    Kubernetes Cluster Autoscaler erhöht oder verringert die Größe eines Knotenpools automatisch basierend auf Ressourcenanforderungen, anstatt die Ressourcenauslastung der Knoten im Knotenpool.

  • OKE-Services

    Kubernetes-(OKE-)Service ist eine Abstraktion, die ein logisches Set von Pods und eine Policy definiert, mit der auf sie zugegriffen werden kann. Welche Pods die Ziele eines Service darstellen, wird normalerweise von einem Selektor bestimmt. Die Kubernetes-Services verwalten die automatische Skalierung.

  • OKE-Worker-Knotenpool

    Ein Kubernetes-Worker-Knoten ist ein Worker-Rechner, der containerisierte Anwendungen in einem Kubernetes-Cluster ausführt. Jedes Cluster verfügt über mindestens einen Worker-Knoten.

    Ein Kubernetes-(OKE-)Worker-Knotenpool ist eine Untergruppe von Worker-Knoten in einem Cluster, die alle dieselbe Konfiguration aufweisen. Mit Knotenpools können Sie Pools von Rechnern in einem Cluster erstellen, die unterschiedliche Konfigurationen haben. Beispiel: Sie können in einem Cluster einen Knotenpool mit virtuellen Maschinen und einen anderen mit Bare-Metal-Rechnern erstellen. Ein Cluster muss mindestens einen Knotenpool aufweisen, aber ein Knotenpool benötigt keine Worker-Knoten.

    Die Worker-Knoten in einem Knotenpool sind mit einem Worker-Knotensubnetz in Ihrem VCN verbunden.

  • Internetgateway

    Das Internetgateway ermöglicht Traffic zwischen den öffentlichen Subnetzen in einem VCN und dem öffentlichen Internet.

  • Network Address Translation-(NAT-)Gateway

    Ein NAT-Gateway ermöglicht privaten Ressourcen in einem VCN den Zugriff auf Hosts im Internet, ohne dass diese Ressourcen für eingehende Internetverbindungen freigegeben werden.

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.

    Verwenden Sie regionale Subnetze.

  • Sicherheit

    Mit Oracle Cloud Guard können Sie die Sicherheit Ihrer Ressourcen in OCI proaktiv überwachen und verwalten. Oracle 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 Oracle 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 der Policys im Rezept der Sicherheitszone und lehnt Vorgänge ab, die eine der Policys verletzen.

  • Cloud Guard

    Klonen und passen Sie die von Oracle bereitgestellten Standardrezepte an, um benutzerdefinierte Detektorrezepte und Responder-Rezepte zu erstellen. Mit diesen Rezepten können Sie angeben, welche Art von Sicherheitsverletzungen eine Warnung generieren und welche Aktionen für sie ausgeführt werden dürfen. Beispiel: Sie möchten Objektspeicher-Buckets ermitteln, deren Sichtbarkeit auf "Öffentlich" gesetzt ist.

    Wenden Sie Cloud Guard auf Mandantenebene an, um den breitesten Geltungsbereich abzudecken und den Verwaltungsaufwand für die Verwaltung mehrerer Konfigurationen zu reduzieren.

    Sie können auch das Feature "Verwaltete Liste" verwenden, um bestimmte Konfigurationen auf Detektoren anzuwenden.

  • Netzwerksicherheitsgruppen (NSGs)

    Mit NSGs können Sie eine Gruppe von Ingress- und Egress-Regeln definieren, die für bestimmte VNICs gelten. Wir empfehlen die Verwendung von NSGs und nicht von Sicherheitslisten, da NSGs es Ihnen ermöglichen, die Subnetzarchitektur des VCN von den Sicherheitsanforderungen Ihrer Anwendung zu trennen.

  • OCI Kubernetes Engine

    Obwohl der Operator alle generischen Kubernetes-Cluster unterstützt, verwendet diese Architektur Kubernetes Engine-Cluster. Diese Cluster verfügen über drei Worker-Knoten, die auf verschiedene Availability- und Faultdomains verteilt sind. Das angezeigte Cluster verfügt über Worker-Knoten, die auf verschiedene physische Hosts verteilt sind. Sie können bis zu 1000 Knoten in einem Cluster erstellen.

  • Sicherheitszonen

    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 Oracle Cloud Infrastructure die Vorgänge anhand der Policys im Rezept der Sicherheitszone und lehnt Vorgänge ab, die gegen eine der Policys verstoßen.

  • Compute

    Wählen Sie Ausprägungen mit der entsprechenden OCPUs und Arbeitsspeicherkombination aus, und stellen Sie je nach Bedarf lokale NVMe- und Blockspeicher für Knoten des Kubernetes-Clusters bereit.

Hinweise

Beachten Sie beim Deployment dieser Referenzarchitektur die folgenden Punkte:

  • Performance

    Das automatische Skalieren von Clustern basiert auf der Buchung von Bereitstellungsressourcen. Sie können die Buchung von Jobressourcen steuern, indem Sie die Datei gitlab-ci.yaml bearbeiten.

  • Sicherheit

    Verwenden Sie Policys, die einschränken, wer auf welche Oracle Cloud Infrastructure-(OCI-)Ressourcen in Ihrem Unternehmen zugreifen kann und wie.

    Die OCI Kubernetes Engine ist in OCI Identity and Access Management integriert, was eine einfache Authentifizierung mit nativer OCI-Identitätsfunktionalität ermöglicht.

    Mit den folgenden Variablen können Sie die Ressourcenbuchung für einen Job steuern:

    KUBERNETES_CPU_REQUEST: 1  
    KUBERNETES_MEMORY_REQUEST: 4000M
  • Skalierbarkeit

    Sie können Ihre Anwendung horizontal skalieren, indem Sie die Anzahl der Worker-Knoten im Kubernetes-Cluster je nach Belastung aktualisieren. Ebenso können Sie die Anzahl der Worker-Knoten im Cluster reduzieren. Wenn Sie einen Service im Kubernetes-Cluster erstellen, können Sie einen Load Balancer erstellen, um Servicetraffic auf die Knoten zu verteilen, die diesem Service zugewiesen sind. Die automatische Skalierung von Clustern basiert auf der Buchung von Bereitstellungsressourcen. Sie können die Buchung steuern, indem Sie die Datei gitlab-ci.yaml bearbeiten.

    Hinweis:

    Die Jobressourcenbuchung mit Parametern in der Datei gitlab-ci.yaml darf die maximal zulässige Anzahl an Buchungen, die für den GitLab-Läufer als Teil der folgenden Zeilen in der Datei locals.tf definiert wurden, nicht überschreiten:
    cpu_request_overwrite_max_allowed = "1"        
    memory_request_overwrite_max_allowed = "4096M"
  • Kostenfaktor

    Die Verwendung der OCI Kubernetes Engine ist kostenlos, und die Verwendung der Oracle Container Registry ist kostenlos. Die Knoten im Kubernetes-Cluster werden mit der gleichen Rate wie alle anderen Compute-Instanzen mit derselben Ausprägung berechnet.

Stellen Sie

Mit dem Terraform-Code können Sie ein OCI Kubernetes Engine-(OKE-)Cluster mit allen abhängigen Ressourcen (Networking, Worker-Knotenpool), das automatische Skalieren von Clustern und GitLab-Läufer bereitstellen. Der Code ist als Beispielstack in Oracle Cloud Infrastructure Resource Manager verfügbar. Sie können den Code auch von GitHub herunterladen und an Ihre Anforderungen anpassen.
  • Mit dem Beispielstack in Oracle Cloud Infrastructure Resource Manager bereitstellen:
    1. Navigieren Sie zu In Oracle Cloud bereitstellen.

      Wenn Sie noch nicht angemeldet sind, geben Sie den Mandanten und die Benutzerzugangsdaten ein.

    2. Wählen Sie die Region aus, in der der Stack bereitgestellt werden soll.
    3. Befolgen Sie die Anweisungen und Anweisungen zum Erstellen des Stacks auf dem Bildschirm.
    4. Nachdem Sie den Stack erstellt haben, klicken Sie auf Terraform-Aktionen, und wählen Sie Planen aus.
    5. Warten Sie, bis der Job abgeschlossen ist, und prüfen Sie den Plan.

      Um Änderungen vorzunehmen, kehren Sie zur Seite "Stackdetails" zurück, klicken Sie auf Stack bearbeiten, und nehmen Sie die erforderlichen Änderungen vor. Führen Sie dann die Aktion Planen erneut aus.

    6. Wenn keine weiteren Änderungen erforderlich sind, kehren Sie zur Seite "Stackdetails" zurück, klicken Sie auf Terraform-Aktionen, und wählen Sie Anwenden aus.
  • Mit dem Terraform-Code in GitHub bereitstellen:
    1. Gehen Sie zu GitHub.
    2. Klonen Sie das Repository, oder laden Sie es auf Ihren lokalen Rechner herunter.
    3. Befolgen Sie die Anweisungen im Dokument README.

Mehr erfahren

Erfahren Sie mehr über Oracle Cloud Infrastructure (OCI) und Kubernetes.

Im Lösungshandbuch Best Practice Framework for Oracle Cloud Infrastructure finden Sie Best Practices.

Prüfen Sie diese zusätzlichen OCI- und GitLab-Ressourcen:

Danksagungen

  • Autoren: Chandrashekar Avadhani, Andrei Ilas
  • Mitwirkende: Ben Romine, Lukasz Feldman