Ich schlage vor, mich mit der Entschlüsselung des Berichts von Denis Yakovlev "Automatisierung der Infrastruktur. Warum machen wir das?"
Der Bericht 2016 selbst. Der Bericht wurde speziell für diejenigen entschlüsselt, die virtuelle Maschinen mit ihren Händen erstellen.
Bericht darüber, wie wir bei 2GIS automatisiert mit der Infrastruktur arbeiten.
„Man muss genauso schnell laufen, um an Ort und Stelle zu bleiben, aber um irgendwohin zu gelangen, muss man mindestens doppelt so schnell laufen“ (Alice im Wunderland).
Was bedeutet dieser Satz für uns? In einem hart umkämpften Umfeld sollten sich Unternehmen bemühen, ihre Produkte so schnell wie möglich an die Benutzer zu liefern. Die Verkürzung der Time-to-Market-Parameter ist eine mehrstufige Aufgabe. Um dies zu lösen, müssen Sie sowohl Entwicklungsprozesse als auch Tools ändern. Eine wichtige Grundlage für den gesamten Entwicklungsprozess ist die Infrastruktur. Je größer die Infrastruktur, desto mehr Probleme, Anwendungsfälle usw. Wenn nicht alle damit verbundenen Vorgänge automatisiert sind, steigt die Anzahl der Probleme. Eine davon ist die Zeit, die ein Entwickler mit Infrastrukturproblemen verbringt, anstatt Geschäftslogik zu schreiben.
Reden wir über:
- Welche Infrastrukturprobleme hatten die Teams?
- Wie die Entwicklungs- und Testprozesse darunter litten;
- Wie wir OpenStack implementiert haben;
- Was sind unsere Szenarien für die Verwendung von OpenStack?
- Wie die Automatisierung zusätzliche Impulse in der Entwicklung erhielt und neue interne Produkte auftauchten;
- Welche Aspekte wir noch haben, ist nicht automatisiert.
Über mich. Firma 2GIS. Ich arbeite seit zwei Jahren in der Firma.

Infrastruktur- und Betriebsteam. Wir unterstützen hauptsächlich die interne Infrastruktur der Webabteilung. Kürzlich haben sich andere interne Produktteams uns angeschlossen. Wir sind auch für den Betrieb der Webprodukte des Unternehmens in der Produktion verantwortlich. Außerdem erforschen und entwickeln wir neue Tools, um unser Leben zu erleichtern und das Leben unserer geliebten Entwickler zu verbessern. Wir sind nur 9.

Zuerst verstehen wir die Infrastruktur. Warum reden wir über sie? Was ist das? Wann fangen wir an über sie zu reden?

Von den ersten Momenten der Arbeit an dem Produkt und einigen Projekten an haben wir eine Frage: Wo werden wir sie einsetzen? Wo kann man die Ergebnisse überprüfen? wo zu testen und so weiter.

Sofort ist die erste Antwort lokal. Vor Ort, weil es sehr einfach ist. Entwickelt auf seinem Laptop, gestartet, überprüft - alles ist in Ordnung. Sie sitzen und denken - warum neben Ihrem Laptop überprüfen? Alles funktioniert bei mir.

Und wenn wir ein Betriebssystem auf dem Laptop haben und ein anderes in der Produktion läuft? Oder sollte unser Produkt mehrere Betriebssysteme unterstützen?

Der Fall ist nicht abgedeckt. Das heißt, verschiedene Betriebssysteme.

Wenn wir die Gelegenheit haben und eine willensstarke Entscheidung treffen, haben wir überall Linux. Zum Beispiel einige Ubuntu. Der Rest ist alles vom Bösen. Es scheint uns, dass wir alle unsere Probleme gelöst haben.

Es reicht jedoch nicht aus, nur das Betriebssystem anzupassen. Wir brauchen Pakete einer bestimmten Version.

