Warum wird DevOps benötigt und wer sind DevOps-Spezialisten?

Wenn eine Anwendung nicht funktioniert, ist das Letzte, was Sie von Ihren Kollegen hören möchten, der Satz „Das Problem liegt auf Ihrer Seite.“ Darunter leiden die Benutzer – und es ist ihnen egal, welcher Teil des Teams für den Ausfall verantwortlich ist. Die DevOps-Kultur entstand genau, um Entwicklung und Support rund um die gemeinsame Verantwortung für das Endprodukt zusammenzuführen.

Welche Praktiken sind im Konzept von DevOps enthalten und warum werden sie benötigt? Was machen DevOps-Ingenieure und was sollten sie können? Experten von EPAM beantworten diese und andere Fragen: Kirill Sergeev, Systemingenieur und DevOps-Evangelist, und Igor Boyko, leitender Systemingenieur und Koordinator eines der DevOps-Teams des Unternehmens.

Warum wird DevOps benötigt und wer sind DevOps-Spezialisten?

Warum wird DevOps benötigt?

Bisher gab es eine Barriere zwischen Entwicklern und Support (sog. Operations). Es klingt paradox, aber sie hatten unterschiedliche Ziele und KPIs, obwohl sie dasselbe taten. Ziel der Entwicklung war es, Geschäftsanforderungen schnellstmöglich umzusetzen und in ein funktionierendes Produkt einfließen zu lassen. Der Support war dafür verantwortlich, dass die Anwendung stabil funktionierte – und jede Änderung gefährdete die Stabilität. Es besteht ein Interessenkonflikt – DevOps schien ihn zu lösen.

Was ist DevOps?

Das ist eine gute Frage – und eine umstrittene: Darüber ist sich die Welt noch nicht endgültig einig. EPAM glaubt, dass DevOps Technologien, Prozesse und eine Kultur der Interaktion innerhalb eines Teams vereint. Ziel dieser Vereinigung ist es, den Endbenutzern kontinuierlich einen Mehrwert zu bieten.

Kirill Sergejew: „Entwickler schreiben Code, Tester überprüfen ihn und Administratoren stellen das Endprodukt für die Produktion bereit.“ Lange Zeit waren diese Teile des Teams etwas verstreut und dann entstand die Idee, sie durch einen gemeinsamen Prozess zu vereinen. So entstanden DevOps-Praktiken.“

Es kam der Tag, an dem sich Entwickler und Systemingenieure für die Arbeit des anderen interessierten. Die Barriere zwischen Produktion und Support begann zu verschwinden. So entstand DevOps, das Praktiken, Kultur und Teaminteraktion umfasst.

Warum wird DevOps benötigt und wer sind DevOps-Spezialisten?

Was ist die Essenz der DevOps-Kultur?

Tatsache ist, dass die Verantwortung für das Endergebnis bei jedem Teammitglied liegt. Das Interessanteste und Schwierigste an der DevOps-Philosophie besteht darin, zu verstehen, dass eine bestimmte Person nicht nur für ihre eigene Arbeitsphase verantwortlich ist, sondern dafür, wie das gesamte Produkt funktioniert. Das Problem liegt nicht auf der Seite von irgendjemandem – es wird geteilt und jedes Teammitglied hilft bei der Lösung.

Das Wichtigste in einer DevOps-Kultur ist die Lösung des Problems und nicht nur die Anwendung von DevOps-Praktiken. Darüber hinaus werden diese Praktiken nicht „bei irgendjemandem“ umgesetzt, sondern im gesamten Produkt. Ein Projekt benötigt keinen DevOps-Ingenieur an sich – es braucht eine Lösung für ein Problem, und die Rolle eines DevOps-Ingenieurs kann auf mehrere Teammitglieder mit unterschiedlichen Spezialisierungen verteilt werden.

Welche Arten von DevOps-Praktiken gibt es?

DevOps-Praktiken decken alle Phasen des Software-Lebenszyklus ab.

Igor Boyko: „Der Idealfall ist, wenn wir gleich zu Beginn eines Projekts mit der Anwendung von DevOps-Praktiken beginnen. Gemeinsam mit den Architekten planen wir, welche Art von Architekturlandschaft die Anwendung haben wird, wo sie platziert wird und wie sie skaliert werden soll, und wählen eine Plattform aus. Heutzutage liegt die Microservice-Architektur im Trend – dafür wählen wir ein Orchestrierungssystem: Sie müssen in der Lage sein, jedes Element der Anwendung separat zu verwalten und unabhängig von den anderen zu aktualisieren. Eine andere Praxis ist „Infrastruktur als Code“. Dies ist die Bezeichnung für einen Ansatz, bei dem die Projektinfrastruktur mithilfe von Code und nicht durch direkte Interaktion mit Servern erstellt und verwaltet wird.

Als nächstes gehen wir zur Entwicklungsphase über. Eine der größten Vorgehensweisen hierbei ist die Erstellung von CI/CD: Sie müssen Entwicklern helfen, Änderungen schnell, in kleinen Portionen, häufiger und schmerzlos in das Produkt zu integrieren. CI/CD umfasst die Codeüberprüfung, das Hochladen des Masters in die Codebasis und die Bereitstellung der Anwendung in Test- und Produktionsumgebungen.

