{"id":35006,"date":"2019-10-31T22:01:47","date_gmt":"2019-10-31T19:01:47","guid":{"rendered":"https:\/\/prohoster.info\/blog\/5-printsipov-zdravogo-smysla-dlya-sozdaniya-cloud-native-apps\/"},"modified":"2019-10-31T22:01:47","modified_gmt":"2019-10-31T19:01:47","slug":"5-printsipov-zdravogo-smysla-dlya-sozdaniya-cloud-native-apps","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/news\/5-printsipov-zdravogo-smysla-dlya-sozdaniya-cloud-native-apps","title":{"rendered":"5 Grunds\u00e4tze des gesunden Menschenverstandes f\u00fcr die Erstellung von cloud-nativen Apps","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>\u201eCloud-native\u201c oder einfach \u201eCloud\u201c-Anwendungen werden speziell f\u00fcr den Betrieb in Cloud-Infrastrukturen entwickelt. Sie bestehen in der Regel aus einer Reihe schwach gekoppelter Mikrodienste, die in Containern verpackt sind, die wiederum von einer Cloud-Plattform verwaltet werden. Diese Anwendungen sind standardm\u00e4\u00dfig fehlertolerant, was bedeutet, dass sie auch bei erheblichen Infrastrukturfehlern zuverl\u00e4ssig funktionieren und skalierbar sind. Die Kehrseite der Medaille sind die Einschr\u00e4nkungen (Vertr\u00e4ge), die die Cloud-Plattform auf Containeranwendungen auferlegt, um sie automatisiert verwalten zu k\u00f6nnen.<\/p>\n<p><img decoding=\"async\" alt=\"5 Grunds\u00e4tze des gesunden Menschenverstandes f\u00fcr die Erstellung von cloud-nativen Apps\" src=\"\/wp-content\/uploads\/2019\/06\/1f4af6f356ed36d3fbd8adef333501fa.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDa sich viele Organisationen der Notwendigkeit und Bedeutung des \u00dcbergangs zu Cloud-Anwendungen bewusst sind, wissen viele jedoch immer noch nicht, wo sie anfangen sollen. In diesem Beitrag werden wir eine Reihe von Prinzipien untersuchen, deren Einhaltung bei der Entwicklung von Containeranwendungen das Potenzial von Cloud-Plattformen aussch\u00f6pfen und eine zuverl\u00e4ssige Funktion und Skalierung der Anwendungen auch bei erheblichen IT-Infrastrukturfehlern gew\u00e4hrleisten kann. Das \u00fcbergreifende Ziel der hier dargestellten Prinzipien ist es, zu lernen, wie man Anwendungen erstellt, die von Cloud-Plattformen wie Kubernetes automatisch verwaltet werden k\u00f6nnen.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Designprinzipien f\u00fcr Software<\/h3>\n<p>\nIm Bereich der Programmierung werden unter Prinzipien allgemeine Regeln verstanden, die bei der Softwareentwicklung eingehalten werden m\u00fcssen. Sie k\u00f6nnen f\u00fcr jede Programmiersprache angewandt werden. Jedes Prinzip hat seine eigenen Ziele, deren Erreichung in der Regel durch Entwurfsmuster und Praktiken erfolgt. Es gibt auch eine Reihe grundlegender Prinzipien, die f\u00fcr die Erstellung qualitativ hochwertiger Software entscheidend sind und aus denen sich alle anderen ableiten. Hier sind einige Beispiele grundlegender Prinzipien:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/KISS_(%D0%BF%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF)\">KISS<\/a><\/noindex> (Keep it simple, stupid) \u2013 nicht komplizieren;<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Don%E2%80%99t_repeat_yourself\">DRY<\/a><\/noindex> (Don\u2019t repeat yourself) \u2013 nicht wiederholen;<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/YAGNI\">YAGNI<\/a><\/noindex> (You aren\u2019t gonna need it) \u2013 nichts schaffen, was nicht unmittelbar ben\u00f6tigt wird;<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A0%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BE%D1%82%D0%B2%D0%B5%D1%82%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8\">SoC<\/a><\/noindex> (Separation of concerns) \u2013 Verantwortlichkeiten trennen.<\/li>\n<\/ul>\n<p>\nWie ersichtlich, stellen diese Prinzipien keine spezifischen Regeln dar, sondern geh\u00f6ren zu den sogenannten gesundem Menschenverstand, die viele Entwickler teilen und auf die sie sich regelm\u00e4\u00dfig beziehen.<br \/>\nDar\u00fcber hinaus gibt es <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/SOLID_(%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)\">SOLID<\/a><\/noindex> \u2013 eine Sammlung der ersten f\u00fcnf Prinzipien der objektorientierten Programmierung und des Designs, die von Robert Martin formuliert wurden. SOLID umfasst allgemeine und interpretierbare komplement\u00e4re Prinzipien, die \u2013 wenn sie zusammen angewendet werden \u2013 helfen, qualitativ hochwertigere Softwaresysteme zu erstellen und diese langfristig besser zu warten.<\/p>\n<p>Die SOLID-Prinzipien beziehen sich auf den Bereich der OOP und werden in Begriffen und Konzepten wie Klassen, Schnittstellen und Vererbung formuliert. Analog k\u00f6nnen auch Prinzipien f\u00fcr Cloud-Anwendungen formuliert werden, wobei das grundlegende Element hier nicht die Klasse, sondern der Container ist. Indem man diesen Prinzipien folgt, ist es m\u00f6glich, containerbasierte Anwendungen zu erstellen, die besser auf die Ziele und Anforderungen von Cloud-Plattformen wie Kubernetes abgestimmt sind.<\/p>\n<h3>Cloud-orientierte Container: Red Hat-Ansatz<\/h3>\n<p>\nHeute kann man praktisch jede Anwendung relativ einfach in Container verpacken. Um jedoch Anwendungen effizient zu automatisieren und zu orchestrieren, die auf einer Cloud-Plattform wie Kubernetes laufen, sind zus\u00e4tzliche Anstrengungen erforderlich.<br \/>\nDie Grundlage f\u00fcr die nachstehenden Ideen bildete die Methodologie <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/SOLID_(%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)\">The Twelve-Factor App<\/a><\/noindex> und zahlreiche andere Arbeiten zu verschiedenen Aspekten der Erstellung von Webanwendungen, von der Verwaltung des Quellcodes bis zu Skalierungsmodellen. Die beschriebenen Prinzipien beziehen sich nur auf die Entwicklung von containerbasierten Anwendungen, die auf Microservices basieren und f\u00fcr Cloud-Plattformen wie Kubernetes bestimmt sind. Das grundlegende Element in unseren \u00dcberlegungen ist das Container-Image, und die Zielumgebung f\u00fcr die Ausf\u00fchrung von Containern versteht sich als Plattform zur Orchestrierung von Containern. Das Ziel der vorgeschlagenen Prinzipien ist es, Container zu erstellen, f\u00fcr die in den meisten Orchestrierungsplattformen Aufgaben wie Scheduling (Auswahl des Hosts f\u00fcr die Ausf\u00fchrung einer Containerinstanz), Skalierung und \u00dcberwachung automatisiert werden k\u00f6nnen. Die Prinzipien werden in beliebiger Reihenfolge dargelegt.<\/p>\n<h3>Prinzip der einzigen Aufgabe (Single Concern Principle, SCP)<\/h3>\n<p>\nDieses Prinzip \u00e4hnelt stark dem Prinzip der einzigen Verantwortung (Single Responsibility Principle, <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9F%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF_%D0%B5%D0%B4%D0%B8%D0%BD%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%BE%D1%82%D0%B2%D0%B5%D1%82%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8\">SRP<\/a><\/noindex>), der Teil des SOLID-Satzes ist und besagt, dass jedes Objekt eine einzige Verantwortung haben sollte, und diese Verantwortung sollte vollst\u00e4ndig in der Klasse gekapselt sein. Das Wesen des SRP besteht darin, dass jede Verantwortung einen Grund f\u00fcr \u00c4nderungen darstellt, und die Klasse sollte genau einen einzigen Grund f\u00fcr \u00c4nderungen haben.<\/p>\n<p>Im SCP verwenden wir anstelle des Wortes \u201eVerantwortung\u201c (responsibility) das Wort \u201eAufgabe\u201c (concern), um auf ein h\u00f6heres Abstraktionsniveau hinzuweisen und auf die breitere Funktionalit\u00e4t des Containers im Vergleich zur OOP-Klasse. Wenn das Ziel des SRP darin besteht, nur einen Grund f\u00fcr \u00c4nderungen zu haben, dann steht hinter dem SCP der Wunsch, die M\u00f6glichkeiten zur Wiederverwendbarkeit und zum Austausch von Containern zu erweitern. Wenn Sie dem SRP folgen und einen Container erstellen, der eine einzige Aufgabe erf\u00fcllt und dies funktional abgeschlossen tut, erh\u00f6hen Sie die Chancen, dass dieses Containerbild in verschiedenen Anwendungskontexten wiederverwendet wird.<\/p>\n<p>Das SCP-Prinzip besagt, dass jeder Container eine einzige Aufgabe gut erf\u00fcllen sollte. Au\u00dferdem wird das SCP in der Welt der Container einfacher erreicht als das SRP in der OOP-Welt, da Container in der Regel einen einzigen Prozess ausf\u00fchren, und dieser Prozess l\u00f6st in der Regel eine einzige Aufgabe.<\/p>\n<p>Wenn ein containerisierter Mikroservice mehrere Aufgaben gleichzeitig erf\u00fcllen muss, kann er in einaufgaben Container zerlegt und im Rahmen eines Pods (eine Einheit der Bereitstellung der Containerplattform) mit Hilfe von Sidecar- und Init-Containern kombiniert werden. Dar\u00fcber hinaus erleichtert das SCP den Austausch eines alten Containers (z. B. Webservers oder Nachrichtenbrokers) durch einen neuen, der dieselbe Aufgabe erf\u00fcllt, aber erweiterte Funktionalit\u00e4ten besitzt oder besser skalierbar ist.<\/p>\n<p><img decoding=\"async\" alt=\"5 Grunds\u00e4tze des gesunden Menschenverstandes f\u00fcr die Erstellung von cloud-nativen Apps\" src=\"\/wp-content\/uploads\/2019\/06\/a029e1ca36ace66550c94087e4aecc8e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Das Prinzip der hohen Beobachtbarkeit (High Observability Principle, HOP)<\/h3>\n<p>\nBei der Verwendung von Containern als standardisierte Methode zur Verpackung und Ausf\u00fchrung von Anwendungen werden die Anwendungen selbst als \u201eBlack Box\u201c betrachtet. Wenn es sich jedoch um Cloud-Container handelt, m\u00fcssen sie spezielle APIs zur Verf\u00fcgung stellen, damit die Laufzeitumgebung die Integrit\u00e4t der Container \u00fcberwachen und gegebenenfalls geeignete Ma\u00dfnahmen ergreifen kann. Ohne dies k\u00f6nnen die Automatisierung des Container-Updates und das Management ihres Lebenszyklus nicht standardisiert werden, was wiederum die Stabilit\u00e4t und Benutzerfreundlichkeit des Softwaresystems beeintr\u00e4chtigt.<\/p>\n<p><img decoding=\"async\" alt=\"5 Grunds\u00e4tze des gesunden Menschenverstandes f\u00fcr die Erstellung von cloud-nativen Apps\" src=\"\/wp-content\/uploads\/2019\/06\/7df1320108d9b635c10c6cf41d5dfef6.jpg\" style=\"display:block;margin: 0 auto;\" \/> <br \/>\nIn der Praxis sollte die Containeranwendung mindestens eine API f\u00fcr verschiedene Arten von Integrit\u00e4tstests haben: Liveness-Tests und Readiness-Tests. Wenn die Anwendung mehr beansprucht, sollte sie auch andere Mittel zur \u00dcberwachung ihres Zustands bereitstellen. Beispielsweise das Protokollieren wichtiger Ereignisse \u00fcber STDERR und STDOUT zur Aggregierung von Protokollen mit Werkzeugen wie Fluentd, Logstash und \u00e4hnlichen. Au\u00dferdem sollte eine Integration mit Bibliotheken f\u00fcr Tracing und Metriksammlung wie OpenTracing, Prometheus usw. erfolgen.<\/p>\n<p>Im Allgemeinen kann die Anwendung nach wie vor als \u201eBlack Box\u201c betrachtet werden, muss jedoch mit allen APIs ausgestattet sein, die die Plattform ben\u00f6tigt, um sie optimal zu \u00fcberwachen und zu verwalten.<\/p>\n<h3>Prinzip der Lebenszykluskonformit\u00e4t (Life-cycle Conformance Principle, LCP)<\/h3>\n<p>\nLCP ist ein Gegenst\u00fcck zu HOP. W\u00e4hrend HOP besagt, dass der Container der Plattform APIs zur Verf\u00fcgung stellen muss, um Informationen zu lesen, verlangt LCP von der Anwendung die F\u00e4higkeit, Informationen von der Plattform zu empfangen. Der Container sollte nicht nur Ereignisse empfangen, sondern sich auch anpassen, d.h. darauf reagieren. Daher der Name des Prinzips, das als Anforderung betrachtet werden kann, der Plattform APIs zur Verf\u00fcgung zu stellen, um Daten zu schreiben.<\/p>\n<p><img decoding=\"async\" alt=\"5 Grunds\u00e4tze des gesunden Menschenverstandes f\u00fcr die Erstellung von cloud-nativen Apps\" src=\"\/wp-content\/uploads\/2019\/06\/f32f5d133597ae3905206badc6677f92.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nPlattformen haben verschiedene Arten von Ereignissen, die helfen, den Lebenszyklus des Containers zu verwalten. Es obliegt jedoch der Anwendung selbst zu entscheiden, welche davon sie wahrnehmen und wie sie darauf reagieren m\u00f6chte.<\/p>\n<p>Es ist verst\u00e4ndlich, dass einige Ereignisse wichtiger sind als andere. Zum Beispiel, wenn eine Anwendung schlecht mit einem unerwarteten Abschluss umgeht, muss sie die signale signal: terminate (SIGTERM) empfangen und so schnell wie m\u00f6glich ihre Abschlussprozedur einleiten, um vor dem Eintreffen des signal: kill (SIGKILL) zu reagieren, das nach SIGTERM kommt.<\/p>\n<p>Dar\u00fcber hinaus k\u00f6nnen f\u00fcr den Lebenszyklus einer Anwendung Ereignisse wie PostStart und PreStop von Bedeutung sein. Beispielsweise ben\u00f6tigt eine Anwendung nach dem Start m\u00f6glicherweise eine bestimmte Zeit zum \u201eAufw\u00e4rmen\u201c, bevor sie auf Anfragen reagieren kann. Oder die Anwendung muss beim Beenden auf eine besondere Weise Ressourcen freigeben.<\/p>\n<h3>Prinzip der Unver\u00e4nderlichkeit von Container-Images (Image Immutability Principle, IIP)<\/h3>\n<p>\nEs ist allgemein anerkannt, dass Container-Anwendungen nach dem Kompilieren unver\u00e4ndert bleiben sollten, selbst wenn sie in verschiedenen Umgebungen ausgef\u00fchrt werden. Daher ist es notwendig, die Speicherung von Daten zur Laufzeit zu externalisieren (mit anderen Worten, externe Mittel daf\u00fcr zu verwenden) sowie sich auf externe, auf die jeweilige Runtime-Umgebung angepasste Konfigurationen zu verlassen, anstatt einzigartige Container f\u00fcr jede Umgebung zu modifizieren oder zu erstellen. Nach \u00c4nderungen an der Anwendung muss das Container-Image neu erstellt und in allen verwendeten Umgebungen bereitgestellt werden. \u00dcbrigens wird bei der Verwaltung von IT-Systemen ein \u00e4hnliches Prinzip angewendet, das als Prinzip der Unver\u00e4nderlichkeit von Servern und Infrastruktur bekannt ist. <\/p>\n<p>Ziel des IIP ist es, die Erstellung separater Container-Images f\u00fcr verschiedene Laufzeitumgebungen zu verhindern und \u00fcberall dasselbe Image zusammen mit der entsprechenden Konfiguration f\u00fcr die jeweilige Umgebung zu verwenden. Die Befolgung dieses Prinzips erm\u00f6glicht die Umsetzung wichtiger Automatisierungspraktiken in Cloud-Systemen, wie Rollbacks und Roll-Forward-Updates der Anwendung.<\/p>\n<p><img decoding=\"async\" alt=\"5 Grunds\u00e4tze des gesunden Menschenverstandes f\u00fcr die Erstellung von cloud-nativen Apps\" src=\"\/wp-content\/uploads\/2019\/06\/86b93724830b37f82bf289b797407480.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Prinzip der Einmaligkeit von Prozessen (Process Disposability Principle, PDP)<\/h3>\n<p>\nEine der wichtigsten Eigenschaften eines Containers ist seine Fl\u00fcchtigkeit: Ein Container-Exemplar kann problemlos erstellt und leicht zerst\u00f6rt werden, weshalb es jederzeit unkompliziert gegen ein anderes Exemplar ausgetauscht werden kann. Gr\u00fcnde f\u00fcr einen solchen Austausch k\u00f6nnen vielf\u00e4ltig sein: ein fehlerhafter Test, Skalierung der Anwendung, Migration auf einen anderen Host, Ressourcenersch\u00f6pfung der Plattform oder andere Situationen. <\/p>\n<p><img decoding=\"async\" alt=\"5 Grunds\u00e4tze des gesunden Menschenverstandes f\u00fcr die Erstellung von cloud-nativen Apps\" src=\"\/wp-content\/uploads\/2019\/06\/858287b23c276363313e35cf18b81190.jpg\" style=\"display:block;margin: 0 auto;\" \/> <br \/>\nDaher m\u00fcssen Containeranwendungen ihren Zustand mit Hilfe externer Mittel speichern oder interne verteilte Schemata mit Redundanz nutzen. Dar\u00fcber hinaus sollte die Anwendung schnell gestartet und z\u00fcgig beendet werden und bereit sein f\u00fcr pl\u00f6tzliche fatale Hardwarefehler.<\/p>\n<p>Eine der Praktiken, die hilft, dieses Prinzip umzusetzen, besteht darin, Container kleiner Gr\u00f6\u00dfe zu erstellen. Cloud-Umgebungen k\u00f6nnen automatisch einen Host f\u00fcr die Ausf\u00fchrung einer Containerinstanz ausw\u00e4hlen, weshalb ein kleinerer Container schneller gestartet werden kann \u2013 er wird einfach schneller \u00fcber das Netzwerk auf den Zielhost kopiert.<\/p>\n<h3>Prinzip der Selbstgen\u00fcgsamkeit (Self-containment Principle, S-CP)<\/h3>\n<p>\nNach diesem Prinzip werden in der Build-Phase alle erforderlichen Komponenten in den Container aufgenommen. Der Container sollte so gebaut werden, dass nur ein reines Linux-Kernel-System vorhanden ist, weshalb alle erforderlichen zus\u00e4tzlichen Bibliotheken im Container selbst untergebracht werden m\u00fcssen. Ebenso sollten Dinge, wie die Laufzeitumgebung f\u00fcr die entsprechende Programmiersprache, die Anwendungsplattform (falls erforderlich) und andere Abh\u00e4ngigkeiten, die zur Ausf\u00fchrung der Containeranwendung ben\u00f6tigt werden, dort platziert werden. <\/p>\n<p><img decoding=\"async\" alt=\"5 Grunds\u00e4tze des gesunden Menschenverstandes f\u00fcr die Erstellung von cloud-nativen Apps\" src=\"\/wp-content\/uploads\/2019\/06\/ecc7425510d63e4914c0c9a7e90b02a6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Ausnahmen gelten nur f\u00fcr Konfigurationen, die von Umgebung zu Umgebung variieren und w\u00e4hrend der Ausf\u00fchrung bereitgestellt werden m\u00fcssen, zum Beispiel \u00fcber Kubernetes ConfigMap.<\/p>\n<p>Die Anwendung kann mehrere containerisierte Komponenten enthalten, wie zum Beispiel einen separaten Datenbankcontainer innerhalb einer containerisierten Webanwendung. Laut dem S-CP sollten diese Container nicht zu einem einzigen zusammengefasst werden, sondern der Datenbankcontainer sollte alles N\u00f6tige f\u00fcr den Betrieb der Datenbank beinhalten, w\u00e4hrend der Webanwendungscontainer alles f\u00fcr den Betrieb der Webanwendung, einschlie\u00dflich des Webservers, bereitstellt. Dadurch wird der Container der Webanwendung w\u00e4hrend der Ausf\u00fchrung vom Datenbankcontainer abh\u00e4ngig sein und nach Bedarf auf ihn zugreifen.<\/p>\n<h3>Prinzip der Laufzeiteinschr\u00e4nkung (Runtime Confinement Principle, RCP)<\/h3>\n<p>\nDas S-CP-Prinzip bestimmt, wie ein Container aufgebaut sein sollte und was die Bin\u00e4rdatei des Images beinhalten muss. Aber ein Container ist nicht nur ein \u201eschwarzer Kasten\u201c, der lediglich eine Eigenschaft hat \u2013 die Dateigr\u00f6\u00dfe. W\u00e4hrend der Ausf\u00fchrung erh\u00e4lt der Container auch andere Dimensionen: den Speicherverbrauch, die CPU-Zeit und andere Systemressourcen.<\/p>\n<p><img decoding=\"async\" alt=\"5 Grunds\u00e4tze des gesunden Menschenverstandes f\u00fcr die Erstellung von cloud-nativen Apps\" src=\"\/wp-content\/uploads\/2019\/06\/a52e6a656892e57479ac014a3e6f4316.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nHier kommt das RCP-Prinzip ins Spiel, gem\u00e4\u00df dem der Container seine Anforderungen an die Systemressourcen dekapseln und an die Plattform weitergeben muss. Mit den Ressourcenprofilen jedes Containers (wie viel CPU, Speicher, Netzwerk und Speicherplatz er ben\u00f6tigt) kann die Plattform die Zuordnung und die automatische Skalierung optimal durchf\u00fchren, IT-Ressourcen steuern und SLAs f\u00fcr Container aufrechterhalten.<\/p>\n<p>Neben der Erf\u00fcllung der Ressourcenanforderungen des Containers ist es f\u00fcr die Anwendung auch wichtig, die von ihr selbst gesetzten Grenzen nicht zu \u00fcberschreiten. Andernfalls wird die Plattform bei einem Ressourcenengpass wahrscheinlich die Anwendung in die Liste der Anwendungen aufnehmen, die gestoppt oder migriert werden m\u00fcssen.<\/p>\n<p>Wenn wir von Cloud-Orientierung sprechen, meinen wir in erster Linie die Art und Weise, wie gearbeitet wird. <br \/>\nWir haben eine Reihe allgemeiner Prinzipien formuliert, die die methodologische Grundlage f\u00fcr den Aufbau qualitativ hochwertiger Containeranwendungen f\u00fcr Cloud-Umgebungen bilden.<\/p>\n<p>Es ist zu beachten, dass neben diesen allgemeinen Prinzipien auch erweiterte Methoden und Techniken zur Arbeit mit Containern erforderlich sind. Dar\u00fcber hinaus gibt es einige kurze Empfehlungen, die einen spezifischeren Charakter haben und je nach Situation angewendet (oder nicht angewendet) werden sollten:<\/p>\n<ul>\n<li>Versuchen Sie, die Gr\u00f6\u00dfe der Images zu reduzieren: Entfernen Sie tempor\u00e4re Dateien und installieren Sie keine unn\u00f6tigen Pakete \u2013 je kleiner die Containergr\u00f6\u00dfe, desto schneller wird er erstellt und \u00fcber das Netzwerk auf den Ziel-Host kopiert.<\/li>\n<li>Orientieren Sie sich an willk\u00fcrlichen User-IDs: Verwenden Sie nicht den Befehl sudo oder spezielle User-IDs, um Ihre Container zu starten.<\/li>\n<li>Kennzeichnen Sie wichtige Ports: Die Portnummern k\u00f6nnen auch zur Laufzeit festgelegt werden, aber es ist besser, sie mit dem Befehl EXPOSE anzugeben \u2013 anderen Personen und Programmen wird es leichter fallen, Ihre Images zu verwenden. <\/li>\n<li>Speichern Sie persistente Daten auf Volumes: Daten, die nach der Zerst\u00f6rung des Containers bestehen bleiben sollen, sollten auf Volumes geschrieben werden.<\/li>\n<li>Definieren Sie die Metadaten des Images: Tags, Labels und Anmerkungen erleichtern die Nutzung von Images \u2013 andere Entwickler werden Ihnen dankbar sein.<\/li>\n<li>Synchronisieren Sie Host und Images: F\u00fcr einige Containeranwendungen ist es erforderlich, den Container mit dem Host basierend auf bestimmten Attributen wie Zeit oder Maschinen-ID zu synchronisieren.<\/li>\n<li>Abschlie\u00dfend teilen wir Vorlagen und Best Practices, die Ihnen helfen, die oben genannten Prinzipien effektiver umzusetzen:<br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/www.slideshare.net\/luebken\/container-patterns\">www.slideshare.net\/luebken\/container-patterns<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.docker.com\/engine\/userguide\/eng-image\/dockerfile_best-practices\">docs.docker.com\/engine\/userguide\/eng-image\/dockerfile_best-practices<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"http:\/\/docs.projectatomic.io\/container-best-practices\">docs.projectatomic.io\/container-best-practices<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.openshift.com\/enterprise\/3.0\/creating_images\/guidelines.html\">docs.openshift.com\/enterprise\/3.0\/creating_images\/guidelines.html<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/www.usenix.org\/system\/files\/conference\/hotcloud16\/hotcloud16_burns.pdf\">www.usenix.org\/system\/files\/conference\/hotcloud16\/hotcloud16_burns.pdf<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/leanpub.com\/k8spatterns\/\">leanpub.com\/k8spatterns<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/12factor.net\/\">12factor.net<\/a><\/noindex><\/li>\n<\/ul>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/events.redhat.com\/profile\/form\/index.cfm?intcmp=701f20000012s47AAA&amp;PKFormID=0x5789474c4\"><b>Webinar zur neuen Version der OpenShift Container Platform \u2013 4<\/b><\/a><\/noindex><br \/>\n11. Juni um 11:00 Uhr<\/p>\n<p>Was Sie lernen werden:<\/p>\n<ul>\n<li>Immutable Red Hat Enterprise Linux CoreOS<\/li>\n<li>OpenShift Service Mesh<\/li>\n<li>Operator Framework<\/li>\n<li>Knative Framework<\/li>\n<\/ul>\n<p>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/redhatrussia\/blog\/455024\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u00ab\u041e\u0431\u043b\u0430\u0447\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435\u00bb (cloud native) \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u00ab\u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0435\u00bb \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0445. \u041e\u0431\u044b\u0447\u043d\u043e \u043e\u043d\u0438 \u0441\u0442\u0440\u043e\u044f\u0442\u0441\u044f \u043a\u0430\u043a \u043d\u0430\u0431\u043e\u0440 \u0441\u043b\u0430\u0431\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u043e\u0439. \u0422\u0430\u043a\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0433\u043e\u0442\u043e\u0432\u044b \u043a \u0441\u0431\u043e\u044f\u043c, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u043d\u0430\u0434\u0435\u0436\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u044b\u0445 \u043e\u0442\u043a\u0430\u0437\u0430\u0445 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f. \u041e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u043c\u0435\u0434\u0430\u043b\u0438 \u2013 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":26340,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-35006","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u00ab\u041e\u0431\u043b\u0430\u0447\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435\u00bb (cloud native) \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u00ab\u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0435\u00bb \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0445.\" \/>\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\/news\/5-printsipov-zdravogo-smysla-dlya-sozdaniya-cloud-native-apps\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\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\udd475 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u0432 \u0437\u0434\u0440\u0430\u0432\u043e\u0433\u043e \u0441\u043c\u044b\u0441\u043b\u0430 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f cloud-native apps | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u00ab\u041e\u0431\u043b\u0430\u0447\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435\u00bb (cloud native) \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u00ab\u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0435\u00bb \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0445.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/news\/5-printsipov-zdravogo-smysla-dlya-sozdaniya-cloud-native-apps\" \/>\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=\"2019-10-31T19:01:47+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:01:47+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\udd475 gesunde Prinzipien zur Erstellung von Cloud-native Apps | ProHoster","description":"\u201eCloud-native\u201c Anwendungen oder einfach \u201eCloud\u201c-Apps werden speziell f\u00fcr den Betrieb in Cloud-Infrastrukturen entwickelt.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/news\/5-printsipov-zdravogo-smysla-dlya-sozdaniya-cloud-native-apps","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\udd475 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u0432 \u0437\u0434\u0440\u0430\u0432\u043e\u0433\u043e \u0441\u043c\u044b\u0441\u043b\u0430 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f cloud-native apps | ProHoster","og:description":"\u00ab\u041e\u0431\u043b\u0430\u0447\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435\u00bb (cloud native) \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u00ab\u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0435\u00bb \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0445.","og:url":"https:\/\/prohoster.info\/de\/blog\/news\/5-printsipov-zdravogo-smysla-dlya-sozdaniya-cloud-native-apps","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":"2019-10-31T19:01:47+00:00","article:modified_time":"2019-10-31T19:01:47+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"35006","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":"2026-01-21 21:27:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:11:30","updated":"2026-01-21 21:27:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/35006","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=35006"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/35006\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/26340"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=35006"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=35006"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=35006"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}