DevOps Tutorial: Docker, Kubernetes und Azure DevOps

In diesem Artikel werden wir über DevOps und wie es sich von der agilen Methodik unterscheidet, erfahren. Wir werden auch einige beliebte DevOps-Tools und ihre Rollen im DevOps-Lebenszyklus abdecken.

Sie werden lernen

  • Was ist Docker, Kubernetes und Azure DevOps
  • Was ist DevOps und warum brauchen wir es?
  • Wie unterscheidet sich DevOps von Agile?
  • Was sind einige wichtige DevOps-Tools?
  • Wie hilft Docker bei DevOps?
  • Wie hilft Kubernetes bei DevOps?
  • Wie hilft Azure DevOps bei DevOps?
  • Was ist Continuous Integration und Continuous Delivery (CI/CD)?
  • Was ist Infrastruktur als Code?
  • Wie helfen Terraform und Ansible bei DevOps?

Docker

Docker ist ein Open-Source-Software-Tool, das zum Erstellen, Testen und Bereitstellen containerisierter Anwendungen verwendet wird. Was ist Containerisierung, übrigens? Containerisierung ist das Konzept, alle Bibliotheken und Dateien zusammen mit dem Anwendungscode in einer einzigen Einheit namens „Container“ zu bündeln, damit sie auf jeder Infrastruktur ausgeführt werden kann.

Kubernetes

Kubernetes ist ein Container-Orchestrierungssystem, das containerisierte Anwendungen und Dienste verwaltet. Es kümmert sich um die Aufgaben, die in der containerisierten Umgebung wie Skalierung, Bereitstellung, Lastenausgleich usw. durchgeführt werden. Kubernetes ist tragbar, effizient und kostengünstig und bietet Funktionen wie Systemintegrationen, API-basierte Unterstützung usw. 

Azure DevOps

Azure DevOps ist ein Produkt von Microsoft, das eine Vielzahl von Tools und Funktionen bietet, die den Prozess der Softwareentwicklung und -bereitstellung schneller und organisierter machen. Es bietet einen Satz von Prozessen, die es Softwareentwicklern, Projektmanagern und anderen Beteiligten ermöglichen, gemeinsam Software zu entwickeln. Es kann den bestehenden Editoren oder IDEs hinzugefügt werden, um dem Team zu ermöglichen, effektiv an Projekten jeder Größe zu arbeiten.  

Beginnen wir mit einem einfachen Anwendungsfall.

Kostenlose Kurse — Lernen in 10 Schritten

Was ist DevOps?

Wie bei den meisten Schlagworten im Softwareentwicklungsbereich gibt es keine anerkannte Definition für DevOps.

Definitionen variieren von einfachen wie der unten stehenden bis hin zu komplexen, die eine ganze Buchseite umfassen können.

DevOps ist die Kombination aus kulturellen Philosophien, Praktiken und Tools, die die Fähigkeit einer Organisation erhöht, Anwendungen und Dienste mit hoher Geschwindigkeit bereitzustellen — Amazon Web Services (AWS)liefern hoher Geschwindigkeit

Anstatt zu versuchen, DevOps zu definieren, lassen Sie uns verstehen, wie sich die Softwareentwicklung zu DevOps entwickelt hat.

Wasserfallmodell

Das Wasserfallmodell ist eine Methodik, die einen strukturierten Ansatz verfolgt. Es besteht aus sechs Phasen: Anforderungen, Design, Implementierung, Testen, Bereitstellung und Wartung. Jede Phase baut auf der Fertigstellung der vorherigen auf. Es durchläuft diese Stadien, ohne frühere Prozesse zu überarbeiten, was es zu einem linearen Prozess macht.

Die ersten Jahrzehnte der Softwareentwicklung drehten sich um das Wasserfallmodell, und es näherte sich der Softwareentwicklung genauso wie beim Bau eines Immobilienprojekts — zum Beispiel beim Bau einer Brücke.

Sie werden Software in mehreren Phasen erstellen, die von wenigen Wochen bis zu einigen Monaten dauern können.

