Letzte Woche
wurde bekannt gegeben, dass ab sofort alle neuen Reddit-Dienste auf einer auf Kubernetes-Clustern basierenden Infrastruktur in Produktion gehen. Dies ist ein wichtiger Meilenstein auf dem Migrationspfad zu K8s einer der beliebtesten Online-Ressourcen.
Likbez : Bis heute gehört Reddit laut Alexa zu den Top 20 der weltweiten Standorte (und Nr. 6 in den USA). Diese Online-Community amerikanischer Herkunft umfasst über 400 Millionen aktive Benutzer (innerhalb eines Monats), 12 Millionen Veröffentlichungen und 2 Milliarden Stimmen pro Tag.Warum und wie Reddit-Ingenieure letzten Dezember auf der KubeCon 2018 zu Kubernetes kamen
( Präsentation + Video ) Greg Taylor, Leiter der Release Engineering Group des Project Engineering, Department of Infrastructure.

Warum bist du nach Kubernetes gekommen?
Zu Beginn des Jahres 2016 hatte der als
monolithische Anwendung implementierte Dienst nur etwa 20 Ingenieure, die drei Teams bildeten, von denen eines eine Art Held der Geschichte ist - das Infrastruktur-Team. Dieses Jahr brachte jedoch große Veränderungen mit sich: Bis Ende des Jahres arbeiteten mehr als 60 Ingenieure im Unternehmen (und bis Ende 2018 war ihre Zahl auf 200 gestiegen, d. H. In nur
drei Jahren gab es eine Verzehnfachung des Personals ).
Solche schnellen Wachstumsraten setzen die Irrelevanz (Ineffizienz) der monolithischen Anwendungsarchitektur auf die Tagesordnung, da die Einführung zahlreicher Änderungen an ihren verschiedenen Komponenten (durch verschiedene Teams) sehr schwierig geworden ist. Nachdem sich die Ingenieure versammelt hatten, um das Problem zu lösen, und zahlreiche Optionen in Betracht gezogen hatten, entschieden sie sich für den
Weg der serviceorientierten Architektur (SOA) .
Bei der Umstellung auf eine Servicearchitektur anstelle eines großen Monolithen stieß Reddit auf ein neues Problem.
Das Infrastruktur-Team ist zu einem Engpass bei den Aktivitäten von Entwicklern geworden, die sich in verschiedenen Phasen als sehr abhängig erwiesen haben: bei der Initialisierung von Diensten, während ihres fortgesetzten Betriebs, beim Debuggen und Lösen von Leistungsproblemen. Als schnelle Lösung für das Problem bildete das Unternehmen autarkere Teams, die als „infrastrukturorientiert“ bezeichnet wurden: Die Teilnehmer dieser Teams verfügten über die erforderlichen Fähigkeiten im Bereich des Betriebs der Infrastruktur, sodass sie viele Schwierigkeiten überwinden konnten, ohne auf die Maßnahmen des Infrastrukturteams zu warten, das mit einem endlosen Rückstand zahlreicher Entwickler überlastet war.
Es war jedoch immer noch eine vorübergehende Lösung, und die Praxis zeigte, dass nicht jeder den gesamten Stack für seinen Dienst betreiben wollte:

Wie wurde diese Situation gelöst? Die Organisation führte das Konzept der
Service-Eigentümer (Service-Eigentümer) ein , die ihren Service von Anfang bis Ende entwickeln,
den Service frühzeitig und häufig
bereitstellen und den Service
betreiben konnten (einschließlich Fragen zu Verfügbarkeit und Leistung). Aber wie erreicht man das?
Anstatt von Ingenieurteams mit tadellosen Fähigkeiten zu erwarten, dass sie Services aus Dutzenden von Bausteinen kombinieren, für die viele von ihnen möglicherweise kein Wissen haben, müssen Sie ihnen einen gut durchdachten, vordefinierten Weg bieten, um Services in die Produktion zu bringen, was sich auf ein Minimum an Technologie auswirkt. Dies erspart Ingenieuren das Erlernen zahlreicher neuer Technologien und Werkzeuge, die wirklich viele sein können:

