Wenn eine Anwendung nicht funktioniert, hören die Benutzer am wenigsten gerne von den Kollegen den Satz âDas Problem liegt bei Ihnenâ. Letztendlich leiden die Anwender - und es ist ihnen egal, welches Teammitglied fĂŒr den Ausfall verantwortlich ist. Die DevOps-Kultur entstand genau aus diesem Grund, um Entwicklung und Betrieb zusammenzubringen und sie um eine gemeinsame Verantwortung fĂŒr das Endprodukt zu vereinen.
Welche Praktiken zÀhlen zu DevOps und warum sind sie notwendig? Was machen DevOps-Ingenieure und welche FÀhigkeiten sollten sie haben? Auf diese und weitere Fragen antworten die Experten von EPAM: Kirill Sergeev, Systems Engineer und DevOps-Evangelist, und Igor Bojko, leitender Systems Engineer und Koordinator eines der DevOps-Teams des Unternehmens.

Warum ist DevOps notwendig?
FrĂŒher gab es eine Barriere zwischen den Entwicklern und dem Support (sog. Operations). Es klingt paradox, aber sie hatten unterschiedliche Ziele und KPIs, obwohl sie an der gleichen Sache arbeiteten. Das Ziel der Entwicklung war es, die GeschĂ€ftsanforderungen so schnell wie möglich umzusetzen und in das funktionierende Produkt zu integrieren. Der Support war dafĂŒr verantwortlich, dass die Anwendung stabil lief â und jede VerĂ€nderung gefĂ€hrdete diese StabilitĂ€t. Es gab einen Interessenkonflikt â DevOps wurde geschaffen, um dieses Problem zu lösen.
Was ist DevOps?
Das ist eine gute und umstrittene Frage: Eine endgĂŒltige Einigung darĂŒber gibt es weltweit bisher nicht. Bei EPAM sind wir der Ansicht, dass DevOps Technologien, Prozesse und eine Kultur der Zusammenarbeit innerhalb eines Teams vereint. Diese Vereinigung zielt darauf ab, den kontinuierlichen Mehrwert fĂŒr die Endbenutzer zu liefern.
Kirill Sergeev: âEntwickler schreiben Code, Tester prĂŒfen ihn, und Administratoren setzen das endgĂŒltige Produkt in der Produktionsumgebung ein. Lange Zeit waren diese Teile des Teams etwas voneinander getrennt, bis die Idee aufkam, sie durch einen gemeinsamen Prozess zu integrieren. So entstanden die DevOps-Praktiken.â
Der Tag ist gekommen, an dem Entwickler und Systemingenieure sich fĂŒr die Arbeit des jeweils anderen interessieren. Die Barriere zwischen Produktion und Support wird zunehmend abgebaut. So entstand DevOps, das Praktiken, Kultur und die Art der Zusammenarbeit im Team umfasst.