In den meisten Wasserfallprojekten würde es Monate dauern, bis das Unternehmen eine funktionierende Version einer Anwendung sieht.

Wichtige Elemente zum Erstellen großartiger Software

Während wir einige Jahrzehnte im Wasserfallmodell gearbeitet haben, verstehen wir einige Schlüsselelemente bei der Entwicklung von großartiger Software:

  • Kommunikation
  • Feedback
  • Automatisierung

Bedeutung der Kommunikation

Kommunikation zwischen Personen ist für den Erfolg eines Softwareprojekts unerlässlich.

Im Wasserfallmodell versuchten wir die Kommunikation zu verbessern, indem wir 1000-seitige Dokumente zu Anforderungen, Design, Architektur und Bereitstellung vorbereiteten.

Aber im Laufe der Zeit haben wir entdeckt, dass:

  • Der beste Weg, die Kommunikation innerhalb eines Teams zu verbessern, ist es, sie zusammenzubringen. Und eine Vielzahl von Fähigkeiten im selben Team zu haben.
  • Teams mit vielfältigen Fähigkeiten funktionieren hervorragend.

Bedeutung von frühem Feedback

Schnelles Feedback zu erhalten ist wichtig. Die Entwicklung großartiger Software dreht sich darum, schnelles Feedback zu erhalten.

  • Bauen wir eine Anwendung, die den Geschäftserwartungen entspricht?
  • Wird Ihre Anwendung Probleme haben, wenn sie in die Produktion übergeht?

Sie möchten es nicht erst nach ein paar Monaten erfahren. Sie möchten es so früh wie möglich herausfinden, denn je früher wir ein Problem finden, desto einfacher ist es, es zu beheben.

Wir haben festgestellt, dass die besten Softwareteams so strukturiert sind, dass sie schnelles Feedback ermöglichen.

Bedeutung der Automatisierung

Automatisierung ist entscheidend. Die Softwareentwicklung umfasst eine Vielzahl von Aktivitäten. Manuelle Arbeit ist langsam und fehleranfällig. Wir verstehen, dass es immer wichtig ist, nach Möglichkeiten zur Einführung von Automatisierung zu suchen.

Nachdem wir die Schlüsselelemente zur Entwicklung großartiger Software verstanden haben, schauen wir uns an, wie wir uns zu Agile und DevOps entwickelt haben.

Evolution zu Agile

Agile ist ein Ansatz, der auf inkrementellen Fortschritt, häufigem Feedback und der Fähigkeit, auf sich ändernde Anforderungen im Entwicklungszyklus zu reagieren, Wert legt. Agile fördert die Zusammenarbeit von Teams in kurzen Entwicklungszyklen, was kontinuierliche Verbesserung fördert und schnell Wert für Endbenutzer liefert. Es war der erste Schritt in der Evolution hin zur Umsetzung unserer Erkenntnisse mit verbesserter Kommunikation zwischen Teams, Einholung von Feedback und Einführung von Automatisierung. 

Agile brachte die Geschäfts- und Entwicklungsteams in ein Team zusammen, das daran arbeitet, großartige Software in kleinen Iterationen namens Sprints zu entwickeln.

Anstatt Wochen oder Monate in jeder Entwicklungsphase zu verbringen, konzentriert sich Agile darauf, kleine Anforderungen, sogenannte Benutzerstories, innerhalb weniger Tage oder manchmal sogar am selben Tag durch den Entwicklungszyklus zu führen.

Wie hat Agile die Kommunikation zwischen den Teams verbessert?

Agile brachte Geschäfts- und Entwicklungsteams zusammen.

  • Geschäfte sind für die Festlegung dessen verantwortlich, was gebaut werden soll. Was sind die Anforderungen?
  • Die Entwicklung ist dafür verantwortlich, ein Produkt zu bauen, das den Anforderungen entspricht. Zur Entwicklung gehören alle am Design, der Codierung, dem Testen und der Verpackung Ihrer Software beteiligten Personen.

In Agile ist ein Vertreter des Unternehmens, genannt Product Owner, immer beim Team anwesend, und das Team versteht die Geschäftsziele klar.

