{"id":96065,"date":"2020-10-07T13:42:09","date_gmt":"2020-10-07T11:42:09","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/problema-umnoj-ochistki-obrazov-kontejnerov-i-eyo-reshenie-v-werf"},"modified":"2020-10-07T13:42:09","modified_gmt":"2020-10-07T11:42:09","slug":"problema-umnoj-ochistki-obrazov-kontejnerov-i-eyo-reshenie-v-werf","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/problema-umnoj-ochistki-obrazov-kontejnerov-i-eyo-reshenie-v-werf","title":{"rendered":"Das Problem der \"intelligenten\" Bereinigung von Container-Images und seine L\u00f6sung in werf","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Das Problem der &quot;intelligenten&quot; Bereinigung von Container-Images und seine L\u00f6sung in werf\" src=\"\/wp-content\/uploads\/2020\/10\/1410cea46bb8dcdc3ac06db11ed5a402.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn diesem Artikel wird das Problem der Bereinigung von Images er\u00f6rtert, die in Container-Registries (wie Docker Registry und anderen) in den modernen CI\/CD-Pipelines f\u00fcr cloud-native Anwendungen, die in Kubernetes bereitgestellt werden, angesammelt werden. Es werden die grundlegenden Kriterien f\u00fcr die Relevanz von Images sowie die daraus resultierenden Schwierigkeiten bei der Automatisierung der Bereinigung, dem Platzverbrauch und der Erf\u00fcllung der Bed\u00fcrfnisse der Teams vorgestellt. Schlie\u00dflich zeigen wir anhand eines konkreten Open-Source-Projekts auf, wie diese Herausforderungen \u00fcberwunden werden k\u00f6nnen.<\/p>\n<h2>Einf\u00fchrung<\/h2>\n<p>\nDie Anzahl der Images in der Container-Registry kann schnell ansteigen, was mehr Speicherplatz beansprucht und somit die Kosten erheblich erh\u00f6ht. Um das Wachstum des Speicherplatzes in der Registry zu kontrollieren, zu begrenzen oder auf einem akzeptablen Niveau zu halten, ist es \u00fcblich:<\/p>\n<ol>\n<li>eine feste Anzahl von Tags f\u00fcr die Images zu verwenden;<\/li>\n<li>auf irgendeine Art und Weise die Images zu bereinigen.<\/li>\n<\/ol>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nDie erste Einschr\u00e4nkung ist manchmal f\u00fcr kleine Teams akzeptabel. Wenn die Entwickler mit den konstanten Tags auskommen (<main>, , ...),<code>latest<\/code>, <code>main<\/code>, <code>test<\/code>, <code>boris<\/code> und so weiter), das Register wird nicht aufgebl\u00e4ht, und man muss lange Zeit \u00fcberhaupt nicht an eine Bereinigung denken. Denn alle veralteten Images werden verdr\u00e4ngt, und f\u00fcr die Reinigung bleibt einfach keine Arbeit \u00fcbrig (alles wird vom regul\u00e4ren Garbage Collector erledigt).<\/p>\n<p>Dennoch schr\u00e4nkt dieser Ansatz die Entwicklung stark ein und ist selten auf CI\/CD moderner Projekte anwendbar. Ein unverzichtbarer Bestandteil der Entwicklung ist <strong>Automatisierung<\/strong>, die es erm\u00f6glicht, neuen Funktionalit\u00e4ten viel schneller zu testen, bereitzustellen und den Nutzern zur Verf\u00fcgung zu stellen. Zum Beispiel wird in all unseren Projekten bei jedem Commit automatisch eine CI-Pipeline erstellt. Dort wird ein Image erstellt, getestet und in verschiedene Kubernetes-Umgebungen zur Fehlerbehebung und weiteren Pr\u00fcfungen bereitgestellt, und wenn alles gut l\u00e4uft, gelangen die \u00c4nderungen an den Endnutzer. Und das ist l\u00e4ngst keine Raketenwissenschaft mehr, sondern f\u00fcr viele ganz normal \u2013 wahrscheinlich auch f\u00fcr Sie, da Sie diesen Artikel lesen.<\/p>\n<p>Da das Beheben von Bugs und die Entwicklung neuer Funktionalit\u00e4ten parallel erfolgen und Releases mehrmals t\u00e4glich durchgef\u00fchrt werden k\u00f6nnen, ist offensichtlich, dass der Entwicklungsprozess mit einer erheblichen Anzahl von Commits verbunden ist, und das bedeutet \u2013 <strong>eine gro\u00dfe Anzahl von Abbildungen im Registry<\/strong>. Infolgedessen stellt sich die dringende Frage nach der effektiven Bereinigung des Registrys, d.h. der Entfernung nicht aktueller Abbildungen.<\/p>\n<p>Aber wie l\u00e4sst sich \u00fcberhaupt bestimmen, ob eine Abbildung aktuell ist?<\/p>\n<h2>Kriterien f\u00fcr die Aktualit\u00e4t von Abbildungen<\/h2>\n<p>\nIn den \u00fcberwiegenden meisten F\u00e4llen sind die Hauptkriterien wie folgt:<\/p>\n<p>1. Das erste (das offensichtlichste und kritischste von allen) \u2014 sind die Abbildungen, die <strong>aktuell in Kubernetes verwendet werden.<\/strong>Das L\u00f6schen dieser Abbildungen kann ernsthafte Kosten aufgrund von Produktionsausfall verursachen (z.B. k\u00f6nnen diese Abbildungen bei der Replikation ben\u00f6tigt werden) oder die Bem\u00fchungen des Teams, das an der Fehlerbehebung in einem der Konturen arbeitet, zunichte machen. <i>(Aus diesem Grund haben wir sogar einen speziellen <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/k8s-image-availability-exporter\"><i>Prometheus-Exporter<\/i><\/a><\/noindex><i>, der das Fehlen solcher Abbildungen in jedem Kubernetes-Cluster \u00fcberwacht.)<\/i><\/p>\n<p>2. Das zweite (weniger offensichtlich, aber ebenfalls sehr wichtig und erneut betrieblich relevant) \u2014 sind Abbildungen, die <strong>f\u00fcr einen Rollback ben\u00f6tigt werden, wenn ernsthafte Probleme auftreten.<\/strong> in der aktuellen Version. Zum Beispiel betrifft es bei Helm die Abbilder, die in den gespeicherten Versionen des Releases verwendet werden. (\u00dcbrigens liegt das Standardlimit in Helm bei 256 Revisionen, aber ich bezweifle, dass jemand tats\u00e4chlich einen so hohen Bedarf an der Aufbewahrung hat. <i>so vieler<\/i> Versionen?..) Schlie\u00dflich speichern wir Versionen unter anderem, um sie sp\u00e4ter nutzen zu k\u00f6nnen, d.h. um im Bedarfsfall \"zur\u00fcckzurollen\".<\/p>\n<p>3. Der dritte \u2014 <strong>Bed\u00fcrfnisse der Entwickler<\/strong>: alle Abbilder, die mit ihren aktuellen Arbeiten in Verbindung stehen. Wenn wir beispielsweise einen PR betrachten, ist es sinnvoll, das Abbild des letzten Commits und, sagen wir, des vorherigen Commits zu behalten: So kann der Entwickler schnell zu jeder Aufgabe zur\u00fcckkehren und mit den letzten \u00c4nderungen arbeiten. <\/p>\n<p>4. Der vierte \u2014 Abbilder, die <strong>entsprechend den Versionen unserer Anwendung<\/strong>, d.h. die Endprodukte darstellen: v1.0.0, 20.04.01, sierra usw.<\/p>\n<p>Hinweis: Die hier definierten Kriterien basieren auf Erfahrungen aus der Zusammenarbeit mit Dutzenden von Entwicklerteams verschiedener Unternehmen. Allerdings k\u00f6nnen diese Kriterien je nach den spezifischen Entwicklungsprozessen und der verwendeten Infrastruktur (z. B. wenn Kubernetes nicht eingesetzt wird) variieren. <\/p>\n<h2>Einhaltung der Kriterien und bestehende L\u00f6sungen<\/h2>\n<p>\nBeliebte Dienste mit Container-Registries bieten in der Regel eigene Richtlinien zur Bereinigung von Images an: In diesen k\u00f6nnen Sie festlegen, unter welchen Bedingungen ein Tag aus der Registry entfernt wird. Die M\u00f6glichkeiten dieser Bedingungen sind jedoch durch Parameter wie Namen, Erstellungszeit und Anzahl der Tags* begrenzt.<\/p>\n<p><i>* Abh\u00e4ngig von den spezifischen Implementierungen des Container-Registrys. Wir haben die M\u00f6glichkeiten der folgenden L\u00f6sungen gepr\u00fcft: Azure CR, Docker Hub, ECR, GCR, GitHub Packages, GitLab Container Registry, Harbor Registry, JFrog Artifactory, Quay.io \u2013 Stand September 2020.<\/i><\/p>\n<p>Dieses Set an Parametern reicht aus, um das vierte Kriterium zu erf\u00fcllen \u2013 also um Images auszuw\u00e4hlen, die mit den Versionen \u00fcbereinstimmen. F\u00fcr alle anderen Kriterien muss jedoch eine Art Kompromissl\u00f6sung gefunden werden (eine strengere oder eher mildere Politik), abh\u00e4ngig von den Erwartungen und finanziellen M\u00f6glichkeiten.<\/p>\n<p>Das dritte Kriterium \u2013 das mit den Bed\u00fcrfnissen der Entwickler zusammenh\u00e4ngt \u2013 kann durch die Organisation der internen Teamprozesse gel\u00f6st werden: spezifische Namensgebungen von Images, F\u00fchrung spezieller Allow-Listen und interne Vereinbarungen. Letztendlich muss es jedoch auch automatisiert werden. Wenn die vorhandenen L\u00f6sungen nicht ausreichen, bleibt oft nur, etwas Eigenes zu schaffen.<\/p>\n<p>\u00c4hnlich verh\u00e4lt es sich mit den ersten beiden Kriterien: Diese k\u00f6nnen nicht erf\u00fcllt werden, ohne Daten von einem externen System zu erhalten \u2013 dem System, in dem die Anwendungen bereitgestellt werden (in unserem Fall ist es Kubernetes).<\/p>\n<h3>Illustration des Workflows in Git<\/h3>\n<p>\nAngenommen, Sie arbeiten ungef\u00e4hr nach folgendem Schema in Git:<\/p>\n<p><img decoding=\"async\" alt=\"Das Problem der &quot;intelligenten&quot; Bereinigung von Container-Images und seine L\u00f6sung in werf\" src=\"\/wp-content\/uploads\/2020\/10\/45c9bfb6755da1b4d6be05b51ab17429.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Die Symbole mit dem Kopf in dem Diagramm kennzeichnen die Container-Images, die derzeit in Kubernetes f\u00fcr verschiedene Benutzer (Endbenutzer, Tester, Manager usw.) bereitgestellt oder von Entwicklern zu Debugging- und \u00e4hnlichen Zwecken verwendet werden.<\/i><\/p>\n<p>Was passiert, wenn die Aufbewahrungsrichtlinien erlauben, Images nur bei bestimmten Tag-Namen zu belassen (nicht zu l\u00f6schen)? <b>offensichtlich wird ein solches Szenario niemanden erfreuen.<\/b>?<\/p>\n<p><img decoding=\"async\" alt=\"Das Problem der &quot;intelligenten&quot; Bereinigung von Container-Images und seine L\u00f6sung in werf\" src=\"\/wp-content\/uploads\/2020\/10\/e57ff24cb818799d28e8eb006aea2eb5.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWas \u00e4ndert sich, wenn die Richtlinien das Behalten von Images erlauben?<\/p>\n<p>basierend auf einem bestimmten Zeitintervall \/ der Anzahl der letzten Commits? <b>Das Ergebnis hat sich deutlich verbessert, bleibt jedoch nach wie vor weit vom Ideal entfernt. Immerhin gibt es weiterhin Entwickler, die Images im Repository (oder sogar in K8s bereitgestellt) ben\u00f6tigen, um Bugs zu debuggen\u2026<\/b>?<\/p>\n<p><img decoding=\"async\" alt=\"Das Problem der &quot;intelligenten&quot; Bereinigung von Container-Images und seine L\u00f6sung in werf\" src=\"\/wp-content\/uploads\/2020\/10\/7743581e6e64affb0a207ee156c00f6e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nZusammenfassend l\u00e4sst sich sagen, dass die in den Container-Repositories verf\u00fcgbaren Funktionen nicht die notwendige Flexibilit\u00e4t beim Cleanup bieten, und der Hauptgrund daf\u00fcr ist,<\/p>\n<p>dass keine M\u00f6glichkeit besteht, mit der Au\u00dfenwelt zu interagieren. <strong>keine M\u00f6glichkeit, mit der Au\u00dfenwelt zu interagieren<\/strong>. Das bedeutet, dass Teams, die solche Flexibilit\u00e4t ben\u00f6tigen, gezwungen sind, das L\u00f6schen von Images \u201evon au\u00dfen\u201c selbst umzusetzen, indem sie die Docker Registry API (oder die native API der entsprechenden Implementierung) verwenden.<\/p>\n<p>Wir suchten jedoch nach einer universellen L\u00f6sung, die die Bereinigung von Images f\u00fcr verschiedene Teams automatisiert, die unterschiedliche Registries verwenden\u2026<\/p>\n<h2>Unser Weg zur universellen Image-Bereinigung<\/h2>\n<p>\nWarum besteht diese Notwendigkeit? Wir sind nicht eine isolierte Gruppe von Entwicklern, sondern ein Team, das viele solche Gruppen unterst\u00fctzt und hilft, CI\/CD-Fragen umfassend zu l\u00f6sen. Das wichtigste technische Tool daf\u00fcr ist eine Open Source-Anwendung <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.werf.io\/\">werf<\/a><\/noindex>. Ihre Besonderheit ist, dass sie nicht nur eine einzige Funktion erf\u00fcllt, sondern die kontinuierlichen Lieferprozesse in allen Phasen begleitet: von der Erstellung bis zur Bereitstellung.<\/p>\n<p>Die Ver\u00f6ffentlichung in einem Registry* (sofort nach der Erstellung) ist eine offensichtliche Funktion eines solchen Tools. Da die Images dort gespeichert werden, m\u00fcssen\u2014falls Ihr Speicher nicht unbegrenzt ist\u2014auch deren anschlie\u00dfende Bereinigung gew\u00e4hrleistet sein. Im Folgenden wird erl\u00e4utert, wie wir dies erfolgreich umgesetzt haben, w\u00e4hrend wir alle festgelegten Kriterien erf\u00fcllt haben.<\/p>\n<p><i>* Auch wenn die Registries unterschiedlich sein k\u00f6nnen (Docker Registry, GitLab Container Registry, Harbor usw.), stehen ihre Benutzer vor \u00e4hnlichen Herausforderungen. Eine universelle L\u00f6sung in unserem Fall h\u00e4ngt nicht von der Implementierung der Registry ab, da sie au\u00dferhalb der Registries selbst durchgef\u00fchrt wird und f\u00fcr alle dasselbe Verhalten bietet.<\/i><\/p>\n<p>Obwohl wir werf als Beispiel f\u00fcr die Implementierung nutzen, hoffen wir, dass die verwendeten Ans\u00e4tze auch anderen Teams, die vor \u00e4hnlichen Schwierigkeiten stehen, n\u00fctzlich sein werden.<\/p>\n<p>Also haben wir uns mit <i>externen<\/i> Implementierung eines Mechanismus zur Bereinigung von Images besch\u00e4ftigt \u2013 anstelle der bereits in den Registries f\u00fcr Container integrierten M\u00f6glichkeiten. Der erste Schritt war die Nutzung der Docker Registry API zur Erstellung einfacher Richtlinien hinsichtlich der Anzahl der Tags und ihrer Erstellungszeit (wie oben erw\u00e4hnt). Dazu wurde eine <strong>Allow-Liste basierend auf den Images, die in der bereitgestellten Infrastruktur verwendet werden, hinzugef\u00fcgt<\/strong>, d.h. Kubernetes. F\u00fcr letzteres gen\u00fcgte es, \u00fcber die Kubernetes API alle bereitgestellten Ressourcen zu durchlaufen und eine Liste der Werte zu erhalten, <code>image<\/code>.<\/p>\n<p>Diese triviale L\u00f6sung hat das kritischste Problem (Kriterium Nr. 1) gel\u00f6st, war jedoch nur der Anfang unseres Weges zur Verbesserung des Reinigungsmechanismus. Der n\u00e4chste \u2014 und deutlich interessantere \u2014 Schritt war die Entscheidung <strong>die ver\u00f6ffentlichten Images mit der Git-Historie zu verkn\u00fcpfen.<\/strong>.<\/p>\n<h3>Tagging-Schemata<\/h3>\n<p>\nZu Beginn w\u00e4hlten wir einen Ansatz, bei dem das endg\u00fcltige Image die notwendige Information f\u00fcr die Reinigung speichern sollte, und wir bauten den Prozess auf Tagging-Schemata auf. Bei der Ver\u00f6ffentlichung eines Images w\u00e4hlte der Benutzer eine bestimmte Tagging-Option (<code>git-branch<\/code>, <code>git-commit<\/code> oder <code>git-tag<\/code>) und verwendete den entsprechenden Wert. In CI-Systemen wurden diese Werte automatisch basierend auf Umgebungsvariablen gesetzt. Im Grunde genommen <strong>wurde das endg\u00fcltige Image mit einem bestimmten Git-Primitiv verkn\u00fcpft<\/strong>, wobei die erforderlichen Daten f\u00fcr die Reinigung in Labels gespeichert wurden.<\/p>\n<p>Im Rahmen dieses Ansatzes entstand ein Satz von Richtlinien, die es erm\u00f6glichten, Git als einzige Quelle der Wahrheit zu verwenden:<\/p>\n<ul>\n<li>Beim L\u00f6schen eines Branches\/Tages in Git wurden automatisch auch die verkn\u00fcpften Images im Registry gel\u00f6scht.<\/li>\n<li>Die Anzahl der Images, die mit Git-Tags und Commits verkn\u00fcpft sind, konnte durch die Anzahl der in dem ausgew\u00e4hlten Schema verwendeten Tags und den Zeitpunkt der Erstellung des zugeh\u00f6rigen Commits reguliert werden.<\/li>\n<\/ul>\n<p>\nInsgesamt erf\u00fcllte die entstandene Implementierung unsere Bed\u00fcrfnisse, doch bald erwartete uns eine neue Herausforderung. W\u00e4hrend der Nutzung von Git-Tagging-Schemata stie\u00dfen wir auf mehrere Nachteile. <i>(Da ihre Beschreibung den Rahmen dieses Artikels sprengt, k\u00f6nnen Interessierte die Details einsehen. <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/495112\/\"><i>hier<\/i><\/a><\/noindex><i>.)<\/i> Daher, nachdem wir uns entschieden haben, zu einem effizienteren Ansatz f\u00fcr das Tagging (content-based tagging) \u00fcberzugehen, mussten wir auch die Implementierung der Image-Bereinigung \u00fcberdenken.<\/p>\n<h3>Ein neuer Algorithmus<\/h3>\n<p>\nWarum? Beim Tagging im Rahmen des content-based Ansatzes kann jedes Tag mehrere Commits in Git erf\u00fcllen. Bei der Image-Bereinigung kann man nicht l\u00e4nger <i>nur<\/i> vom Commit ausgehen, bei dem das neue Tag ins Repository hinzugef\u00fcgt wurde.<\/p>\n<p>F\u00fcr den neuen Algorithmus zur Bereinigung wurde beschlossen, von Tagging-Schemata abzusehen und <strong>den Prozess auf Meta-Images aufzubauen,<\/strong>die jeweils eine Verkn\u00fcpfung enthalten aus:<\/p>\n<ul>\n<li>Der Commit, in dem das Bild ver\u00f6ffentlicht wurde (unabh\u00e4ngig davon, ob das Bild im Container-Registry hinzugef\u00fcgt, ge\u00e4ndert oder beibehalten wurde);<\/li>\n<li>und unserer internen Identifikation, die dem erstellten Bild entspricht.<\/li>\n<\/ul>\n<p>\nMit anderen Worten wurde sichergestellt, <strong>dass die ver\u00f6ffentlichten Tags mit den Commits in Git verbunden sind.<\/strong>.<\/p>\n<h3>Die endg\u00fcltige Konfiguration und der allgemeine Algorithmus<\/h3>\n<p>\nBenutzern stehen beim Konfigurieren der Bereinigung Richtlinien zur Verf\u00fcgung, die zur Auswahl der aktuellen Bilder verwendet werden. Jede dieser Richtlinien wird definiert durch:<\/p>\n<ul>\n<li>eine Vielzahl von References, d.h. Git-Tags oder Git-Branches, die w\u00e4hrend des Scannens verwendet werden;<\/li>\n<li>und ein Limit der gesuchten Bilder f\u00fcr jedes Reference aus der Menge.<\/li>\n<\/ul>\n<p>\nZur Veranschaulichung \u2014 so k\u00f6nnte die Standardkonfiguration der Richtlinien aussehen:<\/p>\n<pre><code class=\"plaintext\">cleanup:\n  keepPolicies:\n  - references:\n      tag: \\\/.*\\\/\n      limit:\n        last: 10\n  - references:\n      branch: \\\/.*\\\/\n      limit:\n        last: 10\n        in: 168h\n        operator: And\n    imagesPerReference:\n      last: 2\n      in: 168h\n      operator: And\n  - references:  \n      branch: \\\/^(main|staging|production)$\\\/\n    imagesPerReference:\n      last: 10\n<\/code><\/pre>\n<p>\nDiese Konfiguration enth\u00e4lt drei Richtlinien, die den folgenden Regeln entsprechen:<\/p>\n<ol>\n<li>Das Bild f\u00fcr die letzten 10 Git-Tags (nach dem Erstellungsdatum des Tags) zu behalten.<\/li>\n<li>Speichern Sie maximal 2 Images, die in der letzten Woche ver\u00f6ffentlicht wurden, f\u00fcr nicht mehr als 10 Branches mit Aktivit\u00e4t in der letzten Woche.<\/li>\n<li>Speichern Sie 10 Images f\u00fcr Branches. <code>main<\/code>, <code>staging<\/code> und <code>production<\/code>.<\/li>\n<\/ol>\n<p>\nDer endg\u00fcltige Algorithmus umfasst die folgenden Schritte:<\/p>\n<ul>\n<li>Abrufen der Manifeste aus dem Container-Registry.<\/li>\n<li>Ausnehmen von Images, die in Kubernetes verwendet werden, da diese bereits ausgew\u00e4hlt wurden, indem wir die K8s-API abgefragt haben.<\/li>\n<li>Durchsuchen der Git-Historie und Ausschlie\u00dfen von Images gem\u00e4\u00df festgelegten Richtlinien.<\/li>\n<li>L\u00f6schen der verbleibenden Images.<\/li>\n<\/ul>\n<p>\nZur\u00fcckblickend auf unsere Abbildung, so sieht es mit werf aus:<\/p>\n<p><img decoding=\"async\" alt=\"Das Problem der &quot;intelligenten&quot; Bereinigung von Container-Images und seine L\u00f6sung in werf\" src=\"\/wp-content\/uploads\/2020\/10\/c453092dca23860a0dda604843845507.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSelbst wenn Sie werf nicht verwenden, kann ein \u00e4hnlicher Ansatz zur fortgeschrittenen Bereinigung von Images \u2013 in einer oder anderen Implementierung (gem\u00e4\u00df dem bevorzugten Tagging-Ansatz f\u00fcr Images) \u2013 auch in anderen Systemen\/Dienstprogrammen angewendet werden. Es gen\u00fcgt, sich der auftretenden Probleme bewusst zu sein und die M\u00f6glichkeiten in Ihrem Stack zu finden, die eine nahtlose Integration ihrer L\u00f6sungen erm\u00f6glichen. Wir hoffen, dass unser Weg Ihnen hilft, auch Ihre speziellen F\u00e4lle mit neuen Details und Gedanken zu betrachten.<\/p>\n<h2>Fazit<\/h2>\n<p><\/p>\n<ul>\n<li>Fr\u00fcher oder sp\u00e4ter sieht sich die Mehrheit der Teams mit dem Problem der \u00dcberlastung des Registries konfrontiert. <\/li>\n<li>Bei der Suche nach L\u00f6sungen sollten zun\u00e4chst die Kriterien f\u00fcr die Relevanz des Abbilds festgelegt werden.<\/li>\n<li>Die von beliebten Container-Registry-Diensten angebotenen Tools erm\u00f6glichen eine sehr einfache Bereinigung, die die \"\u00e4u\u00dfere Welt\" nicht ber\u00fccksichtigt: Abbilder, die in Kubernetes verwendet werden, sowie die spezifischen Arbeitsabl\u00e4ufe im Team.<\/li>\n<li>Ein flexibler und effektiver Algorithmus sollte ein Verst\u00e4ndnis f\u00fcr CI\/CD-Prozesse haben und nicht nur mit Docker-Abbilddaten operieren.<\/li>\n<\/ul>\n<p><\/p>\n<h2>P.S.<\/h2>\n<p>\nLesen Sie auch in unserem Blog:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/495112\/\">Content-basiertes Tagging im Werfer: Warum und wie funktioniert das?<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/476646\/\">3-Wege-Merge im Werfer: Deployment in Kubernetes mit Helm 'auf Steroiden'<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/465131\/\">Unterst\u00fctzung von Monorepo und Multirepo im Werfer und was Docker Registry damit zu tun hat.<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/493170\/\">Release von Werfer 1.1: Verbesserungen im heutigen Werfer und Pl\u00e4ne f\u00fcr die Zukunft.<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/522024\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u043a\u0430 \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0440\u0435\u0435\u0441\u0442\u0440\u0430\u0445 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 (Docker Registry \u0438 \u0435\u0433\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0430\u0445) \u0432 \u0440\u0435\u0430\u043b\u0438\u044f\u0445 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 CI\/CD-\u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u043e\u0432 \u0434\u043b\u044f cloud native-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u0432 Kubernetes. \u041f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0438 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u0438 \u0432\u044b\u0442\u0435\u043a\u0430\u044e\u0449\u0438\u0435 \u0438\u0437 \u043d\u0438\u0445 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0447\u0438\u0441\u0442\u043a\u0438, \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043c\u0435\u0441\u0442\u0430 \u0438 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044f\u043c \u043a\u043e\u043c\u0430\u043d\u0434. \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e Open Source-\u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043c\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c, \u043a\u0430\u043a \u044d\u0442\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":96066,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-96065","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=\"\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u043a\u0430 \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0440\u0435\u0435\u0441\u0442\u0440\u0430\u0445 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 (Docker Registry \u0438 \u0435\u0433\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0430\u0445) \u0432 \u0440\u0435\u0430\u043b\u0438\u044f\u0445 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 CI\/CD-\u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u043e\u0432 \u0434\u043b\u044f cloud native-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u0432 Kubernetes. \u041f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0438 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u0438 \u0432\u044b\u0442\u0435\u043a\u0430\u044e\u0449\u0438\u0435 \u0438\u0437 \u043d\u0438\u0445 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0447\u0438\u0441\u0442\u043a\u0438, \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043c\u0435\u0441\u0442\u0430 \u0438 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044f\u043c \u043a\u043e\u043c\u0430\u043d\u0434. \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e Open Source-\u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043c\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c, \u043a\u0430\u043a \u044d\u0442\u0438\" \/>\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\/problema-umnoj-ochistki-obrazov-kontejnerov-i-eyo-reshenie-v-werf\" \/>\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\udd47\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u00ab\u0443\u043c\u043d\u043e\u0439\u00bb \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0438 \u0435\u0451 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0432 werf | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u043a\u0430 \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0440\u0435\u0435\u0441\u0442\u0440\u0430\u0445 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 (Docker Registry \u0438 \u0435\u0433\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0430\u0445) \u0432 \u0440\u0435\u0430\u043b\u0438\u044f\u0445 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 CI\/CD-\u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u043e\u0432 \u0434\u043b\u044f cloud native-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u0432 Kubernetes. \u041f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0438 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u0438 \u0432\u044b\u0442\u0435\u043a\u0430\u044e\u0449\u0438\u0435 \u0438\u0437 \u043d\u0438\u0445 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0447\u0438\u0441\u0442\u043a\u0438, \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043c\u0435\u0441\u0442\u0430 \u0438 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044f\u043c \u043a\u043e\u043c\u0430\u043d\u0434. \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e Open Source-\u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043c\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c, \u043a\u0430\u043a \u044d\u0442\u0438\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/problema-umnoj-ochistki-obrazov-kontejnerov-i-eyo-reshenie-v-werf\" \/>\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-10-07T11:42:09+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-10-07T11:42:09+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\udd47Das Problem der \"intelligenten\" Bereinigung von Container-Images und dessen L\u00f6sung in werf | ProHoster","description":"In diesem Artikel wird das Problem der Bereinigung von Images behandelt, die in den Registries von Containern (Docker Registry und deren Alternativen) in modernen CI\/CD-Pipelines f\u00fcr cloud-native Anwendungen, die in Kubernetes bereitgestellt werden, gesammelt werden. Die wichtigsten Kriterien f\u00fcr die Relevanz von Images und die sich daraus ergebenden Herausforderungen bei der Automatisierung der Bereinigung, dem Sparen von Speicherplatz und dem Erf\u00fcllen der Bed\u00fcrfnisse der Teams werden aufgezeigt. Schlie\u00dflich zeigen wir am Beispiel eines konkreten Open-Source-Projekts auf, wie diese","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/problema-umnoj-ochistki-obrazov-kontejnerov-i-eyo-reshenie-v-werf","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\udd47\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u00ab\u0443\u043c\u043d\u043e\u0439\u00bb \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0438 \u0435\u0451 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0432 werf | ProHoster","og:description":"\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u043a\u0430 \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0440\u0435\u0435\u0441\u0442\u0440\u0430\u0445 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 (Docker Registry \u0438 \u0435\u0433\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0430\u0445) \u0432 \u0440\u0435\u0430\u043b\u0438\u044f\u0445 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 CI\/CD-\u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u043e\u0432 \u0434\u043b\u044f cloud native-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u0432 Kubernetes. \u041f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0438 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u0438 \u0432\u044b\u0442\u0435\u043a\u0430\u044e\u0449\u0438\u0435 \u0438\u0437 \u043d\u0438\u0445 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0447\u0438\u0441\u0442\u043a\u0438, \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043c\u0435\u0441\u0442\u0430 \u0438 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044f\u043c \u043a\u043e\u043c\u0430\u043d\u0434. \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e Open Source-\u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043c\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c, \u043a\u0430\u043a \u044d\u0442\u0438","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/problema-umnoj-ochistki-obrazov-kontejnerov-i-eyo-reshenie-v-werf","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-10-07T11:42:09+00:00","article:modified_time":"2020-10-07T11:42:09+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"96065","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 10:52:24","updated":"2022-10-01 08:58:07"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/96065","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=96065"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/96065\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/96066"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=96065"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=96065"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=96065"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}