Was ist das Wesen der DevOps-Kultur?
Es besteht darin, dass die Verantwortung fĂŒr das Endergebnis auf jedem Teammitglied liegt. Das Interessanteste und Schwierigste an der DevOps-Philosophie ist es, zu verstehen, dass eine Person nicht nur fĂŒr ihren Arbeitsschritt verantwortlich ist, sondern dafĂŒr, wie das gesamte Produkt funktioniert. Das Problem liegt nicht auf der Seite eines Einzelnen â es ist gemeinsam, und jedes Teammitglied trĂ€gt zur Lösung bei.
Ein zentrales Prinzip der DevOps-Kultur ist, tatsĂ€chlich Probleme zu lösen und nicht nur DevOps-Praktiken anzuwenden. DarĂŒber hinaus werden diese Praktiken nicht «auf der Seite von jemandem» implementiert, sondern im gesamten Produkt. Ein Projekt benötigt nicht einfach nur einen DevOps-Ingenieur â es braucht eine Lösung fĂŒr das Problem, und die Rolle des DevOps-Ingenieurs kann auf mehrere Teammitglieder mit unterschiedlichen Spezialisierungen verteilt werden.
Welche DevOps-Praktiken gibt es?
DevOps-Praktiken decken alle Phasen des Softwarelebenszyklus ab.
Igor Boiko: âDer ideale Fall ist, wenn wir DevOps-Praktiken direkt zu Beginn eines Projekts implementieren. Zusammen mit den Architekten planen wir die Architektur des Projekts, den Standort und die Skalierung der Anwendung und wĂ€hlen die Plattform aus. Aktuell ist die mikroservicebasierte Architektur im Trend â hierfĂŒr wĂ€hlen wir ein Orchestrierungssystem: Wir mĂŒssen in der Lage sein, jedes Element der Anwendung unabhĂ€ngig zu verwalten und zu aktualisieren. Eine weitere Praxis ist âInfrastructure as Codeâ. Dies bezeichnet einen Ansatz, bei dem die Infrastruktur des Projekts durch Code erstellt und verwaltet wird, anstatt direkt mit Servern zu interagieren.
Dann gehen wir in die Entwicklungsphase ĂŒber. Eine der gröĂten Praktiken hier ist der Aufbau von CI/CD: Wir mĂŒssen den Entwicklern helfen, Ănderungen am Produkt schnell, in kleinen Schritten und ohne groĂen Aufwand zu integrieren. CI/CD umfasst sowohl die CodeprĂŒfung als auch das Einpflegen in den Hauptbranch und die Bereitstellung der Anwendung in Test- und Produktionsumgebungen.
In den CI/CD-Phasen durchlĂ€uft der Code QualitĂ€tskontrollen. Damit wird sichergestellt, dass der Code, der von der Entwicklungsstation ausgeht, den festgelegten QualitĂ€tskriterien entspricht. Hier kommen Unit- und UI-Tests zum Einsatz. FĂŒr eine schnelle, reibungslose und fokussierte Produktbereitstellung kann der passende Deployment-Typ gewĂ€hlt werden.
DevOps-Praktiken haben auch in der UnterstĂŒtzungsphase eines fertigen Produkts ihren Platz. Sie werden fĂŒr Ăberwachung, Feedback, Sicherheit und Implementierung von Ănderungen eingesetzt. DevOps betrachtet all diese Aufgaben aus der Perspektive stĂ€ndiger Verbesserungen. Wir minimieren wiederkehrende Operationen und automatisieren sie. Dazu gehören Migrationen, Anwendungs-erweiterungen und die GewĂ€hrleistung der Betriebsbereitschaft.
Was bringen DevOps-Praktiken?
Wenn wir ein Lehrbuch ĂŒber moderne DevOps-Praktiken schreiben wĂŒrden, wĂ€ren auf der ersten Seite drei Punkte aufgefĂŒhrt: Automatisierung, Beschleunigung der Releases und schnelles Feedback von den Nutzern.
Kirill Sergeev: «Das Erste ist die Automatisierung. Alle Interaktionen im Team können wir automatisieren: Code geschrieben â bereitgestellt â getestet â installiert â Feedback gesammelt â zurĂŒck zum Anfang. All das geschieht automatisch.
Das Zweite â die Beschleunigung des Releases und sogar die Vereinfachung der Entwicklung. FĂŒr den Kunden ist es immer wichtig, dass das Produkt so schnell wie möglich auf den Markt kommt und Nutzen bringt, bevor die Konkurrenzprodukte verfĂŒgbar sind. Der Prozess der Produktlieferung kann stĂ€ndig verbessert werden: Zeit reduzieren, zusĂ€tzliche Kontrollpunkte hinzufĂŒgen, das Monitoring optimieren.
Das Dritte â die Beschleunigung des Nutzer-Feedbacks. Wenn ein Nutzer Anmerkungen hat, können wir sofort Anpassungen vornehmen und die Anwendung sofort aktualisieren.»