Auf den CI/CD-Stufen durchläuft der Code Quality Gates. Mit ihrer Hilfe prüfen sie, ob der Code, der vom Arbeitsplatz des Entwicklers kommt, den vorgegebenen Qualitätskriterien entspricht. Hier werden Unit- und UI-Tests hinzugefügt. Für eine schnelle, problemlose und gezielte Produktbereitstellung können Sie den geeigneten Bereitstellungstyp auswählen.

DevOps-Praktiker spielen auch in der Phase der Unterstützung des fertigen Produkts eine Rolle. Sie dienen der Überwachung, dem Feedback, der Sicherheit und der Einführung von Änderungen. DevOps betrachtet all diese Aufgaben aus der Perspektive der kontinuierlichen Verbesserung. Wir minimieren sich wiederholende Vorgänge und automatisieren sie. Dazu gehören auch Migrationen, Anwendungserweiterungen und Performance-Support.“

Welche Vorteile bieten DevOps-Praktiken?

Wenn wir ein Lehrbuch über moderne DevOps-Praktiken schreiben würden, stünden auf der ersten Seite drei Punkte: Automatisierung, Beschleunigung von Releases und schnelles Feedback von Benutzern.

Kirill Sergejew: „Das erste ist die Automatisierung. Wir können alle Interaktionen im Team automatisieren: Code geschrieben – ausgerollt – überprüft – installiert – Feedback gesammelt – an den Anfang zurückgekehrt. Das alles geschieht automatisch.

Die zweite besteht darin, die Veröffentlichung zu beschleunigen und die Entwicklung sogar zu vereinfachen. Für den Kunden ist es immer wichtig, dass das Produkt so schnell wie möglich auf den Markt kommt und früher Vorteile bringt als die Analoga der Konkurrenz. Der Produktlieferungsprozess kann endlos verbessert werden: Zeit reduzieren, zusätzliche Kontrollmarken hinzufügen, Überwachung verbessern.

Drittens geht es um die Beschleunigung des Benutzer-Feedbacks. Wenn er Kommentare hat, können wir sofort Anpassungen vornehmen und die Anwendung sofort aktualisieren.“

Warum wird DevOps benötigt und wer sind DevOps-Spezialisten?

In welcher Beziehung stehen die Konzepte „Systemingenieur“, „Build-Ingenieur“ und „DevOps-Ingenieur“?

Sie überschneiden sich, gehören aber zu leicht unterschiedlichen Bereichen.

Systemingenieur bei EPAM ist eine Stelle. Es gibt sie in verschiedenen Stufen: vom Junior- bis zum Chefspezialisten.

Ein Bauingenieur ist eher eine Rolle, die bei einem Projekt ausgeübt werden kann. So heißen die Verantwortlichen für CI/CD.

Ein DevOps-Ingenieur ist ein Spezialist, der DevOps-Praktiken in einem Projekt implementiert.

Wenn wir alles zusammenfassen, erhalten wir ungefähr Folgendes: Eine Person in der Position eines Systemingenieurs übernimmt die Rolle eines Build-Ingenieurs in einem Projekt und ist dort an der Implementierung von DevOps-Praktiken beteiligt.

Was genau macht ein DevOps-Ingenieur?

DevOps-Ingenieure fügen alle Teile eines Projekts zusammen. Sie kennen die Besonderheiten der Arbeit von Programmierern, Testern und Systemadministratoren und helfen, ihre Arbeit zu vereinfachen. Sie verstehen die Bedürfnisse und Anforderungen des Unternehmens, seine Rolle im Entwicklungsprozess – und gestalten den Prozess unter Berücksichtigung der Interessen des Kunden.

Wir haben viel über Automatisierung gesprochen – damit beschäftigen sich DevOps-Ingenieure in erster Linie. Das ist ein sehr großer Punkt, zu dem unter anderem auch die Vorbereitung der Umgebung gehört.

Kirill Sergejew: „Bevor Aktualisierungen in das Produkt implementiert werden, müssen diese in einer Umgebung eines Drittanbieters getestet werden. Es wird von DevOps-Ingenieuren erstellt. Sie vermitteln dem gesamten Projekt eine DevOps-Kultur: Sie führen DevOps-Praktiken auf allen Ebenen ihrer Projekte ein. Diese drei Prinzipien: Automatisierung, Vereinfachung, Beschleunigung – sie bringen alles, wo sie hinkommen.“

Was sollte ein DevOps-Ingenieur wissen?

Im Großen und Ganzen muss er über Kenntnisse aus verschiedenen Bereichen verfügen: Programmierung, Umgang mit Betriebssystemen, Datenbanken, Montage- und Konfigurationssystemen. Ergänzt werden diese durch die Möglichkeit, mit Cloud-Infrastruktur-, Orchestrierungs- und Überwachungssystemen zu arbeiten.

1. Programmiersprachen

