{"id":81173,"date":"2020-05-11T13:42:51","date_gmt":"2020-05-11T11:42:51","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/production-ready-images-for-k8s"},"modified":"2020-05-11T13:42:51","modified_gmt":"2020-05-11T11:42:51","slug":"production-ready-images-for-k8s","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/production-ready-images-for-k8s","title":{"rendered":"Produktionsbereite Images f\u00fcr k8s","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Diese Geschichte handelt davon, wie wir Container in unserer Produktumgebung nutzen, insbesondere unter Kubernetes. Der Artikel befasst sich mit dem Sammeln von Metriken und Logs von Containern sowie dem Erstellen von Images.<\/p>\n<p><img decoding=\"async\" alt=\"Produktionsbereite Images f\u00fcr k8s\" src=\"\/wp-content\/uploads\/2020\/05\/c7e8df02d845138e489c09c55cd616e6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nWir sind ein Fintech-Unternehmen namens Exness, das Dienstleistungen f\u00fcr den Online-Handel und Fintech-Produkte f\u00fcr B2B und B2C entwickelt. In unserer Forschungs- und Entwicklungsabteilung gibt es viele verschiedene Teams, und der Entwicklungsbereich umfasst \u00fcber 100 Mitarbeiter.<\/p>\n<p>Wir sind das Team, das f\u00fcr die Plattform verantwortlich ist, die unseren Entwicklern das Sammeln und Ausf\u00fchren von Code erm\u00f6glicht. Insbesondere sind wir f\u00fcr das Sammeln, Speichern und Bereitstellen von Metriken, Logs und Ereignissen aus Anwendungen verantwortlich. Derzeit verwalten wir etwa dreitausend Docker-Container in der Produktumgebung, unterst\u00fctzen unser Big Data-Speicher mit 50 TB und bieten architektonische L\u00f6sungen, die um unsere Infrastruktur herum aufgebaut sind: Kubernetes, Rancher und verschiedene \u00f6ffentliche Cloud-Anbieter.\u00a0<\/p>\n<h1>Unsere Motivation<\/h1>\n<p>\nWas brennt? Niemand kann es beantworten. Wo ist der Brandherd? Schwer zu verstehen. Wann ist es in Brand geraten? Das l\u00e4sst sich kl\u00e4ren, aber nicht sofort.\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"Produktionsbereite Images f\u00fcr k8s\" src=\"\/wp-content\/uploads\/2020\/05\/3ca2271caf1d02ba14937680cd89d65d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWarum gibt es Container, die funktionieren, w\u00e4hrend andere ausfallen? Welcher Container ist daf\u00fcr verantwortlich? Denn \u00e4u\u00dferlich sehen die Container gleich aus, aber jeder hat sein eigenes Neo im Inneren.<\/p>\n<p><img decoding=\"async\" alt=\"Produktionsbereite Images f\u00fcr k8s\" src=\"\/wp-content\/uploads\/2020\/05\/f971583f21e363244f9ea754da2a1f4c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nUnsere Entwickler sind kompetente Leute. Sie erstellen gute Dienste, die dem Unternehmen Gewinn bringen. Doch manchmal gibt es Probleme, wenn die Container mit den Anwendungen chaotisch werden. Ein Container verbraucht zu viel CPU, ein anderer die Netzwerkbandbreite, der dritte sorgt f\u00fcr I\/O-Operationen, w\u00e4hrend der vierte v\u00f6llig unklar ist, was er mit den Sockets anstellt. Das f\u00fchrt zu Ausf\u00e4llen, und das Schiff sinkt.\u00a0<\/p>\n<h1>Agenten<\/h1>\n<p>\nUm zu verstehen, was im Inneren passiert, haben wir beschlossen, Agenten direkt in den Containern zu installieren.<\/p>\n<p><img decoding=\"async\" alt=\"Produktionsbereite Images f\u00fcr k8s\" src=\"\/wp-content\/uploads\/2020\/05\/cc9eb47d1250bb866ec9452181479df4.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDiese Agenten sind \u00dcberwachungsprogramme, die sicherstellen, dass die Container sich in einem Zustand befinden, in dem sie sich nicht gegenseitig besch\u00e4digen. Die Agenten sind standardisiert, was es erm\u00f6glicht, einen einheitlichen Ansatz zur Wartung der Container zu gew\u00e4hrleisten.\u00a0<\/p>\n<p>In unserem Fall m\u00fcssen die Agenten Protokolle im Standardformat bereitstellen, mit Tags und Drosselung. Sie m\u00fcssen uns auch standardisierte Metriken liefern, die aus Sicht der Gesch\u00e4ftsanwendungen erweiterbar sind.<\/p>\n<p>Unter Agenten versteht man auch Tools zur Nutzung und Wartung, die in verschiedenen Orchestrierungssystemen arbeiten k\u00f6nnen und verschiedene Images unterst\u00fctzen (Debian, Alpine, CentOS usw.).<\/p>\n<p>Schlie\u00dflich m\u00fcssen die Agents eine einfache CI\/CD-Pipeline unterst\u00fctzen, die Docker-Dateien umfasst. Andernfalls zerf\u00e4llt das Schiff, weil die Container auf \u201eschiefen\u201c Gleisen geliefert werden.<\/p>\n<h1>Der Prozess des Buildens und die Struktur des Ziel-Images<\/h1>\n<p>\nUm alles zu standardisieren und verwaltbar zu machen, ist es notwendig, einen bestimmten Standard-Build-Prozess einzuhalten. Daher haben wir beschlossen, Container mit Containern zu bauen \u2014 eine Art Rekursion.<\/p>\n<p><img decoding=\"async\" alt=\"Produktionsbereite Images f\u00fcr k8s\" src=\"\/wp-content\/uploads\/2020\/05\/708715af05bf79ce1eb9c2a8ce2aeca6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHier werden die Container als durchgehende Umrisse dargestellt. Zudem haben wir beschlossen, Distributionen hineinzugeben, damit \u201edas Leben nicht wie ein Himbeertraum aussieht\u201c. Warum das gemacht wurde, erkl\u00e4ren wir weiter unten.<br \/>\n\u00a0<br \/>\nDas Ergebnis ist ein Tool zum Bauen \u2014 ein Container einer bestimmten Version, der auf bestimmte Versionen von Distributionen und spezifische Versionen von Skripten verweist.<\/p>\n<p>Wie wenden wir es an? Wir haben Docker Hub, in dem sich der Container befindet. Wir spiegeln ihn in unser System, um externe Abh\u00e4ngigkeiten zu vermeiden. Dabei entsteht ein Container, der gelb markiert ist. Wir erstellen eine Vorlage, um alle ben\u00f6tigten Distributionen und Skripte im Container zu installieren. Anschlie\u00dfend stellen wir ein betriebsbereites Image zusammen: Die Entwickler f\u00fcgen ihren Code und spezielle Abh\u00e4ngigkeiten hinzu.\u00a0<\/p>\n<p>Was ist gut an diesem Ansatz?\u00a0<\/p>\n<ul>\n<li>Erstens, vollst\u00e4ndige Versionskontrolle der Build-Tools \u2013 einschlie\u00dflich des Build-Containers, der Versionen von Skripten und Distributionen.\u00a0<\/li>\n<li>Zweitens haben wir eine Standardisierung erreicht: Wir erstellen Vorlagen, Zwischen- und betriebsbereite Images auf die gleiche Weise.\u00a0<\/li>\n<li>Drittens bieten Container uns Portabilit\u00e4t. Heute verwenden wir Gitlab, und morgen wechseln wir zu TeamCity oder Jenkins und k\u00f6nnen unsere Container genau so betreiben.\u00a0<\/li>\n<li>Viertens, Minimierung der Abh\u00e4ngigkeiten. Wir haben bewusst Distributionen im Container platziert, da dies bedeutet, dass wir sie nicht jedes Mal aus dem Internet herunterladen m\u00fcssen.\u00a0<\/li>\n<li>F\u00fcnftens hat sich die Geschwindigkeit des Builds erh\u00f6ht \u2013 die Verf\u00fcgbarkeit von lokalen Kopien der Images erm\u00f6glicht es, keine Zeit mit dem Herunterladen zu verschwenden, da ein lokales Image vorhanden ist.\u00a0<\/li>\n<\/ul>\n<p>\nAnders ausgedr\u00fcckt, haben wir einen kontrollierten und flexiblen Build-Prozess erreicht. Wir verwenden die gleichen Mittel, um alle Container mit vollst\u00e4ndiger Versionskontrolle zu erstellen.\u00a0<\/p>\n<h1>Wie unser Build-Verfahren funktioniert<\/h1>\n<p>\n<img decoding=\"async\" alt=\"Produktionsbereite Images f\u00fcr k8s\" src=\"\/wp-content\/uploads\/2020\/05\/22b9a8546005e289f79962188dbb0659.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDer Build wird mit einem einzigen Befehl gestartet, der Prozess wird im Image ausgef\u00fchrt (rot hervorgehoben). Der Entwickler hat eine Docker-Datei (gelb hervorgehoben), die wir rendern, wobei wir die Variablen durch Werte ersetzen. Gleichzeitig f\u00fcgen wir Header und Footer hinzu \u2013 das sind unsere Agenten.\u00a0<\/p>\n<p>Der Header f\u00fcgt Distributionen aus den entsprechenden Images hinzu. Der Footer installiert unsere Dienste, konfiguriert den Start der Arbeitslast, das Logging und andere Agenten, ersetzt den Entry-Point usw.\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"Produktionsbereite Images f\u00fcr k8s\" src=\"\/wp-content\/uploads\/2020\/05\/4004e57dc45771479e535921a839716d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWir haben lange \u00fcberlegt, ob wir einen Supervisor einrichten sollen. Schlie\u00dflich haben wir beschlossen, dass wir ihn ben\u00f6tigen. Wir haben S6 ausgew\u00e4hlt. Der Supervisor erm\u00f6glicht das Management des Containers: Er erlaubt den Zugriff auf den Container im Falle eines Absturzes des Hauptprozesses und erm\u00f6glicht die manuelle Steuerung des Containers, ohne ihn neu zu erstellen. Die Protokolle und Metriken sind Prozesse, die im Container ausgef\u00fchrt werden. Auch diese m\u00fcssen \u00fcberwacht werden, und das erledigen wir mit Hilfe des Supervisors. Schlie\u00dflich \u00fcbernimmt S6 Aufgaben wie das Housekeeping, das Signalhandling und weitere Aufgaben.<\/p>\n<p>Da wir verschiedene Orchestrierungssysteme verwenden, muss der Container nach dem Build und Start verstehen, in welcher Umgebung er sich befindet und entsprechend handeln. Zum Beispiel:<br \/>\nDas erm\u00f6glicht es uns, ein einzelnes Image zu erstellen und es in verschiedenen Orchestrierungssystemen auszuf\u00fchren, wobei der Start die Besonderheiten dieses Orchestrierungssystems ber\u00fccksichtigt.<\/p>\n<p>\u00a0<img decoding=\"async\" alt=\"Produktionsbereite Images f\u00fcr k8s\" src=\"\/wp-content\/uploads\/2020\/05\/6e76396afedbbf0e71d44a7fbb8521da.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nF\u00fcr denselben Container erhalten wir unterschiedliche Prozessb\u00e4ume in Docker und Kubernetes:<\/p>\n<p><img decoding=\"async\" alt=\"Produktionsbereite Images f\u00fcr k8s\" src=\"\/wp-content\/uploads\/2020\/05\/83f9d23876192930ffebafcdd549915e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDie Nutzlast wird unter dem Supervisor S6 ausgef\u00fchrt. Beachten Sie den Collector und Events \u2013 das sind unsere Agenten, die f\u00fcr Protokolle und Metriken zust\u00e4ndig sind. In Kubernetes sind sie nicht vorhanden, in Docker hingegen schon. Warum?\u00a0<\/p>\n<p>Wenn wir die Spezifikation eines Pods (im Folgenden Kubernetes-Pod) betrachten, sehen wir, dass der Container events in einem Pod ausgef\u00fchrt wird, in dem ein separater Container collector vorhanden ist, der f\u00fcr das Sammeln von Metriken und Logs zust\u00e4ndig ist. Wir k\u00f6nnen die M\u00f6glichkeiten von Kubernetes nutzen: Container in einem Pod zu starten, in einem einheitlichen Prozess- und\/oder Netzwerkraum. Tats\u00e4chlich k\u00f6nnen wir eigene Agents implementieren und verschiedene Funktionen ausf\u00fchren. Und wenn dieser Container auch in Docker gestartet wird, erh\u00e4lt er dieselben M\u00f6glichkeiten, sodass er Logs und Metriken \u00fcbertragen kann, da die Agents innerhalb des Containers ausgef\u00fchrt werden.\u00a0<\/p>\n<h1>Metriken und Logs<\/h1>\n<p>\nDie \u00dcbertragung von Metriken und Logs ist eine komplexe Aufgabe. Bei ihrer L\u00f6sung sind mehrere Aspekte zu ber\u00fccksichtigen.<br \/>\nDie Infrastruktur wird f\u00fcr die Ausf\u00fchrung von Lasten und nicht f\u00fcr die massenhafte Lieferung von Logs erstellt. Das bedeutet, dass dieser Prozess mit minimalen Anforderungen an die Containerrressourcen umgesetzt werden sollte. Wir wollen unseren Entwicklern helfen: \"Nehmt einen Docker Hub-Container, startet ihn, und wir k\u00f6nnen die Logs \u00fcbertragen.\"\u00a0<\/p>\n<p>Der zweite Aspekt ist die Begrenzung des Log-Volumens. Wenn in mehreren Containern ein Anstieg des Log-Volumens auftritt (wenn eine Anwendung im Loop Stack-Traces ausgibt), erh\u00f6ht sich die CPU-Belastung, die Bandbreite und die Log-Verarbeitungssysteme, was die Gesamtleistung des Hosts sowie andere Container auf dem Host beeintr\u00e4chtigen kann, was manchmal zu einem \"Ausfall\" des Hosts f\u00fchrt.\u00a0<\/p>\n<p>Der dritte Aspekt ist, dass es wichtig ist, von Anfang an m\u00f6glichst viele Methoden zur Metriksammlung zu unterst\u00fctzen. Dazu geh\u00f6ren das Lesen von Dateien und das Abfragen von Prometheus-Endpunkten sowie die Nutzung spezifischer Anwendungsprotokolle.<\/p>\n<p>Und der letzte Aspekt ist, dass der Ressourcenverbrauch minimiert werden muss.<\/p>\n<p>Wir haben uns f\u00fcr die Open-Source-L\u00f6sung Telegraf entschieden, die in Go geschrieben ist. Dies ist ein universeller Connector, der \u00fcber 140 Arten von Eingabekan\u00e4len (Input Plugins) und 30 Arten von Ausgangskan\u00e4len (Output Plugins) unterst\u00fctzt. Wir haben ihn weiterentwickelt und zeigen jetzt, wie er bei uns am Beispiel von Kubernetes verwendet wird.\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"Produktionsbereite Images f\u00fcr k8s\" src=\"\/wp-content\/uploads\/2020\/05\/9635d571c852e5f9358458874c58d7b0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAngenommen, ein Entwickler setzt eine Last auf, und Kubernetes erh\u00e4lt eine Anfrage zur Erstellung eines Pods. In diesem Moment wird f\u00fcr jeden Pod automatisch ein Container mit dem Namen Collector erstellt (wir verwenden einen Mutation-Webhook). Collector ist unser Agent. Beim Start konfiguriert dieser Container sich f\u00fcr die Arbeit mit Prometheus und dem Log-Sammelsystem.<\/p>\n<ul>\n<li>Hierf\u00fcr nutzt er die Annotations des Pods, und je nach deren Inhalt erstellt er beispielsweise einen Endpunkt f\u00fcr Prometheus;\u00a0\n<\/li>\n<li>Basierend auf der Spezifikation des Pods und den spezifischen Container-Einstellungen entscheidet er, wie die Logs bereitgestellt werden.\n<\/li>\n<\/ul>\n<p>\nDie Logs sammeln wir \u00fcber die Docker API: Die Entwickler m\u00fcssen sie nur in stdout oder stderr legen, der Collector k\u00fcmmert sich dann darum. Die Logs werden chunkweise mit einer gewissen Verz\u00f6gerung gesammelt, um eine m\u00f6gliche \u00dcberlastung des Hosts zu verhindern.\u00a0<\/p>\n<p>Metriken werden f\u00fcr die Instanzen der Arbeitslast (Prozesse) in den Containern gesammelt. Alles wird mit Tags versehen: Namespace, Pod und so weiter, und dann in das Prometheus-Format konvertiert \u2013 und ist f\u00fcr die Erfassung verf\u00fcgbar (au\u00dfer f\u00fcr Logs). Au\u00dferdem senden wir Logs, Metriken und Ereignisse an Kafka und dar\u00fcber hinaus:<\/p>\n<ul>\n<li>Logs sind in Graylog verf\u00fcgbar (f\u00fcr die visuelle Analyse);\n<\/li>\n<li>Logs, Metriken und Ereignisse werden in Clickhouse zur langfristigen Speicherung gesendet.\n<\/li>\n<\/ul>\n<p>\nDas gleiche gilt f\u00fcr AWS, wo wir Graylog mit Kafka durch Cloudwatch ersetzen. Die Logs werden dorthin gesendet, und es wird sehr bequem: direkt ersichtlich, zu welchem Cluster und Container sie geh\u00f6ren. Dasselbe gilt f\u00fcr Google Stackdriver. Unsere Architektur funktioniert sowohl lokal mit Kafka als auch in der Cloud.\u00a0<\/p>\n<p>Wenn wir kein Kubernetes mit Pods haben, wird es etwas komplizierter, funktioniert jedoch nach denselben Prinzipien.<\/p>\n<p><img decoding=\"async\" alt=\"Produktionsbereite Images f\u00fcr k8s\" src=\"\/wp-content\/uploads\/2020\/05\/dd8efb33c5c74433a2767cb00caeec2d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIm Container laufen dieselben Prozesse, die mit S6 orchestriert werden. Alle diese Prozesse sind innerhalb eines Containers gestartet.<\/p>\n<h1>Insgesamt<\/h1>\n<p>\nWir haben eine umfassende L\u00f6sung zur Erstellung und Bereitstellung von Images mit Optionen zur Sammlung und Zustellung von Logs und Metriken entwickelt:<\/p>\n<ul>\n<li>Wir haben einen standardisierten Ansatz zur Erstellung von Images entwickelt und darauf basierende CI-Vorlagen erstellt.\n<\/li>\n<li>Die Datenagenten sind unsere Telegraf-Erweiterungen. Wir haben sie erfolgreich in der Produktion getestet.\n<\/li>\n<li>Wir verwenden Webhooks zur Mutation, um Container mit Agenten in Pods zu integrieren.\u00a0\n<\/li>\n<li>Wir haben uns in das Kubernetes\/Rancher-\u00d6kosystem integriert.\n<\/li>\n<li>Wir k\u00f6nnen dieselben Container in verschiedenen Orchestrierungssystemen ausf\u00fchren und das gew\u00fcnschte Ergebnis erzielen.\n<\/li>\n<li>Wir haben eine vollst\u00e4ndig dynamische Containerverwaltungsinfrastruktur erstellt.\u00a0\n<\/li>\n<\/ul>\n<p>\nCo-Autor: <b>Ilja Prudnikov<\/b><br \/>\n<br \/>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/exness\/blog\/488392\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u042d\u0442\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0432 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432\u043e\u0439 \u0441\u0440\u0435\u0434\u0435, \u0432 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434 Kubernetes. \u0421\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u0441\u0431\u043e\u0440\u0443 \u043c\u0435\u0442\u0440\u0438\u043a \u0438 \u043b\u043e\u0433\u043e\u0432 \u0441 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0431\u0438\u043b\u0434\u0443 \u043e\u0431\u0440\u0430\u0437\u043e\u0432. \u041c\u044b \u0438\u0437 \u0444\u0438\u043d\u0442\u0435\u0445-\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Exness, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0434\u043b\u044f \u043e\u043d\u043b\u0430\u0439\u043d-\u0442\u0440\u0435\u0439\u0434\u0438\u043d\u0433\u0430 \u0438 \u0444\u0438\u043d\u0442\u0435\u0445-\u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432 \u0434\u043b\u044f B2B \u0438 \u04122\u0421. \u0412 \u043d\u0430\u0448\u0435\u043c R&amp;D \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434, \u0432 \u043e\u0442\u0434\u0435\u043b\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 100 + \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":81174,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-81173","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u042d\u0442\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0432 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432\u043e\u0439 \u0441\u0440\u0435\u0434\u0435, \u0432 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434 Kubernetes. \u0421\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u0441\u0431\u043e\u0440\u0443 \u043c\u0435\u0442\u0440\u0438\u043a \u0438 \u043b\u043e\u0433\u043e\u0432 \u0441 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0431\u0438\u043b\u0434\u0443 \u043e\u0431\u0440\u0430\u0437\u043e\u0432. \u041c\u044b \u0438\u0437 \u0444\u0438\u043d\u0442\u0435\u0445-\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Exness, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0434\u043b\u044f \u043e\u043d\u043b\u0430\u0439\u043d-\u0442\u0440\u0435\u0439\u0434\u0438\u043d\u0433\u0430 \u0438 \u0444\u0438\u043d\u0442\u0435\u0445-\u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432 \u0434\u043b\u044f B2B \u0438 \u04122\u0421. \u0412 \u043d\u0430\u0448\u0435\u043c R&amp;D \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434, \u0432 \u043e\u0442\u0434\u0435\u043b\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 100 + \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/production-ready-images-for-k8s\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Production-ready images for k8s | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u042d\u0442\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0432 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432\u043e\u0439 \u0441\u0440\u0435\u0434\u0435, \u0432 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434 Kubernetes. \u0421\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u0441\u0431\u043e\u0440\u0443 \u043c\u0435\u0442\u0440\u0438\u043a \u0438 \u043b\u043e\u0433\u043e\u0432 \u0441 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0431\u0438\u043b\u0434\u0443 \u043e\u0431\u0440\u0430\u0437\u043e\u0432. \u041c\u044b \u0438\u0437 \u0444\u0438\u043d\u0442\u0435\u0445-\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Exness, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0434\u043b\u044f \u043e\u043d\u043b\u0430\u0439\u043d-\u0442\u0440\u0435\u0439\u0434\u0438\u043d\u0433\u0430 \u0438 \u0444\u0438\u043d\u0442\u0435\u0445-\u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432 \u0434\u043b\u044f B2B \u0438 \u04122\u0421. \u0412 \u043d\u0430\u0448\u0435\u043c R&amp;D \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434, \u0432 \u043e\u0442\u0434\u0435\u043b\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 100 + \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/production-ready-images-for-k8s\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-05-11T11:42:51+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-05-11T11:42:51+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Produktionsbereite Images f\u00fcr k8s | ProHoster","description":"Diese Geschichte erz\u00e4hlt, wie wir Container in unserer Produktionsumgebung nutzen, insbesondere unter Kubernetes. Der Artikel konzentriert sich auf das Sammeln von Metriken und Protokollen von Containern sowie auf den Build von Images. Wir sind ein Fintech-Unternehmen namens Exness, das Dienstleistungen f\u00fcr den Online-Handel und Fintech-Produkte f\u00fcr B2B und B2C entwickelt. In unserer Forschungs- und Entwicklungsabteilung gibt es viele verschiedene Teams, und in der Entwicklungsabteilung arbeiten \u00fcber 100 Mitarbeiter.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/production-ready-images-for-k8s","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Production-ready images for k8s | ProHoster","og:description":"\u042d\u0442\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0432 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432\u043e\u0439 \u0441\u0440\u0435\u0434\u0435, \u0432 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434 Kubernetes. \u0421\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u0441\u0431\u043e\u0440\u0443 \u043c\u0435\u0442\u0440\u0438\u043a \u0438 \u043b\u043e\u0433\u043e\u0432 \u0441 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0431\u0438\u043b\u0434\u0443 \u043e\u0431\u0440\u0430\u0437\u043e\u0432. \u041c\u044b \u0438\u0437 \u0444\u0438\u043d\u0442\u0435\u0445-\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Exness, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0434\u043b\u044f \u043e\u043d\u043b\u0430\u0439\u043d-\u0442\u0440\u0435\u0439\u0434\u0438\u043d\u0433\u0430 \u0438 \u0444\u0438\u043d\u0442\u0435\u0445-\u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432 \u0434\u043b\u044f B2B \u0438 \u04122\u0421. \u0412 \u043d\u0430\u0448\u0435\u043c R&amp;D \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434, \u0432 \u043e\u0442\u0434\u0435\u043b\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 100 + \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432.","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/production-ready-images-for-k8s","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-05-11T11:42:51+00:00","article:modified_time":"2020-05-11T11:42:51+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"81173","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 16:03:22","updated":"2022-09-28 06:12:17"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/81173","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=81173"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/81173\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/81174"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=81173"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=81173"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=81173"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}