Wenn das Entwicklungsteam die Anforderungen nicht versteht und in die falsche Richtung geht, hilft der Product Owner ihnen, einen Kurswechsel vorzunehmen und auf dem richtigen Weg zu bleiben.

Ergebnis: Das endgültige Produkt, das das Team erstellt, entspricht den Wünschen des Unternehmens.

Ein weiterer wichtiger Faktor ist, dass agile Teams über fachübergreifende Fähigkeiten verfügen: Codierfähigkeiten (Frontend, API und Datenbanken), Testfähigkeiten und Geschäftsfähigkeiten. Dies verbessert die Kommunikation zwischen Personen, die zusammenarbeiten müssen, um großartige Software zu entwickeln.

Agile und Automatisierung

Auf welche Automatisierungsbereiche konzentrieren sich agile Teams?

Softwareprodukte können verschiedene Mängel haben:

  • Funktionale Mängel bedeuten, dass das Produkt nicht wie erwartet funktioniert.
  • Technische Mängel erschweren die Wartung der Software. Zum Beispiel Probleme mit der Code-Qualität.

Im Allgemeinen konzentrieren sich agile Teams darauf, Automatisierung zu nutzen, um technische und funktionale Mängel so früh wie möglich zu entdecken.

Agile Teams legen auch großen Wert auf Code-Qualität. Tools wie SONAR werden verwendet, um die Code-Qualität von Anwendungen zu bewerten.

Reichen großartige Automatisierungstests und hervorragende Code-Qualitätsprüfungen aus? Der Schlüssel liegt darin, diese Prozesse häufig durchzuführen. Agile Teams betonen die kontinuierliche Integration, bei der Commits in die Versionskontrolle eine Reihe von Aktionen auslösen. Dazu gehört das Ausführen von Unit Tests, Automatisierungstests und Code-Qualitätsprüfungen, die nahtlos in eine Continuous Integration Pipeline integriert sind. Jenkins, ein weit verbreitetes CI/CD-Tool aus der frühen Agile-Ära, spielte eine entscheidende Rolle bei der Orchestrierung dieser automatisierten Prozesse.

Wie hat Agile sofortiges Feedback gefördert?

Der wichtigste Faktor ist, dass ein Unternehmen nicht monatelang warten muss, um das Endprodukt zu sehen. Am Ende jedes Sprints wird das Produkt allen Stakeholdern, einschließlich der Architektur- und Geschäftsteams, demonstriert. Alle Rückmeldungen werden berücksichtigt, während die Benutzerstorys für den nächsten Sprint priorisiert werden. Ergebnis: Das Endprodukt, das das Team erstellt, ist etwas, das das Unternehmen will.

Ein weiterer wichtiger Faktor, der sofortiges Feedback ermöglicht, ist die kontinuierliche Integration. Angenommen, ich committe etwas Code in die Versionskontrolle. Innerhalb von 30 Minuten erhalte ich Feedback, ob mein Code einen Unit-Testfehler oder einen Integrationstestfehler verursacht. Ich bekomme Feedback, wenn mein Code die Qualitätsstandards nicht erfüllt oder nicht genügend Codeabdeckung in den Unit-Tests hat.

War Agile erfolgreich? Ja. Auf jeden Fall. Durch die Verbesserung der Kommunikation zwischen Geschäfts- und Entwicklungsteams und den Fokus auf die frühzeitige Erkennung verschiedener Defekte hat Agile die Softwareentwicklung auf die nächste Stufe gehoben.

Ich hatte eine wunderbare Erfahrung, als ich mit einigen erstaunlichen Teams im Agile-Umfeld gearbeitet habe. Software Engineering, das für mich all die Bemühungen repräsentiert, Software von den Anforderungen bis zur Live-Schaltung von Anwendungen zu erstellen, war beim ersten Mal genauso erfreulich wie das Programmieren.

Aber stoppt die Evolution? Nein.

Neue Herausforderungen tauchten auf.

Entwicklung von Microservices-Architekturen

Wir begannen, uns in Richtung einer Microservices-Architektur zu bewegen, und wir begannen, mehrere kleine APIs zu erstellen, anstatt große monolithische Anwendungen zu entwickeln.