DevOps-Ingenieure kennen mehrere grundlegende Sprachen für die Automatisierung und können einem Programmierer beispielsweise sagen: „Wie wäre es, wenn Sie den Code nicht von Hand installieren, sondern mit unserem Skript, das alles automatisiert?“ Wir bereiten dafür eine Konfigurationsdatei vor, die sowohl für Sie als auch für uns bequem zu lesen ist und die wir jederzeit ändern können. Wir werden auch sehen, wer, wann und warum Änderungen daran vornimmt.“

Ein DevOps-Ingenieur kann eine oder mehrere dieser Sprachen lernen: Python, Groovy, Bash, Powershell, Ruby, Go. Es ist nicht notwendig, sie tiefgreifend zu kennen – die Grundlagen der Syntax, die OOP-Prinzipien und die Fähigkeit, einfache Skripte für die Automatisierung zu schreiben, reichen aus.

2. Betriebssysteme

Ein DevOps-Ingenieur muss wissen, auf welchem ​​Server das Produkt installiert wird, in welcher Umgebung es ausgeführt wird und mit welchen Diensten es interagieren wird. Sie können sich auf Windows oder die Linux-Familie spezialisieren.

3. Versionskontrollsysteme

Ohne Kenntnisse eines Versionskontrollsystems kommt ein DevOps-Ingenieur nicht weiter. Git ist derzeit eines der beliebtesten Systeme.

4. Cloud-Anbieter

AWS, Google, Azure – insbesondere wenn es um die Windows-Richtung geht.

Kirill Sergejew: „Cloud-Anbieter stellen uns virtuelle Server zur Verfügung, die perfekt in CI/CD passen.

Die Installation von zehn physischen Servern erfordert etwa hundert manuelle Vorgänge. Jeder Server muss manuell gestartet, das erforderliche Betriebssystem installiert und konfiguriert, unsere Anwendung auf diesen zehn Servern installiert und dann alles zehnmal noch einmal überprüft werden. Cloud-Dienste ersetzen dieses Verfahren durch zehn Zeilen Code, und ein guter DevOps-Ingenieur sollte damit umgehen können. Das spart Zeit, Aufwand und Geld – sowohl für den Kunden als auch für das Unternehmen.“

5. Orchestrierungssysteme: Docker und Kubernetes

Kirill Sergejew: „Virtuelle Server sind in Container unterteilt, in denen wir jeweils unsere Anwendung installieren können. Wenn es viele Container gibt, müssen Sie sie verwalten: einen einschalten, einen anderen ausschalten, irgendwo Backups erstellen. Dies wird recht komplex und erfordert ein Orchestrierungssystem.

Zuvor wurde jede Anwendung von einem separaten Server verwaltet – jegliche Änderungen im Betrieb könnten sich auf die Funktionsfähigkeit der Anwendung auswirken. Dank Containern werden Anwendungen isoliert und separat ausgeführt – jede auf einer eigenen virtuellen Maschine. Wenn ein Fehler auftritt, muss keine Zeit mit der Suche nach der Ursache verschwendet werden. Es ist einfacher, den alten Container zu zerstören und einen neuen hinzuzufügen.“

6. Konfigurationssysteme: Chef, Ansible, Puppet

Wenn Sie eine ganze Serverflotte warten müssen, müssen Sie viele Vorgänge gleicher Art durchführen. Es ist langwierig und schwierig, und manuelle Arbeit erhöht auch die Fehlerwahrscheinlichkeit. Hier helfen Konfigurationssysteme. Mit ihrer Hilfe erstellen sie ein Skript, das für Programmierer, DevOps-Ingenieure und Systemadministratoren leicht lesbar ist. Dieses Skript hilft dabei, dieselben Vorgänge automatisch auf Servern auszuführen. Dies reduziert manuelle Vorgänge (und damit Fehler).

Welche Art von Karriere kann ein DevOps-Ingenieur aufbauen?

Sie können sowohl horizontal als auch vertikal entwickeln.

Igor Boyko: „Aus Sicht der horizontalen Entwicklung haben DevOps-Ingenieure jetzt die breitesten Perspektiven. Alles ändert sich ständig und Sie können Fähigkeiten in den unterschiedlichsten Bereichen aufbauen: von Versionskontrollsystemen bis zur Überwachung, von der Konfigurationsverwaltung bis hin zu Datenbanken.

Sie können Systemarchitekt werden, wenn ein Mitarbeiter daran interessiert ist, zu verstehen, wie eine Anwendung in allen Phasen ihres Lebenszyklus funktioniert – von der Entwicklung bis zum Support.“

Wie werde ich DevOps-Ingenieur?

  1. Lesen Sie das Phoenix Project und das DevOps-Handbuch. Dies sind die eigentlichen Säulen der DevOps-Philosophie, wobei die erste eine Fiktion ist.
  2. Lernen Sie Technologien aus der obigen Liste: alleine oder durch Online-Kurse.
  3. Treten Sie als DevOps-Ingenieur für ein Open-Source-Projekt bei.
  4. Üben und bieten Sie DevOps-Praktiken für Ihre persönlichen und beruflichen Projekte an.

Source: habr.com

Kommentar hinzufügen