Hier ist eine Übersetzung des Artikels von Patrick Lee Scott, der auf hackernoon.com veröffentlicht wurde. Der Autor bietet an, sich mit einigen wichtigen Prinzipien vertraut zu machen, die Ihnen beim Einpumpen von DevOps helfen.

Vor ein paar Tagen habe ich versucht, ein Ei auf dumme Weise zu schälen, und meine Freundin Angeli hat mich gefragt, warum ich das mache.
Sie nahm ein weiteres hart gekochtes Ei und schlug es auf ein Schneidebrett, drückte es dann und rollte es auf den Tisch. Die Reinigung dauerte nur 3 Sekunden. Und ich stand auf und nahm die Muschel Stück für Stück ab.
Was ich dazu sagen möchte:
Wir übertreiben die Bedeutung der Bemühungen.Die besten Lösungen sind einfach und effektiv. Ist es schwierig, einen rostigen Bolzen zu reinigen? Vielleicht ja. Aber nur, wenn Sie nicht wissen, dass dies mit Coca-Cola möglich ist. Immer noch kompliziert? Nein. Sie müssen nur den Bolzen in das Glas stecken und warten.
Ohne einfache Techniken zu kennen, können Sie sie nicht anwenden. Anstatt zu implementieren, führen Sie Experimente durch, anstatt zu replizieren, forschen Sie.
Wenn Sie in der Programmierung immer wieder einen Ansatz verwenden, um das zu lösende Problem zu vereinfachen, wird dieser Ansatz zu einer Vorlage oder zur sogenannten Best Practice.
Trotz komplexer und beängstigender Namen wie Command Query Responsibility Segregation (CQRS) oder Event Sourcing (ES) helfen diese Vorgehensweisen bei der Lösung von Problemen. Insbesondere solche, die beim Aufbau verteilter Systeme entstehen.
Wenn Sie die Entwicklung als Ganzes betrachten, werden wir feststellen, dass es universellere Prinzipien gibt, zum Beispiel „Keep it Simple, Stupid“ (KISS) und „Don't Repeat Yourself“ (DRY). Ich möchte über ähnliche Muster und Prinzipien in Bezug auf DevOps sprechen.
DevOps wird oft als das gelobte Land dargestellt, auf dem Vögel singen und die Sonne scheint. Aber ohne die richtigen Methoden zu verwenden, wird DevOps zur Hölle und Sie werden alle Ihre Finger mit einer Muschel durchbohren (wie ich).
Bei der Erstellung von DevOps-Systemen habe ich neben universellen Prinzipien wie KISS und DRY mehrere Lösungen für mich gefunden. Sie können zwar nicht als Vorlagen bezeichnet werden, helfen Ihnen jedoch dabei, das Ei schnell zu reinigen. Diese Lösungen (in zufälliger Reihenfolge):
- Tu nicht das, was andere vor dir getan haben.
- Lassen Sie Entwickler so produktiv wie möglich sein.
- Produktion ist ein Mythos.
- Übertragen Sie alles in den Cluster und sichern Sie das Ganze.
- VPN ist zu kompliziert, Lösungen sind einfacher.
- Organisieren, automatisieren und erobern!
Lektion 1. Tun Sie nicht das, was andere vor Ihnen getan haben
Wenn Sie die Möglichkeit haben, ein fertiges Produkt zu kaufen, oder wenn Sie über das erforderliche und bequeme Tool im öffentlichen Bereich verfügen, verwenden Sie dieses.
Das Rad nicht neu erfinden - kaufen.
Wussten Sie, dass Sie denselben Mailserver verwenden können, den Craigslist verwendet? Und was ist es kostenlos? Benötigen Sie einen Mailserver - erstellen Sie keinen neuen, arbeiten Sie mit einem vorhandenen.
Ich suche gerne nach Tools in fantastischen, selbst gehosteten Listen oder verwende dafür den Helm Hub.
Trotz der Tatsache, dass Helm ein ziemlich neues Tool zum Auffinden von Software ist, wurde diese Site bereits erstellt: https://v3.helm.sh/Mit Helm können Sie ganz einfach nach Ihren fertigen Fahrrädern suchen.
Gehen wir zurück in die Zeit, als ich gerade mit dem Programmieren anfing. In der 9. Klasse lernte ich meine erste „echte“ Sprache - QBasic. Zuvor habe ich einige Jahre lang HTML- und CSS-Websites erstellt. Damals war das Internet neu, und obwohl die Leute wussten, wie man Pakete erstellt, haben sie sie nicht geteilt, wie wir es jetzt sind. Normalerweise habe ich Disketten als Speicher verwendet - es wäre großartig, sie zusammen mit einem Spiel wie Arkanoid zu finden, das ich in Java Swing in Klasse 11 geschrieben habe ...
Ich habe damals nur Standardbibliotheken benutzt, Baby! Zumindest mit 13 wusste ich nur über sie Bescheid. Obwohl ich mir sicher bin, dass einige Java-Profis (Hallo, Vlad und Nick!) Damals schon cool waren. ;)
Jetzt ist alles falsch. Heute finden Sie ganze UI-Bibliotheken. Sie können die Bibliothek finden, um Daten mit einem einzigen Befehl elegant und einfach zu verarbeiten.
Es wäre großartig, wenn es ein Tool gäbe, mit dem voll funktionsfähige Subsysteme verwendet und installiert werden könnten, oder? Benötigen Sie eine Datenbank?
Datenbank installierenGute Nachricht: Ein solches Tool gibt es! Mit Helm können Sie auch voll funktionsfähige Subsysteme installieren, die verpackt und einsatzbereit sind.
Das Prinzip ist das gleiche wie für NPM und Gradle, aber die Pakete, die wir in Helm verwalten, werden als Diagramme bezeichnet. Diagramme markieren Container so, dass sie auf verschiedene Weise auf Kubernetes ausgeführt werden können.
Es stellt sich als schlüsselfertige Lösung heraus, ein Fahrrad zu kaufen. Diagramme sind das Rad, und Container mit Beschreibungen, die in Kubernetes ausgeführt werden, sind Räder.
Das Coole an den Diagrammen ist die Möglichkeit, Dienste zu packen und in einem beliebigen Kubernetes-Cluster auszuführen und sie bei Bedarf sogar mit anderen Personen zu teilen.
Dies bedeutet, dass Sie die gesamte Umgebung mit Code beschreiben können:
- name: backup repository: http:
Müssen Sie Ihre Marketing-Site auf 1.2.0 aktualisieren? Nehmen Sie einfach Änderungen vor und verpflichten Sie sich.
Lektion 2. Lassen Sie Entwickler so produktiv wie möglich sein.
Ich saß einmal am Tisch, schaute auf meinen Code und versuchte, den Fehler aufzuspüren. Die Benutzer haben sich seit einigen Wochen über ihn beschwert, und schließlich hatte ich ein wenig Freizeit, um herumzuhängen.
Tada-a-am! Fand es! Behoben!
Ich saß hinter einer Trennwand an meinem Arbeitsplatz in einem sonnenbeschienenen Raum und rief den anderen zu: "Ich habe den Fehler behoben!"
Nächsten Dienstag, wenn Benutzer die Veröffentlichung sehen, werden sie meine Bemühungen auf jeden Fall zu schätzen wissen! Aber dafür müssen wir packen und versuchen, die Veröffentlichung von ihrem Platz zu verschieben ... Vielleicht werden wir Erfolg haben, wenn nichts passiert ...
Okay,
wenn die Veröffentlichung nächsten Dienstag noch kommt, werden die Benutzer es definitiv zu schätzen wissen!
So machte ich meinen Einsatz bei meinem ersten College-Job als Junior-Programmierer.
Seitdem hat sich viel geändert.
Jetzt verwende ich die stammbasierte Entwicklung und stelle Module mehrmals am Tag bereit. Wenn ich eine Pull-Anfrage sende, veröffentlicht der Bot einen entsprechenden Kommentar mit dem Überprüfungscode in der gesammelten Umgebung, nachdem die Tests bestanden und die Builds gesammelt wurden.
Heute müssen Sie nicht mehr durch die Trennwand im Büro schreien.
Je mehr Freiheit Sie Programmierern geben - die Freiheit, die Teile der Infrastruktur zu steuern, die sie benötigen - desto einfacher ist es für Sie, als DevOps-Ingenieur zu arbeiten.
In der ersten Lektion haben wir gesehen, dass es für die Aktualisierung in der Produktion ausreicht, eine Ziffer zu ändern und festzuschreiben. In einer idealen Welt, in der wir Anwendungen in Diagramme packen, hat jeder Programmierer in einem Team die Möglichkeit, die Funktionsweise des Tools in der Produktionsphase zu beeinflussen. Kubernetes versteht Diagramme als Beschreibungen von Containern, weshalb sie den Ressourcenbedarf beschreiben.
Die Logik sieht ungefähr so aus: Ich kann nicht erraten, wie viel Speicher oder welche CPU-Einstellungen für einen neuen Dienst erforderlich sind (und ich denke, dass ich nicht der einzige bin). Daher setze ich auch Überwachung und Warnungen mit Regeln ein, nach denen mein Team und ich in Slack darüber informiert werden, dass diese Einstellungen angepasst werden müssen. Das heißt, das System informiert Sie über die erforderlichen Einstellungen, wenn wir es bereitstellen. Ich saß stundenlang da, schickte Anfragen über Prometheus und passte die Einstellungen an, genau wie ich es früher getan hatte, um die Shell auszuwählen. Und jetzt habe ich gelernt, alles mit Bedacht zu tun.
Ich kann dich schon sagen hören: "Es klingt zu kompliziert!" Nein. Stellen Sie einfach das Diagramm ein.
Wenn Sie etwas automatisieren oder vereinfachen können, fahren Sie fort. Was wäre zum Beispiel, wenn Sie einen DNS-Pfad zuweisen könnten, indem Sie einfach den Dienst mit der Bezeichnung "expose: true" bereitstellen? Hier erscheinen die Operatoren. Dies ist ein fortgeschritteneres Kubernetes-Tool, das Sie kennenlernen sollten. Aber gehen wir nicht zu tief ins Detail.
Lektion 3. Produktion ist ein Mythos
Dies war eine echte Offenbarung für mich. Ich musste die Dinge aus einem anderen Blickwinkel betrachten, also hör genau zu.
Seit mehr als zehn Jahren dachte ich, dass es auf der Welt nur wenige Arten von Umgebungen gibt. Im einfachsten Fall erfolgt die Bereitstellung und Produktion der Umgebung. Zuerst für das Staging bereitgestellt, dann getestet, in die nächste Stufe verschoben, bereitgestellt, getestet und so weiter. Sobald alles zusammenhält - der Sohn ist integriert - können Sie in Produktion gehen.
Ich folgte diesem Muster Jahr für Jahr und zweifelte kein einziges Mal daran. Das war schon immer so.
Und dieses Schema ist ein weiterer unproduktiver Weg, um die Hülle loszuwerden.
Im Wesentlichen ist ein Diagramm ein Abhängigkeitsdiagramm. Es kann verwendet werden, um die Umgebung darzustellen, und dann kommt es beim Bereitstellungsprozess in der Produktion darauf an, ein einzelnes Diagramm bereitzustellen.
Wenn jedes Team, Projekt oder jede Gruppe, die durch einen gemeinsamen Kontext verbunden sind, über ein eigenes Diagramm verfügt, werden mehrere Umgebungen angezeigt, in denen Sie alle Services in einer einzigen Transaktion gruppieren und aktualisieren können.
Betrachten Sie die Produktion nicht als eine riesige, umfassende Umgebung, sondern als eine Menge kleiner Produktion.
Große Veränderungen sind in ihrem Ausmaß erschreckend. Wenn Sie über mehrere kleine Entwicklungsumgebungen verfügen, können Sie die Änderungen isolieren und das System flexibler gestalten.
Wenn alles in Form von Diagrammen angeordnet ist, werden die Variablen festgelegt und können auf die gleiche Weise von außen geändert werden. Um beispielsweise einen weniger leistungsfähigen Kafka-Cluster mit der Vorproduktion zu verbinden, wo dies nicht erforderlich ist, müssen Sie nur die Konfiguration ändern.
Lektion 4. Übertragen Sie alles in den Cluster und sichern Sie das Ganze
Also haben wir die Produktion aussortiert. Was tun mit Datenbanken? Mit Kafka? Mit Sicherheitsproblemen?
Wenn Sie sorgfältig lesen, denken Sie daran: Ich habe geschrieben, dass Datenbanken in das Diagrammpaket aufgenommen werden können.
Kubernetes verfügt über eine separate API zum Ausführen von Datenbanken und anderen statusbehafteten Anwendungen in einer praktischen Form -
StatefulSets.Das Wesentliche von Kubernetes ist die Verbesserung der Zuverlässigkeit beim Start von Containern. Mit ihm und dem Velero-Tool (installiert über Helm Chart) können Sie eine Sicherungskopie des gesamten Kubernetes-Clusters zusammen mit den daran angeschlossenen Festplatten erstellen, z. B. die von StatefulSet erstellten, und alles mit einem Befehl wiederherstellen. Darüber hinaus ist es einfach, die automatische Sicherung nach einem Zeitplan zu konfigurieren.
Backups, Wiederherstellung in einem Team und Kubernetes Manager helfen dabei, einen völlig neuen Cluster bereitzustellen und seine Sicherung mit nur zwei Teams wiederherzustellen. Maximal drei, wenn Sie zuerst ein neues Backup erstellen möchten.
Anstatt in Servern zu denken, können Sie ganze Cluster bearbeiten.
Ist die Vorproduktion ärgerlich? Nehmen Sie es außer Sicht - auf die Entfernung von Backup, Wiederherstellung und Änderung von DNS.
Lektion 5. VPN ist zu kompliziert, es gibt einfachere Lösungen
Haben Sie schon einmal gerne ein VPN verwendet?Nein, wirklich.
Ist es überhaupt möglich?Google hatte einen solchen Versuch. Vor einigen Jahren gab das Unternehmen jedoch bekannt, dass es kein VPN verwenden werde. Ich denke, sie haben es auch nicht genossen.
Google wechselte zu vertrauenswürdigen Netzwerken. Sie haben keinen Hauptschlüssel, der für ein Netzwerk geeignet ist, aber am Eingang zu jedem Dienst befindet sich ein Schlüssel in Form eines SSO-Anmeldebildschirms. Möchten Sie sich beim Überwachungsdienst anmelden? Melden Sie sich mit Ihrem Firmenbenutzernamen und Passwort an.
Es ist nur eine kleine Schicht erforderlich: Verwenden Sie anstelle eines VPN zur Autorisierung einen Proxy.
Das VPN hostet auch die Kubernetes-Verwaltungsverbindung im privaten Netzwerk, SSO nicht. Sie haben jedoch einen eigenen Autorisierungsmechanismus. Bei Google Cloud und AWS ist dies Identity and Access Management (IAM) und die Möglichkeit, IP-Adressen auf die Whitelist zu setzen.
Wenn es möglich ist, mit weniger sperriger Architektur ohne großen Verlust zu arbeiten, warum nicht? Seien Sie wie Google: Wechseln Sie von VPN zu Systemen ohne Vertrauen.
Lektion 6. Organisieren, automatisieren und erobern
Ah, es scheint Ihnen, dass die Systematisierung eine lange Zeit ist? Unsinn! In Zukunft sparen Sie dadurch Stunden, Tage und sogar Wochen. Zu arbeiten!
Die Systematisierung ist die einzig realistische Möglichkeit, die Infrastruktur mehrmals wiederherzustellen.
Wenn jedes Einstellungselement verbessert werden kann, indem etwas in git geändert und festgeschrieben wird, ist im Wesentlichen Ihre gesamte technologische Organisation deklarativ. Jeder Entwickler mit Zugriff auf Git kann problemlos jedes System in einwandfreiem Zustand halten.
Verwenden Sie dazu mehrere kleine Repositorys. Monorepos bringen Menschen dazu, Abstriche zu machen und von Strukturen mit künstlicher Bedeutung abhängig zu sein. Verwenden Sie stattdessen besser viele kleine Repositorys, die Sie später verknüpfen können.
Mein Freund Matt und ich erstellen ein Tool namens
Meta , um dies in der Entwicklungsphase zu tun. Helm macht das in der Produktionsphase: Für ihn ist alles eine Abhängigkeitstabelle!
Fazit
Nehmen Sie die Schale nicht Stück für Stück aus dem Ei. Schlagen und rollen.