Was war die neue Herausforderung?

Die Betriebsabläufe wurden wichtiger. Anstatt einmal im Monat eine monolithische Version herauszubringen, veröffentlichst du jede Woche Hunderte kleiner Microservice-Versionen. Das Debuggen von Problemen über Microservices hinweg und das Sichtbarmachen dessen, was mit den Microservices passiert, wurden wichtig.

Es war Zeit für ein neues Schlagwort in der Softwareentwicklung. DevOps.

Entstehung von DevOps

Was war der Fokus von DevOps?

Der Fokus von DevOps lag darauf, die Kommunikation zwischen den Entwicklungs- und Betriebsteams zu verbessern.

  • Wie machen wir die Bereitstellungen einfacher?
  • Wie machen wir die Arbeit, die das Betriebsteam leistet, für das Entwicklungsteam sichtbarer?

Wie hat DevOps die Kommunikation zwischen den Teams verbessert?

DevOps brachte die Betriebsteams näher an die Entwicklungsteams.

  • In reiferen Unternehmen arbeiteten Entwicklungs- und Betriebsteams als ein Team. Sie begannen, gemeinsame Ziele zu teilen, und beide Teams fingen an, die Herausforderungen zu verstehen, mit denen das andere Team konfrontiert war.
  • In Unternehmen, die sich in den frühen Phasen der DevOps-Evolution befinden, kann ein Vertreter des Betriebsteams in den Sprints — Stand-ups und Retrospektiven — eingebunden werden.

Auf welche Automatisierungsbereiche konzentrieren sich DevOps-Teams?

Zusätzlich zu den Fokusbereichen von Agile — kontinuierliche Integration und Testautomatisierung — konzentrierten sich DevOps-Teams darauf, mehrere Aktivitäten des Betriebsteams zu automatisieren, wie das Bereitstellen von Servern, das Konfigurieren von Software auf Servern, das Bereitstellen von Anwendungen und das Überwachen von Produktionsumgebungen. Einige Schlüsselbegriffe sind kontinuierliche Bereitstellung, kontinuierliche Lieferung und Infrastruktur als Code.

Kontinuierliche Bereitstellung bedeutet, kontinuierlich eine neue Version der Software in Testumgebungen bereitzustellen. In noch reiferen Organisationen wie Google und Facebook hilft kontinuierliche Lieferung, Software kontinuierlich in die Produktion bereitzustellen — vielleicht hunderte von Produktionsbereitstellungen pro Tag.

Infrastruktur als Code bedeutet, Ihre Infrastruktur so zu behandeln, wie Sie Ihren Anwendungscode behandeln. Sie erstellen Ihre Infrastruktur — Server, Lastenausgleicher und Datenbanken — auf automatisierte Weise mithilfe von Konfiguration. Sie würden Ihre Infrastruktur versionieren — damit Sie Ihre Infrastrukturänderungen über einen bestimmten Zeitraum verfolgen können.

Wie hat DevOps unmittelbares Feedback gefördert?

DevOps bringt Betriebs- und Entwicklungsteams zusammen. Da Betrieb und Entwicklung Teil desselben Teams sind, versteht das gesamte Team die Herausforderungen, die mit Betrieb und Entwicklung verbunden sind.

  • Jede betriebliche Problematik erhält schnelle Aufmerksamkeit von den Entwicklern.
  • Alle Herausforderungen bei der Inbetriebnahme von Software erhalten frühzeitige Aufmerksamkeit vom Betriebsteam.

DevOps fördert kontinuierliche Integration, kontinuierliche Auslieferung und Infrastruktur als Code.

  • Dank kontinuierlicher Auslieferung wüsste ich innerhalb weniger Stunden, wenn ich eine Codeänderung oder eine Konfigurationsänderung vornehme, die einen Test oder eine Staging-Umgebung gefährden könnte.
  • Aufgrund von Infrastruktur als Code können Entwickler Umgebungen selbst bereitstellen, Code bereitstellen und Probleme eigenständig finden, ohne Hilfe vom Betriebsteam.

