So werden Sie in sechs Monaten oder noch schneller DevOps-Ingenieur. Teil 4. Software-Verpackung

So werden Sie in sechs Monaten oder noch schneller DevOps-Ingenieur. Teil 1. Einführung
So werden Sie in sechs Monaten oder noch schneller DevOps-Ingenieur. Teil 2. Konfiguration
So werden Sie in sechs Monaten oder noch schneller DevOps-Ingenieur. Teil 3. Versionen



Überlegen Sie, wie Sie Ihren Code für eine einfache Bereitstellung und anschließende Ausführung verpacken. Ich möchte Sie daran erinnern, dass wir jetzt hier sind:



Unabhängig davon, ob Sie mit Ihren derzeitigen oder zukünftigen Arbeitgebern sprechen, sollten Sie in der Lage sein, klar zu artikulieren, was DevOps ist und warum es wichtig ist.
Geben Sie eine konsistente Geschichte darüber, wie Sie Code am besten schnell und effizient vom Laptop des Entwicklers an den Ort der Bereitstellung des Endprodukts mit dem entsprechenden Gewinn liefern können. Wir untersuchen nicht eine Reihe unterschiedlicher, modischer DevOps-Tools, sondern eine Reihe von Fähigkeiten, die sich an den Anforderungen des Unternehmens orientieren und sich auf technische Tools stützen. Denken Sie daran, dass das Studium jeder Phase von DevOps ungefähr einen Monat Training dauert, was insgesamt sechs Monate dauert.

Virtualisierungs-Tutorial


Erinnerst du dich an physische Server? Dieselben Server, auf die Sie wochenlang auf die Genehmigung der Bestellung, die Genehmigung des Sendevorgangs, die Genehmigung durch das Rechenzentrum, die Netzwerkverbindung, die Installation des Betriebssystems und Patches gewartet haben? Dies sind die Server, die in unser Leben kamen.

Stellen Sie sich vor, der einzige Weg, ein Zuhause zu finden, besteht darin, ein brandneues Zuhause zu bauen. Müssen Sie doch irgendwo leben? Warten Sie also, bis es gebaut ist, egal wie lange es dauert! Es scheint cool zu sein, weil jeder sein eigenes Zuhause bekommt, aber lästig, weil der Bau viel Zeit in Anspruch nimmt. Nach dieser Analogie ist ein physischer Server wie ein Zuhause.

Im Laufe der Zeit wurde dieser Prozess ärgerlich und wirklich kluge Leute kamen auf die Idee der Virtualisierung. Sie beschlossen, eine Reihe von imaginären Maschinen auf einer physischen Maschine zu betreiben, und ließen jede von ihnen vorgeben, eine echte Maschine zu sein. Genial!

Wenn Sie also wirklich ein Zuhause brauchen, können Sie Ihr eigenes bauen und sechs Wochen warten. Oder Sie ziehen in ein Wohnhaus und teilen Ressourcen mit anderen Bewohnern. Vielleicht nicht so cool, aber gut genug! Und vor allem müssen Sie auf nichts warten!

Dies dauerte einige Zeit, und Unternehmen wie VMWare verdienten damit ernsthaftes Kapital. Dann entschieden andere kluge Köpfe, dass es nicht ausreicht, eine Reihe virtueller Maschinen in eine physische Maschine zu verschieben: Sie benötigen eine kompaktere Verpackung von mehr Prozessen in weniger Ressourcen.

Ein Haus oder sogar eine Wohnung ist also zu teuer. Versuchen Sie also vielleicht, ein Zimmer vorübergehend zu mieten? Außerdem kann ich es jederzeit betreten und verlassen! Dies ist, was Docker im Wesentlichen ab Dezember 2018 darstellt.



Geburtsdocker


Docker ist eine neue Technologie, die auf einer sehr alten Idee basiert. Das FreeBSD-Betriebssystem enthielt das Konzept der Jail-Virtualisierungs-Engine aus dem Jahr 2000! Wahrlich, alles Neue ist alt vergessen.