Wir überlegen, wie wir dieses Problem lösen können. Und denken Sie daran - wir haben Isolation. Sehr hohes Zeug. Gott sei Dank gibt es so viele Produkte auf dem Markt. Wir nehmen Virtualbox. Erstellen Sie eine virtuelle Maschine. Wir rollen unser Produkt. Wir machen Schnappschüsse. Wir haben die Umwelt.

Wir entwickeln uns. Unser Produkt wird immer schwieriger. Dies ist nicht mehr nur eine PHP-Datenbankanwendung. Die Anwendung hat sich zu einem verteilten System entwickelt. Wir haben andere Produkte auf dem Markt.

Das Unternehmen entwickelt sich. Und wir haben neue Anwendungsfälle. Alle diese Produkte wollen sich integrieren, um zusammenarbeiten zu können. Wir haben Funktionen, die mehrere Produkte durchlaufen. Wir werden ständig gebeten zu zeigen, was Sie entwickelt haben. Lass es uns irgendwo sehen. Wir haben keine Ressourcen mehr für manuelle Tests. Wir erinnern uns, dass es eine kontinuierliche Integration gibt, Autotests. Dazu benötigen Sie zusätzliche Software. Die lokale Umgebung von uns reicht trotz aller Isolation nicht mehr aus. Hier kommt die Infrastruktur ins Spiel. Wir brauchen einen Ort, an dem wir unsere Produkte einsetzen und jemandem die Ergebnisse zeigen können. Wir müssen das alles irgendwie schaffen und es sollte bequem sein.

Schauen wir uns unsere Firma 2GIS an.

Dies ist eine Anleitung und Karten. Sie können auf den Stadtplan schauen, nach Organisationen suchen.

Wir haben: Webprodukte, mobile, Desktop-Anwendungen. Es gibt ungefähr fünfunddreißig verschiedene Teams unterschiedlicher Größe.

Welche Probleme hatten wir mit der Infrastruktur? Ende 2013 haben wir proxmox verwendet. Dies ist ein Virtualisierungsverwaltungssystem. Mit ihm können Sie entweder virtuelle KVM-Maschinen oder OpenVZ-Container erstellen. All dies erfolgt jedoch von Hand über Schnittstellen. Um voll funktionsfähig zu sein, müssen Sie noch in die virtuelle Maschine gehen und das Netzwerk DNS konfigurieren.

Daher sah der Ablauf unserer Entwicklung für einige Zeit wie folgt aus. Als Entwickler suche ich nach Ticketadministratoren. Administratoren erstellen, wenn sie Zeit haben, eine virtuelle Maschine. Sie geben eine IP-Adresse, ein Login und ein Passwort heraus. Wenn ich diese virtuelle Maschine jedoch erneut bereitstellen muss, gehe ich erneut zu Administratoren, die mich bereits misstrauisch ansehen. Sie sagen - ein Typ so viel wie möglich?

Es gab keine Trennung der Projekte. Es gab eine Reihe von virtuellen Maschinen auf mehreren Servern, auf denen Administratoren alles mit ihren Händen erstellten. Es bestand eine hohe Wahrscheinlichkeit menschlicher Fehler. Sie könnten die IP-Adresse verwechseln oder die falsche virtuelle Maschine löschen. Sehr, sehr viele solcher Fälle. Und die Verantwortung für die virtuelle Maschine ist unverständlich. Entwickler tragen keine Verantwortung, Administratoren nehmen auch kein Dampfbad. Es ist nicht klar, dass jemand anderes eine virtuelle Maschine benötigt oder jeder sie lange vergessen hat und nichts davon weiß.

Außerdem gibt es eine schwache API. Plugins sind entweder kostenpflichtig oder perl.

Aber neben den Problemen hatten wir noch etwas Nützliches. Wir hatten unser eigenes Eisen, auf dem sich das alles drehte. Unsere Systemadministratoren sind großartige Leute, sie wissen, wie man dieses Bügeleisen kocht, sich darum kümmert und es richtig kauft. Und sie hatten einige Erfahrungen mit Virtualisierung.