Ich sehe Agile und DevOps als zwei Phasen, die uns helfen, zu verbessern, wie wir großartige Software entwickeln. Sie stehen nicht im Wettbewerb zueinander, sondern helfen uns gemeinsam, erstaunliche Softwareprodukte zu erstellen.

Soweit es mich betrifft, besteht das Ziel von Agile und DevOps zusammen darin, Dinge zu tun, die:

  • Die Kommunikation und das Feedback zwischen Geschäfts-, Entwicklungs- und Betriebsteams fördern
  • Die Schmerzpunkte mit Automatisierung erleichtern.

Eine DevOps-Geschichte

Hier ist ein Beispiel für eine Geschichte:

  • Sie sind der Starentwickler in einem Team, und Sie müssen einen schnellen Fix vornehmen.
  • Sie gehen zu einem GitHub-Repository.
  • Sie überprüfen schnell das Projekt.
  • Sie erstellen schnell Ihre lokale Umgebung.
  • Du machst eine Änderung. Du testest es. Du aktualisierst die Einheiten- und Automatisierungstests.
  • Du übermittelst es.
  • Du bekommst eine E-Mail, die besagt, dass es in der QA-Umgebung bereitgestellt wurde.
  • Ein paar Integrationstests werden automatisch ausgeführt.
  • Dein QA-Team erhält eine E-Mail mit der Bitte um Genehmigung. Sie führen einen manuellen Test durch und genehmigen.
  • Dein Code ist innerhalb weniger Minuten live in der Produktion.
  • Du könntest denken, dass dies ein idealer Szenario ist. Aber weißt du, dass dies ist, was in innovativen Unternehmen wie Netflix, Amazon und Google Tag für Tag passiert?

Das ist die Geschichte von DevOps.

DevOps = Entwicklung + Betrieb

DevOps ist eine natürliche Evolution der Softwareentwicklung. DevOps ist NICHT NUR ein Werkzeug, ein Framework oder nur Automatisierung. Es ist eine Kombination aus all dem.

DevOps konzentriert sich auf Menschen, Prozesse und Produkte. Der Menschen-Aspekt von DevOps dreht sich um Kultur und die Schaffung einer großartigen Denkweise – eine Kultur, die offene Kommunikation fördert und schnelles Feedback schätzt, eine Kultur, die hochwertige Software schätzt.

Agile half dabei, die Kluft zwischen Geschäfts- und Entwicklungsteams zu überbrücken. Entwicklungsteams verstanden die Prioritäten des Unternehmens und arbeiteten mit dem Unternehmen zusammen, um die Stories mit dem höchsten Wert zuerst bereitzustellen; jedoch waren die Entwicklungs- und Betriebsteams nicht ausgerichtet.

Sie hatten unterschiedliche Ziele.

  • Das Ziel des Entwicklungsteams ist es, so viele neue Funktionen wie möglich in die Produktion zu bringen.
  • Das Ziel des Ops-Teams war es, die Produktionsumgebung so stabil wie möglich zu halten.

Wie Sie sehen können, wenn das Überführen von Dingen in die Produktion schwierig ist, sind Dev und Ops nicht ausgerichtet.

DevOps zielt darauf ab, die Entwicklungs- und Betriebsteams mit gemeinsamen Zielen in Einklang zu bringen.

Das Entwicklungsteam arbeitet mit dem Betriebsteam zusammen, um operationale Herausforderungen zu verstehen und zu lösen. Das Betriebsteam ist Teil des Scrum-Teams und versteht die Funktionen, die sich in der Entwicklung befinden.

Wie können wir das möglich machen? Bauen Sie die Mauer zwischen Dev und Ops ab!

Dev und Ops zusammenbringen

Option 1

In ausgereiften DevOps-Unternehmen arbeiten Dev und Ops als Teil desselben Scrum-Teams und teilen sich gegenseitig Verantwortlichkeiten.

Option 2

Wenn Sie sich jedoch in den frühen Stadien der DevOps-Entwicklung befinden, wie können Sie erreichen, dass Dev und Ops gemeinsame Ziele haben und zusammenarbeiten?