Wie verhalten sich die Begriffe «System Engineer», «Build Engineer» und «DevOps Engineer» zueinander?
Sie ĂŒberschneiden sich, beziehen sich jedoch auf leicht unterschiedliche Bereiche.
Ein System Engineer bei EPAM ist eine Position. Es gibt verschiedene Erfahrungsstufen: vom Junior bis zum Chief Specialist.
Ein Build Engineer ist eher eine Rolle, die man im Projekt ĂŒbernehmen kann. Derzeit bezeichnen so die Personen, die fĂŒr CI/CD verantwortlich sind.
Ein DevOps-Ingenieur ist ein Fachmann, der in einem Projekt DevOps-Praktiken implementiert.
Zusammengefasst betrachtet, erfĂŒllt eine Person in der Position eines Systemingenieurs die Rolle eines Build-Ingenieurs im Projekt und ist fĂŒr die Implementierung von DevOps-Praktiken verantwortlich.
Was genau macht ein DevOps-Ingenieur?
DevOps-Ingenieure bringen alle Teile eines Projekts zusammen. Sie verstehen die Arbeitsweise von Programmierern, Testern und Systemadministratoren und helfen, deren Arbeit zu erleichtern. Sie haben ein GespĂŒr fĂŒr die BedĂŒrfnisse und Anforderungen des Unternehmens und wissen, welche Rolle es im Entwicklungsprozess spielt â und gestalten den Prozess unter BerĂŒcksichtigung der Interessen des Kunden.
Wir haben viel ĂŒber Automatisierung gesprochen â das ist das Hauptaugenmerk der DevOps-Ingenieure. Dies ist ein Ă€uĂerst wichtiger Punkt, der unter anderem die Vorbereitung von Umgebungen umfasst.
Kirill SergeevâBevor Aktualisierungen in das Produkt eingefĂŒhrt werden, mĂŒssen sie in einer separaten Umgebung getestet werden. Diese wird von den DevOps-Ingenieuren vorbereitet. Sie schaffen auch eine DevOps-Kultur im Projekt: sie implementieren DevOps-Praktiken auf allen Ebenen ihrer Projekte. Diese drei Prinzipien: Automatisierung, Vereinfachung, Beschleunigung â bringen sie ĂŒberall ein, wo sie können.â
Was sollte ein DevOps-Ingenieur wissen?
GrundsÀtzlich sollte er Kenntnisse aus verschiedenen Bereichen haben: Programmierung, Umgang mit Betriebssystemen, Datenbanken, Build- und Konfigurationssystemen. Hinzu kommt die FÀhigkeit, mit Cloud-Infrastrukturen, Orchestrierungssystemen und Monitoring-Tools zu arbeiten.
1. Programmiersprachen
DevOps-Ingenieure beherrschen mehrere grundlegende Sprachen zur Automatisierung und können beispielsweise einem Programmierer sagen: âWie wĂ€re es, wenn du die Code-Installation nicht manuell, sondern mit unserem Skript durchfĂŒhrst, das alles automatisiert? Wir erstellen eine Konfigurationsdatei, die sowohl fĂŒr dich als auch fĂŒr uns ĂŒbersichtlich ist â und jederzeit anpassbar. AuĂerdem sehen wir, wer wann warum Ănderungen vornimmt.â
Ein DevOps-Ingenieur kann eine oder mehrere dieser Sprachen lernen: Python, Groovy, Bash, PowerShell, Ruby, Go. Es ist nicht erforderlich, sie auf tiefem Niveau zu beherrschen â grundlegende Kenntnisse der Syntax, Objektorientierung und die FĂ€higkeit, einfache Skripte zur Automatisierung zu schreiben, sind ausreichend.
2. Betriebssysteme
Ein DevOps-Ingenieur muss verstehen, auf welchem Server das Produkt installiert wird, in welcher Umgebung es betrieben wird und mit welchen Services es interagiert. Man kann sich auf die Windows- oder Linux-Familie spezialisieren.
3. Versionskontrollsysteme
Ohne Kenntnisse in Versionskontrollsystemen kommt ein DevOps-Ingenieur nicht weit. Git ist derzeit eines der beliebtesten Systeme.
4. Cloud-Anbieter
AWS, Google, Azure - insbesondere wenn wir ĂŒber den Windows-Bereich sprechen.
Kirill Sergeev: âCloud-Anbieter stellen uns zur VerfĂŒgung virtuellen Server, die hervorragend auf CI/CD abzielen.
Die Installation von zehn physikalischen Servern erfordert etwa hundert manuelle Operationen. Jeder Server muss manuell gestartet, das benötigte Betriebssystem installiert und unser Anwendung auf diesen zehn Servern eingerichtet sowie alles zehnmal ĂŒberprĂŒft werden. Cloud-Services ersetzen dieses Verfahren durch zehn Zeilen Code, und ein guter DevOps-Ingenieur sollte in der Lage sein, damit umzugehen. So spart er Zeit, Energie und Geld â sowohl fĂŒr den Kunden als auch fĂŒr das Unternehmen.â
5. Orchestrierungssysteme: Docker und Kubernetes
Kirill Sergeev: âVirtuelle Server sind in Container unterteilt, in jedem von ihnen können wir unsere Anwendung installieren. Wenn es viele Container gibt, muss man sie verwalten: einen einschalten, einen anderen ausschalten, an einigen Stellen Backups erstellen. Das wird ziemlich komplex und erfordert ein Orchestrierungssystem.
FrĂŒher wurde jede Anwendung von einem eigenen Server betreut â Ănderungen an seiner Funktionsweise konnten die ZuverlĂ€ssigkeit der Anwendung beeintrĂ€chtigen. Dank der Container werden Anwendungen isoliert und unabhĂ€ngig voneinander gestartet â jede auf ihrer eigenen virtuellen Maschine. Tritt ein Fehler auf, muss man keine Zeit mit der Fehlersuche verbringen. Es ist einfacher, den alten Container zu löschen und einen neuen hinzuzufĂŒgen.
6. Konfigurationssysteme: Chef, Ansible, Puppet
Wenn es darum geht, einen gesamten Serverpark zu warten, mĂŒssen viele Ă€hnliche Aufgaben durchgefĂŒhrt werden. Das ist zeitaufwendig und kompliziert, und manuelle Arbeiten erhöhen das Risiko von Fehlern. Hier kommen Konfigurationssysteme ins Spiel. Mit ihrer Hilfe wird ein Skript erstellt, das sowohl fĂŒr Programmierer als auch fĂŒr DevOps-Ingenieure und Systemadministratoren gut lesbar ist. Dieses Skript hilft dabei, identische VorgĂ€nge auf den Servern automatisch auszufĂŒhren, wodurch die Anzahl manueller Eingriffe (und damit Fehler) reduziert wird.
Welche Karriere kann ein DevOps-Ingenieur aufbauen?
Man kann sich sowohl horizontal als auch vertikal weiterentwickeln.
Igor Boiko: âIn Bezug auf die horizontale Entwicklung haben DevOps-Ingenieure derzeit die breitesten Perspektiven. Alles Ă€ndert sich stĂ€ndig, und man kann FĂ€higkeiten in den unterschiedlichsten Bereichen ausbauen: von Versionskontrollsystemen bis hin zu Monitoring, von Konfigurationsmanagement bis zu Datenbanken.
Man kann zum Systemarchitekten werden, wenn der Mitarbeiter daran interessiert ist, zu verstehen, wie eine Anwendung wĂ€hrend ihres gesamten Lebenszyklus â von der Entwicklung bis zur UnterstĂŒtzung â funktioniert.
Wie wird man DevOps-Ingenieur?
- Lesen Sie die BĂŒcher "Projekt Phoenix" und das DevOps-Handbuch. Diese Werke sind wahre SĂ€ulen der DevOps-Philosophie, wobei das erste ein fiktiver Roman ist.
- Erforschen Sie die Technologien aus der obigen Liste: selbststÀndig oder durch Online-Kurse.
- Treten Sie als DevOps-Ingenieur einem Open-Source-Projekt bei.
- Praktizieren Sie und wenden Sie DevOps-Praktiken in Ihren persönlichen und beruflichen Projekten an.
Quelle: habr.com