Wir begannen zu überlegen: Welche Lösung würde zu uns passen? Wie sollte unsere Infrastruktur aussehen, um den Entwicklungsprozess nicht zu stören, sondern zu helfen?
Als Ergebnis der Studie haben wir die folgende Liste von Anforderungen erhalten:
Effektive Nutzung von Eisen. Wir möchten keine verwaisten virtuellen Maschinen haben. Wir wollen nicht nur die Luft im Rechenzentrum erwärmen.
Wir möchten Teamressourcen haben, damit das Team die Verantwortung für die verwendeten Ressourcen übernimmt. Und sie war aufmerksam auf sie.
Wir möchten, dass die Lösung modular aufgebaut ist und nur die Dienste auswählt, die wir benötigen. Und im Bedarfsfall mit Weiterentwicklung expandieren können.
Die Lösung sollte leicht zu finalisieren sein. Wenn neue Anforderungen auftreten, können wir die Lösung an unsere spezifischen Anforderungen anpassen.
Wir brauchen nicht nur eine Benutzeroberfläche, sondern auch eine API, um unsere Bindungen zu schreiben und die Infrastruktur zu verwalten.
Wir wollen die Teams und insbesondere das Lasttest-Team isolieren. Ich wollte, dass sie den Rest überhaupt nicht störte.

Was waren unsere Optionen?
Wir haben uns die öffentliche Cloud angesehen: AWS und mehr. Die Option ist insofern attraktiv, als sie fast alle Fragen im Zusammenhang mit der Infrastruktur übernehmen. Es war möglich, diesen berühmten Unternehmen viel Geld abzunehmen und zu zahlen, aber wir waren durch die widerliche Situation mit dem Dollar (oder den Sanktionen) eingeschränkt. Ich wollte eigentlich keine Anbietersperre bekommen. Die dritte Option, bei der wir uns angesehen haben, was wir auf dem Open Source-Markt haben? Welche Lösungen werden angeboten? Wir haben unsere eigene Hardware, es bleibt noch etwas aus diesen vielen Open-Source-Anwendungen auszuwählen.

Am Ende führten uns unsere Forschungen und Experimente zu einer Software namens OpenStack. Softinke klingt natürlich zu unhöflich.

OpenStack ist eine vollwertige Software. Tatsächlich handelt es sich um eine Reihe von Diensten zum Aufbau einer öffentlichen oder privaten Cloud. OpenStack ist eine Open Source-Lösung. Alle Dienste sind in Python geschrieben. Jeder Dienst ist für seine Aufgabe verantwortlich und verfügt über eine eigene API.

Und so sieht es aus. Erinnere dich an dieses Bild. Dann werden wir zu ihr zurückkehren. Es gibt gemeinsame (allgemeine) Dienste. Es gibt Dienste für diesen Zweck: Compute, Networking, Storage. Und unsere Anwendung oder unser Benutzer arbeitet mit diesen Diensten.

Open Source Lösung. Die Veröffentlichung erfolgt ein halbes Jahr. Die Version enthält grundlegende Komponenten. Jede Version enthält neue Komponenten, die anfänglich in diesem Inkubator erscheinen. Sie verbringen einige Zeit dort, beheben dort Fehler, stabilisieren sich und so weiter. Und irgendwann entscheidet die Community, dass diese Komponente ab der nächsten Version in den Basiskomponenten enthalten sein soll. Es gibt auch viele verschiedene Mailings, Meetings, Konferenzen. Die größte Konferenz ist der OpenStack Summit. Findet jedes Jahr statt. Und beim letzten OpenStack-Gipfel waren ungefähr viertausend oder fünftausend Teilnehmer anwesend. So ein großes Ereignis. Viele Berichte.

Viele Menschen tragen zu dieser Entscheidung bei. Hier habe ich nur eine Liste solcher Tops gegeben. Diese Liste reicht aus, um zu verstehen, wie ernst das Projekt ist und welche Unternehmen und wie viel Ressourcen sie in es investieren.