Hier sind einige Dinge, die Sie tun können:

  • Lassen Sie das Entwicklungsteam einige der Verantwortlichkeiten des Betriebsteams teilen. Zum Beispiel kann das Dev-Team für neue Veröffentlichungen in der ersten Woche nach der Produktionsbereitstellung verantwortlich sein. Dies hilft dem Entwicklungsteam, die Herausforderungen zu verstehen, mit denen der Betrieb bei der Einführung neuer Veröffentlichungen konfrontiert ist, und hilft ihnen, zusammenzuarbeiten und bessere Lösungen zu finden.
  • Eine weitere Möglichkeit ist es, einen Vertreter des Betriebsteams in die Scrum-Aktivitäten einzubeziehen. Binden Sie sie in Stand-ups und Retrospektiven ein.
  • Die nächste Sache, die Sie tun können, besteht darin, die Herausforderungen, mit denen das Operationsteam konfrontiert ist, für das Entwicklungsteam sichtbarer zu machen. Wenn Sie in der Operation auf Herausforderungen stoßen, beziehen Sie die Entwicklungsteams in die Teams ein, die an Lösungen arbeiten.

Welche Richtung Sie auch immer einschlagen, finden Sie Wege, die Mauer zu durchbrechen und das Entwicklungs- und das Operationsteam zusammenzubringen.

Eine weitere interessante Option ergibt sich durch Automatisierung. Durch die Verwendung von Infrastructure as Code und die Ermöglichung der Selbstbereitstellung für Entwickler können Sie eine gemeinsame Sprache schaffen, die sowohl das Operations- als auch das Entwicklungsteam verstehen — Code.

Ein DevOps-Anwendungsfall

Betrachten Sie das Bild unten:

Dieses Bild zeigt zwei einfache Workflows

  1. Infrastructure as Code mit Terraform und Azure DevOps zur Bereitstellung von Kubernetes-Clustern.
  2. Kontinuierliche Bereitstellung von Mikrodiensten mit Azure DevOps zum Erstellen und Bereitstellen von Docker-Images für Mikrodienste in Kubernetes-Clustern.

Klingt das komplex?

Lassen Sie uns das aufschlüsseln und versuchen, sie zu verstehen.

Lassen Sie uns zuerst mit #2 — Kontinuierliche Bereitstellung beginnen.

#2: DevOps Kontinuierliche Bereitstellung mit Azure DevOps und Jenkins

Was nützt es, großartige Tests und Codequalitätsprüfungen zu haben, wenn Sie sie nicht oft ausführen?

Was nützt es, die Bereitstellungsautomatisierung zu haben, wenn Sie Software nicht oft genug bereitstellen?

Sobald ein Entwickler Code in das Versionskontrollsystem einpflegt, werden die folgenden Schritte ausgeführt:

  • Unit-Tests
  • Codequalitätsprüfungen
  • Integrationstests
  • Anwendungsverpackung — Erstellung einer bereitstellbaren Version der Anwendung. Tools — Maven, Gradle, Docker
  • Anwendungsbereitstellung — Einführung neuer Anwendungen oder neuer Versionen der Anwendung in Echtbetrieb
  • Eine E-Mail an das Testteam zur Prüfung der Anwendung senden

Sobald die Zustimmung des Testteams vorliegt, wird die App sofort in die nächste Umgebung bereitgestellt

Dies wird als kontinuierliche Bereitstellung bezeichnet. Wenn Sie bis zur Produktion kontinuierlich bereitstellen, wird dies als kontinuierliche Lieferung bezeichnet

Die beliebtesten CI/CD-Tools sind Azure DevOps und Jenkins

#1: DevOps-Infrastruktur als Code mit Terraform

Früher haben wir Umgebungen manuell erstellt und Anwendungen manuell bereitgestellt

Jedes Mal, wenn Sie einen Server erstellen, muss dies manuell erfolgen

  • Die Softwareversion muss aktualisiert werden
  • Sicherheitspatches müssen manuell installiert werden

Sie tun es manuell, und die folgenden sind die Ergebnisse:

  • Hohe Fehlerwahrscheinlichkeit
  • Replikationsumgebungen sind schwierig