Und damals und heute bestand die Idee darin, einzelne Prozesse innerhalb desselben Betriebssystems basierend auf der Virtualisierung auf Betriebssystemebene oder der „Virtualisierung auf Systemebene“ zu isolieren. Beachten Sie, dass dies nicht mit einer vollständigen Virtualisierung oder einer „vollständigen Virtualisierung“ identisch ist, bei der virtuelle Maschinen nebeneinander auf demselben physischen Host ausgeführt werden.

In der Praxis bedeutet dies, dass die wachsende Beliebtheit von Docker genau das Wachstum von Microservices widerspiegelt, einem Ansatz für die Softwareentwicklung, bei dem Software in viele separate Komponenten unterteilt wird. Und all diese Komponenten brauchen ihr Zuhause. Die individuelle Bereitstellung als eigenständige Java-Anwendungen oder ausführbare Binärdateien ist ein großes Problem: Die Art und Weise, wie Sie eine Java-Anwendung steuern, unterscheidet sich von der Art und Weise, wie Sie eine C ++ - Anwendung steuern, und dies unterscheidet sich wiederum von der Verwaltung einer Golang-Anwendung .

Stattdessen bietet Docker eine einzige Verwaltungsschnittstelle, über die Programmierer verschiedene Anwendungen packen, nacheinander bereitstellen und ausführen können. Dies ist ein großer Gewinn, aber lassen Sie uns über die Vor- und Nachteile von Docker sprechen.

Docker Vorteile


1. Prozessisolation


Docker ermöglicht jedem Dienst einen vollständig isolierten Prozess. Service A lebt in einem eigenen kleinen Container mit all seinen Abhängigkeiten, Service B lebt auch in einem eigenen privaten Container mit all seinen Abhängigkeiten, und diese beiden Services stehen nicht in Konflikt.

Wenn ein Container ausfällt, leidet nur dieser Container.

Die restlichen Container werden und sollten weiterarbeiten. Ein solcher Mechanismus ist für die Sicherheit von Vorteil. Wenn der Container kompromittiert ist, ist es sehr schwierig (aber nicht unmöglich!), Aus ihm herauszukommen, um das Basisbetriebssystem zu knacken.

Wenn sich der Container nicht ordnungsgemäß verhält (zu viel Prozessor- oder Speicherressourcen verbraucht), können Sie den „Explosionsradius“ für diesen Container nur verringern, ohne den Rest des Systems zu beeinträchtigen.

2. Bereitstellung


Überlegen Sie, wie unterschiedliche Anwendungen in der Praxis erstellt werden. Wenn dies eine Python-Anwendung ist, enthält sie viele verschiedene Python-Pakete. Einige von ihnen werden als Pip-Module installiert, andere als RPM- oder Deb-Pakete und andere als einfache Git-Clone-Installationen. Wenn Sie mit virtualenv fertig sind, handelt es sich um eine einzelne Zip-Datei aller Abhängigkeiten im Verzeichnis virtualenv.

Wenn es sich dagegen um eine Java-Anwendung handelt, verfügt sie über eine Gradle Built-Assembly, deren Abhängigkeiten erweitert und an geeigneten Stellen verteilt sind.

Sehen Sie, was los ist? Unterschiedliche Anwendungen, Assemblys mit unterschiedlichen Sprachen und unterschiedlichen Laufzeiten stellen ein Problem dar, wenn es darum geht, diese Anwendungen für Produkte bereitzustellen. Darüber hinaus verschärft sich das Problem bei Konflikten. Was ist, wenn Dienst A von der Python v1-Bibliothek und Dienst B von der Python v2-Bibliothek abhängt? Hier liegt ein Konflikt vor, da v1 und v2 nicht auf demselben Computer koexistieren können.

Und dann kommt Docker ins Spiel. Damit können Sie nicht nur den Prozess, sondern auch die Abhängigkeiten vollständig isolieren. Es ist möglich, dass mehrere Container nebeneinander auf demselben Betriebssystem arbeiten, von denen jeder seine eigenen Bibliotheken und Pakete enthält, die nicht mit den anderen kompatibel sind.

3. Programmausführungsverwaltung


Ich stelle fest, dass die Art und Weise, wie wir unterschiedliche Anwendungen verwalten, von der Anwendung selbst abhängt. Java-Code wird in der Registrierung anders geschrieben, läuft anders und wird anders verfolgt als Python-Code. Und Python unterscheidet sich von Golang usw.