Wie wir unsere Infrastrukturprobleme gelöst haben.
- Eine der Komponenten von OpenStack ist der Scheduler, der den Host auswählt, auf dem die virtuelle Maschine erstellt wird.
- Das Team verfügt nun über eigene Ressourcen. Dies ist die Menge an CPU, Speicher und mehr. Wir haben dieses Szenario für die Erstellung eines virtuellen On-Tiket (Anwendung) beseitigt.
- OpenStack ist eine Reihe von Diensten. Wir haben nur das Basis-Kit genommen, das unsere Bedürfnisse erfüllt.
- Da OpenStack Open Source ist, kann es geändert werden.
- Jeder Dienst verfügt über eine API. Es gibt Python-Builds. Das heißt, es ist ganz einfach, mit jedem Dienst zu interagieren und eigene Bindungen zu schreiben.
- Isolierung. Wir können Teams für uns in Projekten, in Aggregationszonen, in Netzwerken usw. isolieren.

Teamentwickler erhielten Infrastruktur als Service. Wie sieht es aus?

Es gibt zwei Konzepte für Stapel und Vorlage. Stack besteht aus einer Reihe von Cloud-Ressourcen: virtuelle Maschinen, Netzwerk, DNS-Datensätze und mehr. Eine Vorlage ist eine Beschreibung dieses Stapels. Bei OpenStack handelt es sich um eine reguläre YAML-Datei. Hier ist ein Teil der Datei. Es heißt, dass es eine Entität wie einen Server mit einem internen OS Nova-Server gibt. Für den normalen Betrieb benötigen Sie eine IP-Adresse und einen DNS-Eintrag. Hier werden die Namensparameter als Eingabe akzeptiert. Flavour ist eine Beschreibung der Ressourcen, die dieser Server benötigt. Image-Betriebssystem. Schlüsselname - welcher öffentliche Schlüssel beim Bereitstellen des Servers verwendet werden soll. Wir haben alle diese Vorlagen im Repository von jedem haben in Git. Jeder hat Zugang. Jeder kann eine Pull-Anfrage senden.

Und die Erstellung von Stack ist wie folgt. Heat ist die OpenStack-Komponente, die für die Orchestrierung verantwortlich ist. Wir sagen dies in diesem Zusammenhang. Dies ist ein großartiges Dienstprogramm, das wir für uns selbst installiert haben. Wir sagen, liebe Hitze, erstellen Sie uns einen Stapel mit diesem Namen. Hier finden Sie eine Beschreibung der Ressourcen, die wir zum Erstellen dieses Stapels benötigen. Und hier ist die Eingabe, die unsere Vorlage benötigt, die unseren Stapel beschreibt. Wir laden es in Hitze. Er raschelt dort eine Weile, schafft alle notwendigen Ressourcen für uns in sich. Und auch wir können in dieser Vorlage hier die Ausgabe angeben. Wenn durch Hitze ein Stapel erzeugt wird, kann er Informationen ausgeben: IP-Adresse, Zugriff und den Rest, den wir fragen. Weiterhin können wir diese Informationen bereits zur weiteren Automatisierung anwenden.

Damit Sie nicht glauben, dass OpenStack einfach und billig ist, sage ich Ihnen, für welche Hardware OpenStack funktioniert. Das Bedienfeld dreht sich auf 3 Infra-Knoten. Dies sind Eisenserver mit solchen Ressourcen. Dies ist die empfohlene Konfiguration für das Failover.

Wir haben auch zwei KVM-Netzwerkknoten, die unser Netzwerk bedienen.

Teamressourcen drehen wir auf 8 Rechenknoten. Sie sind in 3 Aggregationszonen unterteilt. Pro Zone wird ein Rechenknoten für Lasttests zugewiesen. Dort werden Server nur vom Lasttest-Team erstellt. Um den Rest nicht zu stören. Wir haben eine Aggregationszone für unser internes GUI-Testautomatisierungsprojekt. Er hat bestimmte Anforderungen. Es befindet sich in einer separaten Aggregationszone. Alle anderen Entwicklungsumgebungen, Server und Testumgebungen drehen sich in der dritten großen Aggregationszone. Wir brauchen 6 Rechenknoten.