"Um diese Idee in die Praxis umzusetzen, mussten wir unser Wissen, unsere Prozesse, Best Practices und vieles mehr in eine zugänglichere Form bringen."
InfreRedd - Kubernetes in Reddit
So entstand InfreRedd, das interne Infrastrukturprodukt von Reddit, das auf Kubernetes basiert.
Wie wurden die drei in ihrer Definition angegebenen Bedürfnisse von Service-Eigentümern erfüllt?
1. Entwicklung
Der Entwicklungsstandard in der Organisation gibt nicht die Wahl einer bestimmten Sprache oder eines bestimmten Frameworks an, sondern legt die allgemeine „Form“ des Dienstes fest, der er entsprechen soll. Der Standard -
eine von der Programmiersprache unabhängige
Dienstspezifikation - umfasst die Definition eines RPC-Protokolls, die Arbeit mit Geheimnissen, die Rückgabe von Metriken, die Rückverfolgbarkeit und das Format für die Ausgabe von Protokollen. Ein Beispiel für die Implementierung einer solchen Spezifikation in Python findet sich im
Basisplattenprojekt , das jedoch für jemanden für den tatsächlichen Gebrauch wahrscheinlich nicht nützlich ist, aber eine Inspiration sein kann.
Darüber hinaus wurden Materialien für einen schnellen Einstieg beim Schreiben neuer Dienste erstellt: Code-Stubs für verschiedene Sprachen (Python, Go, Node) sowie Dockerfile, Konfigurationen für CI- und sogar Helm-Diagramme.
Um die lokale Entwicklung zu unterstützen, fiel die Auswahl der Reddit-Ingenieure auf das Google-Produkt
Skaffold , das Entwicklern eine Durchleseschleife zum Bearbeiten → Wiederherstellen → Aktualisieren bietet
- erfordert keine gründlichen Kenntnisse von Kubernetes;
- so nah wie möglich an der Produktion;
- ermöglicht die Verwendung von Standarddiagrammen / -bildern;
- und - im Gegensatz zu dem zuvor verwendeten Minikube - erfordert die Arbeit mit Skaffold keine großen Ressourcen von funktionierenden Laptops (da die Einführung in Remote-Cluster erfolgt).
2. Bereitstellen
Reddit verwendet die Continuous Delivery-Plattform
Drone , um Tests durchzuführen und Artefakte (normalerweise Docker-Images) zu erstellen.
Kubernetes verwendete ursprünglich das Helm-Plugin für Drone für die Bereitstellung, aber die Ingenieure kamen ziemlich schnell zu dem Schluss, dass Helm damit nicht zufrieden war, weil sie ein System wollten, das „den Status erstellter oder aktualisierter Objekte besser versteht“ und zu einer weiteren Automatisierung der Bereitstellungsprozesse führte die Notwendigkeit einer Lösung, die die verwendeten Tools anspricht und das Rollback pausiert, wenn Fehler oder Leistungsprobleme auftreten.
Infolgedessen wurde
Spinnaker ausgewählt, um die Bereitstellung in Kubernetes zu koordinieren. Für ihn wurden Vorlagen für typische Pipelines (auf Jsonnet) erstellt. Als nächstes werden Helm-Charts generiert, die bereits
von Spinnaker in Kubernetes eingeführt
wurden . Benutzer erhalten Informationen zum Fortschritt der Bereitstellung und Hilfe bei der Diagnose bei Problemen. So sieht ein typischer Bereitstellungsprozess in Staging / Produktion auf sehr allgemeine Weise aus:

3. Betrieb
Erstens, wie werden die Verpflichtungen von Service-Eigentümern und Infrastruktur-Team geteilt?
- Servicebesitzer : die Grundlagen von Kubernetes verstehen, ihre Services bereitstellen und betreiben;
- Infrastruktur-Team : Unterstützung der Funktionsfähigkeit (Einführung, Unterstützung, Skalierung) von Kubernetes-Clustern, Bereitstellung aller erforderlichen Ressourcen sowie Beratung der Ingenieure des Unternehmens beim Entwurf zuverlässiger, produktiver und fehlertoleranter Dienste (insbesondere werden regelmäßig Schulungen abgehalten, deren Aufzeichnungen dann verteilt werden) im gesamten Unternehmen).
Service-Eigentümer sind in ihren Rechten eingeschränkt. Um jedoch Zugriff auf die Produktion zu erhalten (um ein Problem zu diagnostizieren), können Sie (über ein spezielles Konsolendienstprogramm) ein temporäres Token anfordern, das ihnen die vollen Rechte für ihre Namespaces gewährt.
Ein weiterer wichtiger Betriebspunkt ist die Minimierung potenzieller Schäden, die aus verschiedenen Quellen stammen können. Hier ist, was Reddit dafür tut:

Um den an der Operation beteiligten Ingenieuren das Leben zu erleichtern, sind auch folgende Faktoren beteiligt:
Kubernetes Status in Reddit
Die allgemeinen Statistiken zur Infrastruktur von Kubernetes zum Dezember letzten Jahres lauteten wie folgt:
- 7 Cluster (3 bis 6 neue sollten in den nächsten Monaten hinzugefügt werden);
- Ein Drittel bis die Hälfte aller Ingenieurteams interagieren mit Kubernetes.
- Mit K8 werden etwa 20 Reddit-Dienste produziert.
- An einem Arbeitstag finden 10 bis 20 Bereitstellungen dieser Dienste für K8 statt.
Die Verfügbarkeit von InfreRedd mit Kubernetes für die gesamte Organisation war für das erste Quartal 2019 geplant, was die Bereitstellung eines neuen Dienstes in der von Kubernetes betreuten Produktion implizierte.
(Zu dieser Zeit geschah dies für ungefähr 3 von 4 neuen Diensten.)Wie am Anfang des Artikels erwähnt, wurde dieser Meilenstein erst letzte Woche erfolgreich erreicht:

Andere Artikel aus dem Zyklus