Mit Docker erhalten wir eine einzige einheitliche Verwaltungsoberfläche, mit der wir Protokolle starten, steuern, zentralisieren, viele verschiedene Arten von Anwendungen stoppen und neu starten können. Dies ist ein enormer Produktivitätsgewinn, der die Betriebskosten des Betriebs von Produktionssystemen erheblich senkt.

Seit Dezember 2018 müssen Sie sich nicht mehr zwischen dem Schnellstart von Docker und der Sicherheit virtueller Maschinen entscheiden. Fireckracker Lightweight Virtualization Platform- Projekt, eingeführt von Amazon, versuchte, das Beste aus beiden Lösungen zu kombinieren. Dies ist jedoch eine neue Technologie, die sich erst der Produktphase nähert.



Hinweis: Die Firecracker-Plattform bietet Tools zum Erstellen und Verwalten isolierter Umgebungen und Dienste, die mit einem serverlosen Entwicklungsmodell erstellt wurden. Der Projektcode ist in Rust geschrieben und wird unter der Apache 2.0-Lizenz verteilt.

Firecracker bietet leichte virtuelle Maschinen an, die als microVMs bezeichnet werden. Um sie vollständig zu isolieren, werden Hardwarevirtualisierungstechnologien verwendet, aber gleichzeitig werden Leistung und Flexibilität auf der Ebene gewöhnlicher Container bereitgestellt. Die Plattform basiert auf dem Virtual Machine Monitor (VMM), der den im Linux-Kernel integrierten KVM-Hypervisor verwendet. VMM basiert auf den Grundlagen des in Rust geschriebenen Crosvm- Projekts , das Google entwickelt, um Linux unter ChromeOS zu starten. Ende 2018 wurden die Codebasen Crosvm und Firecracker aufgeteilt, aber Amazon plant, Korrekturen an den ausgeliehenen Komponenten an Upstream zu senden.

Egal wie gut der Docker ist, er hat auch Nachteile.

Einführung in Lambda


Erstens funktioniert das Ausführen von Docker weiterhin auf Servern, die vorbereitet, gepatcht usw. werden müssen. Zweitens ist Docker nicht 100% sicher. Zumindest ist es nicht so sicher wie eine virtuelle Maschine. Es gibt einen Grund, warum große Unternehmen, die mit gehosteten Containern arbeiten, dies in virtuellen Maschinen und nicht auf Bare Metal tun. Sie benötigen schnelle Startzeiten für Container und Sicherheit für virtuelle Maschinen!



Drittens kontrolliert niemand den Docker als solchen. Stattdessen wird es fast immer als Teil einer komplexen Container-Orchestrierungsstruktur wie Kubernetes, ECS, Docker-Swarm oder Nomad bereitgestellt. Dies sind ziemlich komplexe Plattformen, für deren Arbeit spezielles Personal erforderlich ist (auf diese Lösungen werde ich später noch näher eingehen).

Wenn ich jedoch nur ein Entwickler bin, möchte ich nur Code schreiben und jemanden bitten, ihn für mich auszuführen. Docker, Kubernetes und anderer Jazz - muss ich das alles wirklich lernen? Ich werde das sagen: Es hängt alles von den Umständen ab. Für Leute, die nur möchten, dass jemand anderes ihren Code ausführt, ist AWS Lambda Cloud Storage und ähnliches eine großartige Option.

Mit AWS Lambda können Sie Code ohne Bereitstellung und Serververwaltung ausführen. Sie zahlen nur für die Rechenzeit, die Sie verbrauchen, und wenn Ihr Code nicht funktioniert, fallen keine Gebühren an.
Wenn Sie von serverlosem Speicher gehört haben, dann ist dies das Richtige. Keine Startserver oder Verwaltungscontainer mehr! Schreiben Sie einfach Ihren Code, packen Sie ihn in eine Zip-Datei, laden Sie ihn auf Amazon hoch und lassen Sie sie mit Ihren Kopfschmerzen umgehen! Da die „Lambdas“ nur von kurzer Dauer sind, gibt es nichts, was sie knacken könnte - die „Lambdas“ sind in ihrem Design ziemlich sicher. Echt super?