Wir drehen ungefähr 350 virtuelle Maschinen für alle Teams.

Was haben wir verstanden, als wir schon einen Weg gegangen waren? Für die Bereitstellung und Unterstützung dieser Software benötigen Sie ein Team. Team abhängig von Ihren Ressourcen.

Teams müssen bestimmte Kompetenzen haben.
Zuallererst ist es natürlich Ansible. OpenStack-Bereitstellung ist in Ansible geschrieben. Es gibt ein OpenStack-Ansible- Projekt. Wenn Sie OpenStack-Ansible zu Ihren Anforderungen hinzufügen möchten, müssen die Personen, die dies tun, Ansible besitzen.
Virtualisierungserfahrung. Sie müssen in der Lage sein, Virtualisierung zu kochen, Sie müssen optimieren. Verstehe, wie es funktioniert.
Das gleiche Netzwerk.
Gleiches gilt für Backend-Services, die OpenStack für seine Arbeit verwendet. Diese Datenbank ist MySQL Galera und RabbitMQ als Warteschlange.
Verstehen, wie DNS funktioniert. So konfigurieren Sie es.
OpenStack ist in Python geschrieben. Sie müssen den Code lesen können. Idealerweise müssen Sie in der Lage sein, zu patchen. Community-Fixes suchen. In der Lage sein, den Code zu debütieren. Das ist alles sehr hilfreich. Wenn ein Team einen solchen Ansatz hat und weiß, wie ein Ansatz wie Infrastruktur als Code verwendet wird, wie z. B. ansible, werden alle Änderungen im Code gespeichert, und es treten keine Probleme auf, die beim Konfigurieren von Händen auftreten.
Kontinuierliche Integration. Die OpenStack-Servicesuite enthält einen Service wie Tempest . Darin sind alle Tests auf alle Komponenten geschrieben. Wenn wir die Konfiguration ändern, ein separates Diplom in der All-In-One-Installation ausführen und Sturm ausführen, prüfen wir, ob bei uns etwas abgefallen ist. CI ist konfiguriert und das Team muss dies verstehen und in der Lage sein, all dies zu konfigurieren.

Weil alles einfach und attraktiv aussieht.

Aber wenn Sie anfangen, sich mehr damit zu beschäftigen, verstehen Sie, dass tatsächlich alles so aussieht. Dies kann für jemanden eine Überraschung sein.

Die Einführung von OpenStack ist nicht nur eine technische Lösung. Darüber hinaus müssen Sie in der Lage sein, zu verkaufen und den Teams das neue Paradigma zu erklären, wie sie jetzt funktionieren und welche Vorteile es bringt. Wie man damit arbeitet, um einen Gewinn zu erzielen. Wir haben viel Dokumentation geschrieben. Die Dokumentation besteht aus dem Formular Schnellstart (Schnellstart), erste Schritte (erste Schritte). Das heißt, was getan werden muss, um Ihr Leben schnell zu erleichtern und nicht viel Zeit damit zu verbringen.
Wir haben TechTalk durchgeführt, wir haben gesprochen, Themen erstellt, gezeigt, gesprochen, jetzt können Sie Ihr Produkt wie folgt erhalten. Hier schreiben wir buchstäblich eine Vorlage, wir starten sie. Alles ist ganz einfach. Jetzt müssen Sie nicht mehr zu den Admins gehen und sie dort um etwas bitten.
In besonders schwierigen Fällen, in denen das Projekt komplex ist, hat es viele Fälle, wir kamen zu Teams, arbeiteten direkt mit Teams. Das heißt, sie haben irgendwie versucht, ihnen bei der Automatisierung von Prozessen zu helfen. Richten Sie alle Teams ein. Einige Fehler aufgewickelt. Sie haben verstanden, dass wir dort nichts falsch konfiguriert haben. Im Allgemeinen enge Arbeit mit Teams.

