Auf einen Blick: Spinnaker ist eine Open-Source-Continuous Delivery-Plattform, die für Multi-Cloud-Deployments entwickelt wurde und automatisierte Software-Release-Prozesse, insbesondere mit Kubernetes, verbessert. Es integriert sich in verschiedene CI-Tools und unterstützt vielfältige Bereitstellungsstrategien für ein effektives Anwendungsmanagement.
- Unterstützt Bereitstellungen über AWS, Azure und GCP.
- Integriert mit Jenkins und Travis CI für optimierte Arbeitsabläufe.
In dieser Ära schnelllebiger Technologien bewegen sich immer mehr Organisationen und Teams zu agilen Praktiken mit sich schnell entwickelnden Softwareentwicklungslebenszyklen. Damit ist Continuous Delivery (CD) zu einem wichtigen Bestandteil des DevOps-Prozesses geworden, bei dem der gesamte Software-Release-Prozess automatisiert ist – der Build, das Testen, die Bereitstellung.
Mit der Beliebtheit von Kubernetes für die Entwicklung containerisierter Anwendungen wächst der Bedarf an einer zuverlässigen Continuous Delivery-Plattform mit nativer Unterstützung für Deployments auf Kubernetes-Clustern.
In diesem Artikel werden wir Spinnaker vorstellen, ein Tool, das die Integration von Kubernetes in eine CD-Pipeline erleichtert.
Was ist Spinnaker?
Spinnaker ist eine Open-Source-Continuous Delivery-Plattform, die sich auf Multi-Cloud-Implementierungen spezialisiert hat. Ursprünglich von Netflix als Nachfolger ihrer internen Asgard-Plattform entwickelt, hat sich Spinnaker inzwischen zu einer eigenständigen Continuous Delivery-Plattform entwickelt.
Spinnaker stellt mit seiner leistungsstarken Abstraktionsschicht die notwendigen Werkzeuge bereit, um Ihren Code vom Commit bis zur Multi-Cloud-Lieferung zu verwalten.
(Lesen Sie unsere umfassende Einführung zum Spinnaker.)
Spinnaker-Merkmale
Schauen wir uns die wichtigsten Merkmale von Spinnaker an.
Multi-Cloud-Bereitstellung
Spinnaker unterstützt nativ die Bereitstellung von Anwendungen in mehreren Cloud-Anbietern. Es unterstützt Cloud-Plattformen wie AWS, Azure, GCP, Oracle Cloud, Cloud Foundry und OpenStack.
CI-Integrationen
Die robusten und automatisierten Release-Pipelines von Spinnaker lassen sich problemlos mit anderen Tools integrieren, wie zum Beispiel:
- Jenkins
- Travis CI
- Git-Event
- CRON-Jobs
Dies ermöglicht es Entwicklern, verschiedene Aufgaben effektiv auszuführen, von der Artefaktsammlung bis zur Pipeline-Auslösung.
Überwachungs- und Benachrichtigungsintegrationen
Spinnaker lässt sich problemlos mit Überwachungslösungen wie Datadog, Prometheus, SignalFx und Stackdriver für die Erfassung und Analyse von Metriken integrieren.
Zusätzlich können Sie Spinnaker so konfigurieren, dass es mit Diensten wie Slack, HipChat oder SMS funktioniert, um Benachrichtigungen bereitzustellen.
Unterstützung für verschiedene Einsatzstrategien
Spinnaker verfügt über integrierte Einsatzstrategien wie Highlander, Canary und Rot/Schwarz und lässt sich leicht an jede individuelle Einsatzstrategie anpassen.
Darüber hinaus ermöglicht Spinnakers Fähigkeit, unveränderliche Bilder zu erstellen und bereitzustellen, Entwicklern:
- Schnellere Bereitstellung mit einfacheren Rollbacks
- Um Konfigurationsabweichungen viel effektiver zu gehen.
Eingebaute Sicherheitspraktiken
Spinnaker verfügt über starke Sicherheitsfunktionen wie integrierte rollenbasierte Zugriffskontrolle mit Unterstützung für mehrere Authentifizierungsmechanismen, darunter Oauth, LDAP, X.509-Zertifikate, Azure Groups usw. Darüber hinaus ermöglicht es eine bequeme Isolierung von Projekten für maximale Sicherheit.
Weitere Funktionen von Spinnaker, wie manuelle Urteile und Chaos-Monkey-Integrationen , ermöglichen es Entwicklern, die Deployments vor der Veröffentlichung auf Instanzfehler zu überprüfen und zu testen.
Kontinuierliche Lieferung mit Spinnaker
Spinnaker besteht aus zwei Kernfunktionssätzen, die bei der Bereitstellung hilfreich sind:
- Anwendungsmanagement
- Anwendungsbereitstellung
Anwendungsmanagement
Die Anwendungsverwaltungsfunktion umfasst alle notwendigen Werkzeuge, um die Cloud-Infrastruktur anzuzeigen und zu verwalten. Spinnaker arbeitet nach einem Services-Modell, bei dem mehrere Services zur Bereitstellung eines Produkts verwendet werden. Diese Arten von Services werden manchmal als "Anwendungen" oder "Microservices" bezeichnet.
Anwendungen, Cluster und Servergruppen sind die Schlüsselkomponenten der Anwendungsverwaltungsfunktion. Sie definieren Dienste. Dann stellen Load Balancer und Firewalls diese Dienste der breiteren Welt zur Verfügung.
- Anwendungen sind jede Ansammlung von Clustern mit Lastausgleichern und Firewalls. Sie stellen einen Dienst dar, der mit allen Service- und Infrastrukturkonfigurationen bereitgestellt werden muss.
- Cluster sind die logischen Gruppierungen von Servergruppen. Wichtig ist, dass Cluster nicht Kubernetes-Clustern entsprechen. Sie sind einfach Sammlungen von Servergruppen, unabhängig von der zugrunde liegenden Hardware- oder Softwarearchitektur.
- Servergruppen sind die Basisressource von Spinnaker, das das deployable Artefakt (Container-Image, Quelle, VM-Image usw.) mit den Grundkonfigurationen wie No-of-Instanzen, Skalierungsrichtlinien, Metadaten usw. identifiziert. Wenn sie bereitgestellt werden, entsprechen diese Servergruppen einer Sammlung von Instanzen laufender Software wie Kubernetes-Pods oder VM-Instanzen. Servergruppen können auch mit Lastausgleichern und Firewalls verknüpft werden.
- Der Load Balancer verwaltet den Datenverkehr zu jeder Instanz von Servergruppen, indem er sich mit Ingress-Protokollen und Ports verknüpft.
- Die Firewall fungiert als Gateway zur Verwaltung des Netzwerkzugangs. Darüber hinaus integriert sie Firewall-Regeln, die durch IP-Bereiche, Kommunikationsprotokolle und Ports definiert sind, um Verkehr zuzulassen.
Anwendungsbereitstellung
Der Bereitstellungsfunktionssatz erstellt und verwaltet die kontinuierlichen Auslieferungspipelines. Er besteht aus:
- Pipeline. Die Kernkomponente der Spinnaker-Anwendungsbereitstellung, die Pipeline, besteht aus mehreren Phasen, in denen verschiedene Aufgaben zur Bereitstellung der Anwendung ausgeführt werden. Diese Pipelines können mit anderen CI-Tools und Benachrichtigungsmethoden integriert werden, um eine nahtlose CI/CD-Pipeline zu erstellen.
- Phase. Dies ist eine Reihe aufeinanderfolgender Aufgaben, die in der Pipeline ausgeführt werden. Spinnaker bietet einige gängige Phasen, die leicht in die Pipeline integriert werden können. Zum Beispiel können wir Phasen wie Deploy, Path, Scale, Undo Rollout usw. für Kubernetes bereitstellen. Zusätzlich können Benutzer benutzerdefinierte Stages mit Webhooks und Run-Jobs erstellen.
- Aufgabe. Die kleinste Komponente der Bereitstellungsfunktion, eine Aufgabe besteht aus einer bestimmten Aufgabe, die in einer Phase der Pipeline ausgeführt wird.
Einfaches Beispiel: Spinnaker-CD-Pipeline
Das Diagramm zeigt einen einfachen CI/CD-Workflow, der Spinnaker integriert, um ein Container-Image zu erstellen und es in einem Kubernetes-Cluster bereitzustellen:
Schauen wir uns jeden Schritt des Workflows an:
- Entwickler committen/pushen Code in ein zentrales Repository.
- Der fertige Code löst Jenkins dazu aus, einen Container zu testen und zu bauen.
- Dieser Container wird in ein Container-Register verschoben.
- Spinnaker lauscht im Containerregister nach einem neuen Image und löst die Lieferpipeline zur Bereitstellung aus.
- Die Spinnaker-Pipeline erstellt die notwendigen Konfigurationen (Anwendungskonfigurationen, Instanzen, Skalierung usw.) und bereitet den Container nach manueller Überprüfung in einem Ziel-Kubernetes-Cluster ein.
Die Schaffung eines soliden CI/CD-Workflows ermöglicht es Entwicklern, fast alle Phasen des Entwicklungs- und Bereitstellungsprozesses ganz einfach zu automatisieren.
Darüber hinaus führt die Nutzung von Tools wie Spinnaker, das eine solide kontinuierliche Delivery-Pipeline mit Kubernetes bietet, zu schnelleren, effizienteren und weniger fehleranfälligen Softwareentwicklungslebenszyklen. Siehe das offizielle Hello Deployment-Tutorial für eine vollständige Deployment-Pipeline-Einrichtung.
(Richte deine eigene CI/CD-Pipeline ein.)
Erweiterung von Spinnaker-Pipelines
In diesem Abschnitt erweitern wir den oben genannten Arbeitsablauf etwas weiter. Betrachten Sie ein Szenario mit den folgenden Anforderungen:
- Bereite die Anwendung in einer Staging-Umgebung aus und schiebe sie nach Tests und manueller Überprüfung in die Produktionsumgebung.
- Bereite die Anwendung auf Kubernetes-Clustern bereit, die sowohl auf Azure als auch auf AWS gehostet werden.
Wir können einfach eine Spinnaker-Pipeline konfigurieren, um alle oben genannten Anforderungen zu erfüllen, wie unten gezeigt.
In der obigen Pipeline haben wir mehrere Stufen definiert, um Deployments bei zwei verschiedenen Cloud-Anbietern zu ermöglichen. (Dies ist dank Spinnakers robuster Multi-Cloud-Unterstützung möglich.) Sobald die initialen Konfigurationen erstellt sind, führt die Pipeline mehrere Stufen gleichzeitig aus, um die Images in Kubernetes-Clustern sowohl in Azure als auch AWS zu backen und bereitzustellen.
Anschließend können Sie die Images und die Staging der Bereitstellung in der manuellen Phase überprüfen und sie schließlich in den Produktionsumgebungen von AWS und Azure bereitstellen. Die Fähigkeiten von Spinnaker machen es überflüssig, separate Pipelines zu erstellen oder verschiedene Workflows zu definieren, um Deployments und Infrastruktur in Multi-Cloud-Deployments zu bewältigen. Alle notwendigen Konfigurationen und Infrastrukturen werden über Spinnaker verwaltet.
Diese Pipelines können dann weiter erweitert werden, um Benachrichtigungen bereitzustellen, die die DevOps-Teams über den Pipeline-Fortschritt, den Bereitstellungsstatus und Ähnliches informieren.
Darüber hinaus ermöglicht die Integration von Chaos Monkey Entwicklern, die Resilienz einer bereitgestellten Anwendung einfach zu testen, indem sie Instanzfehler simulieren und identifizierte Probleme beheben.
Die Anwendungsfälle für Spinnaker sind endlos. Unabhängig von der Anforderung kann Spinnaker genutzt werden, um dies zu erleichtern. Spinnaker kann sogar innerhalb eines Kubernetes-Clusters bereitgestellt werden und Pipelines nutzen, um Anwendungen direkt im Host-Cluster bereitzustellen.
Robuste CI/CD-Pipeline
Die Kombination aus Spinnaker und Kubernetes hilft den Nutzern, das Endziel einer robusten und automatisierten CI/CD-Pipeline für containerisierte Anwendungsbereitstellungen mit festen Best Practices zu erreichen.
Wir können die folgenden Vorteile genießen, indem wir diese beiden Technologien nutzen.
- Nahtlose Ressourcenzuordnung mit dem Kubernetes-Anbieter v2
- Einfache Integration mit fortschrittlichen Entwicklungsstrategien
- Rollback-Deployments sind einfach. Spinnaker wird die versionierten Manifeste der Anwendungen für diese Rollbacks nutzen
- Einfache Bereitstellung mit nativer K8s-Unterstützung
- Überwachen Sie die Gesundheit der bereitgestellten Anwendungen und des Kubernetes-Clusters
- Integration mit mehreren Artefaktspeichern und Bildregistrierungen, um Anwendungen und Container-Abbildungen einfach zu erhalten
- Nutzen Sie exzellente Kubernetes-Funktionen wie Skalierung, Lastverteilung und hohe Verfügbarkeit bei der Anwendungsbereitstellung
- Einfache Integration und Erweiterung durch Drittanbieter-Tools innerhalb der CI/CD-Pipeline
Holen Sie das Beste aus Containern heraus
Spinnaker und Kubernetes ergänzen sich, um das Beste aus der containerisierten Anwendungsbereitstellung herauszuholen. Spinnaker ist die führende Plattform zur Verwaltung von Multi-Cloud-Continuous Delivery mit einer aktiven Community, zu der Netflix, Google, Microsoft usw. gehören.
Verwandte Literatur
Kubernetes-Leitfaden
- Was ist Kubernetes (K8s)? Ein Tutorial zu den Grundlagen von Kubernetes
- Kubernetes Best Practices für verbesserte Cluster-Effizienz
- Best Practices: Wie man Anwendungen für Kubernetes architekt
- Kubernetes Pods: Eine Einführung
- Kubernetes ReplicaSets: Eine kurze Einführung
- Kubernetes-Deployments vollständig erklärt
- Wie man Kubernetes DaemonSets verwendet und verwaltet
- Wie Kubernetes-Dienste funktionieren
- Verwendung von Kubernetes Port, TargetPort und NodePort
- Erstellen und verwenden von ConfigMaps in Kubernetes
- Einführung in Kubernetes-Geheimnisse
- Kubernetes-Netzwerkgrundlagen
- Kubernetes-Ingress erklärt
- Einführung in Kubernetes Helm Charts
- Was ist das Kubernetes-Operator-Muster?
- Bereitstellung von PostgreSQL als StatefulSet in Kubernetes
- Kubernetes Custom Resource Definition (CRDs) erklärt
- 3 Kubernetes-Muster für Cloud-native Anwendungen
- Kubernetes Compute-Ressourcen erklärt
- Kubernetes-Sicherheit für DevOps-Pipelines
- Verwendung von Spinnaker mit Kubernetes für Continuous Delivery
- Kubernetes-Multi-Cluster: Wie und warum man sie verwendet.
- Kubernetes-Überwachung: Ein umfassender Leitfaden
- Kubernetes vs. Docker: Ein kurzer Vergleich
- Kubernetes vs. Docker Swarm: Vergleich von Container-Orchestrierungstools
- Kubernetes vs. OpenShift: Was ist der Unterschied?
- Kubernetes-Zertifizierungen: Wie und warum man zertifiziert wird
Diese Beiträge sind meine eigenen und spiegeln nicht unbedingt die Position, Strategien oder Meinung von BMC wider.