Infrastruktur als Code

Infrastruktur als Code — Behandeln Sie die Infrastruktur genauso wie den Anwendungscode

Hier sind einige wichtige Dinge, die bei der Infrastruktur als Code zu verstehen sind:

  • Das Infrastrukturteam konzentriert sich auf wertschöpfende Arbeit (anstatt Routinearbeit)
  • Weniger Fehler und schnelle Wiederherstellung von Ausfällen
  • Server sind konsistent (vermeidet Konfigurationsabweichungen)

Die beliebtesten IaC-Tools sind Ansible und Terraform.

Typischerweise sind dies die Schritte in IaC:

  • Server bereitstellen (ermöglicht durch Cloud) aus einer Vorlage
  • Software installieren
  • Software konfigurieren

Serverbereitstellung

Typischerweise werden Bereitstellungstools verwendet, um Server bereitzustellen und den neuen Server mit Netzwerkfunktionen vorzubereiten. Die beliebtesten Bereitstellungstools sind Cloud Formation und Terraform.

Mit Terraform können Sie Server und den Rest Ihrer Infrastruktur bereitstellen, wie Lastenausgleicher, Datenbanken, Netzwerkkonfiguration usw. Sie können Server mithilfe von vorab erstellten Images erstellen, die mit Tools wie Packer und AMI (Amazon Machine Image) erstellt wurden.

Konfigurationsmanagement

Konfigurationsmanagement-Tools werden verwendet, um:

  • Software zu installieren
  • Software zu konfigurieren

Beliebte Konfigurationsmanagement-Tools sind Chef, Puppet, Ansible und SaltStack. Diese sind darauf ausgelegt, Software auf vorhandenen Servern zu installieren und zu verwalten.

Rolle von Docker und Kubernetes in DevOps

In der Welt der Mikrodienste könnten einige Mikrodienste mit Java, einige mit Python und einige mit JavaScript erstellt werden.

Verschiedene Mikrodienste haben unterschiedliche Möglichkeiten, Anwendungen zu erstellen und auf Servern bereitzustellen. Dies erschwert die Arbeit des Betriebsteams. Wie können wir eine ähnliche Methode zur Bereitstellung verschiedener Anwendungsarten haben? Hier kommen Container und Docker ins Spiel.

Mit Docker können Sie Images von Mikrodiensten erstellen — unabhängig von deren Sprache. Sie können diese Images auf jede Infrastruktur auf die gleiche Weise ausführen. Das vereinfacht die Betriebsabläufe.

Kubernetes trägt dazu bei, verschiedene Arten von Containern zu orchestrieren und sie in Clustern bereitzustellen.

Kubernetes bietet auch:

  • Service Discovery
  • Load Balancing
  • Zentrale Konfiguration

Docker und Kubernetes machen DevOps einfach.

Wichtige DevOps-Metriken

Die folgenden sind einige der wichtigen DevOps-Metriken, die Sie im Laufe der Zeit verfolgen und verbessern können.

  • Bereitstellungshäufigkeit — Wie oft werden Anwendungen in die Produktion bereitgestellt?
  • Time-to-Market — Wie lange benötigen Sie, um ein Feature von der Codierung bis zur Produktion zu bringen?
  • Fehlerquote neuer Veröffentlichungen — Wie viele Ihrer Veröffentlichungen scheitern?
  • Lieferzeit für Fixes — Wie lange benötigen Sie, um einen Produktionsfix zu erstellen und in die Produktion zu bringen?
  • Durchschnittliche Wiederherstellungszeit — Wie lange brauchen Sie, um Ihre Produktionsumgebung von einem größeren Problem wiederherzustellen?

DevOps-Best Practices

Agiles Projektmanagement

Agiles Projektmanagement ist ein iterativer Ansatz zur Entwicklung von Softwareanwendungen. Durch diese Praxis können Teams die Entwicklungsgeschwindigkeit verbessern und gut auf unterschiedliche Kundenbedürfnisse reagieren. Die agile Methodik unterscheidet sich von der traditionellen Wasserfallmethode, bei der es lange Release-Zyklen gab. Agil verwendet Scrum- und Kanban-Frameworks, um die Software gemäß den Kundenbedürfnissen zu liefern.