Wir haben eine schnelle Bereitstellung von Produkten erhalten. Früher war es zum Erhalt von Produkten erforderlich, viele manuelle Aktionen auszuführen und mit vielen Menschen zu interagieren. Jetzt erhalten wir die Erstellung von Envinronment (Umgebung, Server) per Button. Wenn die Bereitstellung geschrieben ist und für das Projekt funktioniert, erfolgt die Bereitstellung über die Schaltfläche oder eine neue Umgebung (Umgebung, Server) mit dem installierten Produkt.
Das Fehlen einer normalen Infrastruktur war für einige Teams ein Blocker bei der Implementierung des CI-Prozesses innerhalb des Teams. Wir haben die Infrastrukturprobleme gelöst, die Teams auf dem CI-Server zusammengestellt, die Pipeline konfiguriert und virtuelle Maschinen in der Pipeline erstellt. Im Allgemeinen gaben sie der Entwicklung dieser Prozesse Impulse.
Sie halfen auch einigen internen Produkten, die die Infrastruktur zur Automatisierung von Tests nutzen. VM Master ist ein Produkt, das unser Online testet. Er muss viele virtuelle Maschinen erstellen, um von verschiedenen Browsern aus auf die Site zugreifen zu können. Führen Sie einige Schritte aus, um zu verstehen, dass unser Online-Browser in allen bekannten Browsern funktioniert. Das heißt, sie haben ihm sehr geholfen.
Ein schöner Bonus ist, dass sie die Admins (selbst) entladen haben. Denn irgendwann nahm die Aktivität zum Erstellen einer virtuellen Maschine Platz in Anspruch. Und alle wurden nervös. Jetzt machen wir interessante Dinge, komplexe Produkte. Wir haben die Routineaufgabe losgeworden.

Fragen?
Frage: Wie lange hat die Bereitstellung von OpenStack gedauert?
Antwort: Die Frage ist kompliziert, weil wir einen Prozess hatten, der eine Comedy-Serie aufnehmen kann. Er hat eine hohe Eintrittsschwelle. Wir haben unsere gesamte Infrastruktur verstanden und nach einer Lösung gesucht - es hat drei Monate gedauert. Dann haben wir in einem Monat irgendwo die erste Installation eingeführt. Wir haben dort einige Projekte hinzugefügt. Sie lebten dort. Dann passierte der menschliche Faktor - sie schossen den Kopf dieser Installation. Wir haben festgestellt, dass die fehlende Fehlertoleranz schlecht ist. Dann warteten wir auf das Eisen.
Frage: Verwenden Sie kostenpflichtigen Support?
Antwort: Nein, wir verwenden es nicht.
Frage: Welche Version von OpenStack verwenden Sie?
Antwort: OpenStack-Versionen werden als Wörter bezeichnet. Zuerst war Juno, dann haben wir ein Upgrade auf Liberty durchgeführt.
Frage: Werden virtuelle Maschinen in der Pipeline erstellt? Kontinuierliche Integration?
Antwort: Das Bauen in Jenkins kann Hitze verursachen und eine virtuelle Maschine erstellen.
Frage: Haben Sie Probleme mit der gemeinsamen Nutzung von Ressourcen festgestellt? Grob gesagt befinden sich zwei virtuelle Maschinen auf demselben physischen Server. Einer von ihnen beginnt mit dem Laden einer Festplatte, beispielsweise einer Datenbank. Wie haben Sie sich entschieden?
Antwort: Bei der gemeinsamen Nutzung von Ressourcen sind keine Probleme aufgetreten. Die Produkte des anderen stören nicht viel. Wir haben die Skripte angelegt. Wenn Sie ein schweres Szenario ausführen müssen, führen Sie Lasttests aus, und wenden Sie sich an das Lasttestteam, das Lasttests durchführt.
: - ?
: OpenStack . . . .
: . . OpenStack ?
: . OpenStack . .
: OpenStack?
: . proxmox. OpenStack.
: DevOps?
: DevOps , . , , .
PS 2019 OpenStack heat Terraform .