Es gibt aber auch negative Punkte. Erstens können Lambdas nur maximal 15 Minuten arbeiten (Stand November 2018). Dies bedeutet, dass lang laufende Prozesse wie Kafka oder Anwendungen zum Knacken von Zahlen in Lambda nicht funktionieren können.

Zweitens sind „Lambdas“ Funktionen als Dienst (Funktionen als Dienst). Dies bedeutet, dass Ihre Anwendung vollständig in Microservices zerlegt und mit anderen komplexen PaaS-Diensten wie AWS Step Functions synchronisiert werden muss . Allerdings befindet sich nicht jedes Unternehmen auf dieser Ebene der Microservice-Architektur.

Drittens ist die Fehlerbehebung bei Lambdas sehr schwierig. Es handelt sich um Cloud-Laufzeiten, und alle Fehlerkorrekturen treten im Amazon-Ökosystem auf. Dies ist oft recht komplex und nicht intuitiv. Kurz gesagt, hier gibt es kein kostenloses Mittagessen.

Ich stelle fest, dass es Ende 2018 auch serverlose Cloud-Container-Lösungen wie AWS Fargate gibt. Seine Mechanik ist der von Lambda sehr ähnlich. Wenn Sie gerade erst anfangen, diese Dienste zu erlernen, empfehle ich dringend, Fargate auszuprobieren. Dies ist eine unglaublich einfache Möglichkeit, Container „richtig“ zum Laufen zu bringen. Darüber hinaus kündigte AWS Cloud Services am 13. Januar 2019 eine deutliche Preissenkung für Fargate an, was es zu einer sehr attraktiven Wahl für die Einführung von Servern ohne Server macht.



Zusammenfassung


Docker und Lambda sind die beiden beliebtesten modernen Cloud-basierten Ansätze zum Packen, Ausführen und Verwalten von Anwendungen. Sie sind häufig kostenlos und sowohl für verschiedene Anwendungsfälle als auch für Anwendungen geeignet.

Wie dem auch sei, der moderne DevOps-Ingenieur muss sich in beiden Bereichen gut auskennen. Daher sind Training Docker und Lambda gute kurz- und mittelfristige Ziele.
Ich stelle fest, dass wir uns bisher mit Themen befasst haben, die DevOps Junior- und Intermediate-Ingenieure kennen sollten. In den folgenden Abschnitten werden wir beginnen, Methoden zu diskutieren, die für mittelständische und leitende DevOps-Ingenieure besser geeignet sind. Wie immer gibt es keine einfachen Möglichkeiten, Wissen zu erlangen!

Wird sehr bald fortgesetzt ...

Ein bisschen Werbung :)


Vielen Dank für Ihren Aufenthalt bei uns. Gefällt dir unser Artikel? Möchten Sie weitere interessante Materialien sehen? Unterstützen Sie uns, indem Sie eine Bestellung aufgeben oder Ihren Freunden Cloud-basiertes VPS für Entwickler ab 4,99 US-Dollar empfehlen , ein einzigartiges Analogon von Einstiegsservern, das von uns für Sie erfunden wurde: Die ganze Wahrheit über VPS (KVM) E5-2697 v3 (6 Kerne) 10 GB DDR4 480 GB SSD 1 Gbit / s ab 19 $ oder wie teilt man den Server? (Optionen sind mit RAID1 und RAID10, bis zu 24 Kernen und bis zu 40 GB DDR4 verfügbar).

Dell R730xd 2-mal günstiger im Equinix Tier IV-Rechenzentrum in Amsterdam? Nur wir haben 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2,6 GHz 14C 64 GB DDR4 4 x 960 GB SSD 1 Gbit / s 100 TV von 199 US-Dollar in den Niederlanden!Dell R420 - 2x E5-2430 2,2 GHz 6C 128 GB DDR3 2x960 GB SSD 1 Gbit / s 100 TB - ab 99 US-Dollar! Lesen Sie, wie Sie eine Infrastruktur aufbauen Klasse C mit Dell R730xd E5-2650 v4-Servern für 9.000 Euro für einen Cent?

All Articles