Verwendung des richtigen Satzes von Tools

Softwareentwickler und Systemadministratoren müssen in jeder Phase des DevOps-Lebenszyklus die richtigen DevOps-Tools auswählen und verwenden, um wertvolle Anwendungen zu erstellen.

Im Folgenden sind einige Beispiele für Tools aufgeführt, die DevOps-Ingenieure, Systemadministratoren und andere Beteiligte nutzen können:

  1. Tools wie Jira können dem Team helfen, Aufgaben in kleinere und überschaubarere Teile zu unterteilen, was die Produktivität des Teams steigert.
  2. Tools wie Jenkins und Bitbucket können Ihnen helfen, Codeflüsse vom Testen bis zur Bereitstellungsphase zu automatisieren.
  3. Tools wie Slack, GetFeedback usw. können DevOps-Teams dabei unterstützen, Chat-Tools mit Umfrageplattformen zu integrieren, um Echtzeit-Feedback zu sammeln und zu überprüfen.

Kontinuierliche Integration/Kontinuierliche Bereitstellung

Kontinuierliche Integration (CI) und kontinuierliche Bereitstellung (CD) sind moderne Softwareentwicklungsmethoden, die Organisationen helfen, Software schnell und effektiv auszuliefern. Bei CI committen Entwickler kontinuierlich den Anwendungscode mehrmals in ein gemeinsames Repository. Bei CD wird der Code schnell und nahtlos in die Produktion geliefert. CD stellt auch sicher, dass die Integration ohne Verzögerungen oder Störungen erfolgt.

Sicherheit integrieren

Sicherheit ist ein wichtiger Bestandteil des Softwareentwicklungsprozesses. In der heutigen Welt, in der Cyberkriminalität und Datenverstoßvorfälle zunehmen, erkennen Organisationen die Bedeutung der Integration von Sicherheitsmaßnahmen in ihre Systeme. Früher wurde Sicherheit im Allgemeinen in den letzten Phasen des Softwareentwicklungslebenszyklus betrachtet, aber mit dem Aufkommen von DevSecOps wird Sicherheit von Anfang an in die Anwendungsentwicklung einbezogen und integriert.

Observierbarkeit ist wichtig bei der Entwicklung komplexer Anwendungen, die Mikroservice- und Cloud-Architekturen verwenden. Observierbarkeit hilft DevOps-Teams, die komplexe Struktur verschiedener Anwendungen (Mikroservices, Cloud-Anwendungen usw.) zu verstehen und zukünftige Anforderungen der Umgebung zu erfüllen. Kubernetes Observierbarkeit und Splunk gehören zu den besten Observierbarkeitsplattformen.

Wie misst man die Reife seiner DevOps-Implementierungen?

  • Die Zeit vom Entwicklungsprozess bis zur Bereitstellung sollte insgesamt zufriedenstellend sein
  • Bestimmung der Häufigkeit der Bereitstellung von neuem Code
  • Die mittlere Wiederherstellungszeit (MTTR) nach einem Vorfall oder unerwarteten Ereignis sollte so gering wie möglich sein
  • Erfolgreiche Bereitstellungen sollten fehlgeschlagene Bereitstellungen übertreffen
  • Schnellere und zuverlässige Veröffentlichungen sollten einen hohen Return on Investment (ROI) erzielen.

Best Practices für die DevOps-Transformation

  • Führungsbereitschaft ist entscheidend
  • Beinhaltet anfängliche Kosten
  • Richten Sie COEs ein, um Teams zu unterstützen
  • Wählen Sie die richtige Anwendung und das richtige Team aus
  • Beginnen Sie klein
  • Austausch von Erkenntnissen (Newsletter, Kommunikation, COEs)
  • Ermutigen Sie Menschen mit Entdecker- und Automatisierungsmindset
  • Anerkennung von DevOps-Teams

Source:
https://dzone.com/articles/devops-tutorial-devops-with-docker-kubernetes-and