GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So entlasten Sie Ihre Container Registry mit Quay.io

In diesem Beitrag zeige ich Ihnen, wie Sie Container-Images mit Quay.io hosten und wie Sie eine Überlastung Ihrer Containerregistrierung vermeiden, indem Sie unnötige Anforderungen für Images einschränken. Ich verwende Buildah, Skopeo und Quay.io, aber die Tipps zur Begrenzung von Image-Pulls funktionieren mit jeder Containerregistrierung, die Sie möglicherweise verwenden.

Ende November 2020 begann Docker Hub damit, die Anzahl der Container-Images zu drosseln oder zu begrenzen, die Sie anonym oder als Free Docker Hub abrufen konnten Benutzer. Wenn Sie ein anonymer sind Benutzer können Sie in einem Zeitraum von 6 Stunden nur 100 Container-Images abrufen. Wenn Sie ein Free Docker Hub-Benutzer sind, können Sie 200 Container-Images in einem beliebigen Zeitraum von 6 Stunden abrufen.

Wenn wir unsere Funktionstests der Container-Tools durchführen, an denen wir arbeiten, wie Buildah und Podman, ist diese Grenze im Allgemeinen kein Problem. Wenn Sie beispielsweise ein Container-Image mit einer Containerdatei erstellen und dann den resultierenden Container testen, um zu sehen, wie er sich verhält, nachdem Sie bestimmte Befehle darauf ausgeführt haben, ziehen Sie im Allgemeinen das Haupt-Container-Image, das in FROM Anweisung in der Containerdatei einmal. Wenn Sie den Container später von Grund auf neu erstellen, verwenden Sie normalerweise das bereits heruntergezogene Container-Image erneut und treffen daher nicht auf den Zähler. In diesem Szenario verursacht die Drosselung keine Schmerzen, aber ich habe sie immer im Hinterkopf.

Anfängliche Reduzierung der Docker-Hub-Interaktionen

Wir haben jedoch eine Stelle gefunden, an der wir auf Docker Hub auf Drosselung gestoßen sind. Ed, mein Kollege und einer der QE-Leads der Container-Engine, hat dafür einen sehr netten Workaround geschaffen. Zunächst ein wenig Hintergrund. Vor einigen Monaten reduzierte Ed die Häufigkeit, mit der wir die Container-Images abgerufen haben, die die Buildah Continuous Integration (CI)-Tests verwenden, indem er den Cache wiederverwendete, den Podman bereits erstellt hatte. Davor hat die Buildah CI das arme alpine missbraucht Container-Image, das sich im Docker Hub unter docker.io/library befindet ohne Ende, zusammen mit dem fedora , busybox , und ein paar andere sortierte Container-Images, die sie unzählige Male ziehen. Dieses Prefetching-Schema, das Ed ausgearbeitet hat, beschleunigte nicht nur unsere Tests, sondern ermöglichte es uns auch, die Bandbreite zu reduzieren, die wir auf Docker Hub verwendeten.

Trotz dieser Änderungen begann das Buildah CI im November mehrmals täglich mit diesem Fehler zu versagen:Sie haben Ihr Abrufratenlimit erreicht . Das Erreichen des Ratenlimits war darauf zurückzuführen, wie oft unsere CI-Tests jeden Tag ausgeführt wurden. Obwohl das Prefetching die Anzahl der Male verringert hatte, die das Buildah-CI zum Abrufen der Bilder benötigte, stieß das CI immer noch auf die Docker-Hub-Drosselung.

[Vielleicht möchten Sie auch lesen: So implementieren Sie eine einfache persönliche/private Linux-Container-Image-Registrierung für den internen Gebrauch]

Drosselung lösen

Die von Ed bereitgestellte Lösung nutzt die Flexibilität von Buildah und die Container-Tools im Containers-Repository auf GitHub. Zunächst erstellte Ed ein kostenloses Konto auf quay.io, kopierte dort Bilder und veröffentlichte sie. Ed hat sich für quay.io entschieden, weil wir dort viele unserer Container-Images speichern und es praktisch für uns ist. Dennoch könnte es sich um ein lokales Container-Image-Repository oder das Repository eines anderen Unternehmens handeln.

Als Bonus wird quay.io nicht wie Docker Hub gedrosselt.

Mit Skopeo das Ausgangsbild kopieren

Angenommen, Ihr Projekt erfordert den alpine und centos:8 Bilder. Sie würden damit beginnen, ein kostenloses Konto bei quay.io mit dem Namen myquayaccountname zu erstellen . Auf einem Host, auf dem Skopeo installiert ist, würden Sie dann Folgendes ausführen:

skopeo login -u myquayaccountname quay.io
skopeo copy --all docker://docker.io/library/alpine:latest docker://quay.io/myquayaccountname/alpine:latest

Wiederholen Sie dann den Vorgang und ersetzen Sie dabei alpine:latest mit centos:8 , und so weiter für alle benötigten Bilder.

quay.io konfigurieren

Die Bilder befinden sich jetzt auf quay.io, sind aber standardmäßig privat. Um sie öffentlich zu machen, melden Sie sich wieder bei der Web-Benutzeroberfläche von quay.io an und klicken Sie auf die Namen der einzelnen Bilder. Dadurch gelangen Sie zu einer neuen Seite mit Bilddetails. Klicken Sie unten in der linken Navigationsleiste auf das Zahnradsymbol und suchen Sie nach Öffentlich machen Taste, und drücken Sie sie. Sie müssen OK bestätigen und dann für alle Bilder wiederholen, die ein rosa Schlosssymbol zeigen.

In unserem Fall hat Ed als Erstes die Container-Images, die wir verwenden, aus Docker Hub gezogen und sie in das von ihm erstellte libpod-Container-Image-Repository auf quay.io gestellt.

registries.conf für die Spiegelung konfigurieren

Wir haben das Problem der Drosselung gelöst, indem wir diese Bilder verschoben haben. Wir hatten jetzt jedoch das Problem, die Hunderte, wenn nicht Tausende der Referenzen der Tests auf diese Bilder zu ändern, sodass das CI von quay.io/libpod abrufen würde statt docker.io/library . Diese notwendige Änderung war ein perfektes Beispiel für die Flexibilität, die die Container-Tools bieten. Ed hat dies mit einer relativ kleinen Änderung in der Konfiguration behoben, anstatt alle Tests global zu ändern.

Hier ist, was Ed ausgearbeitet hat. Wenn Buildah nach einem Container-Image sucht, ist es nicht fest codiert, es einfach von docker.io abzurufen. Stattdessen liest es die /etc/containers/registries.conf und bestimmt, aus welchem ​​Container-Image-Repository Buildah ziehen soll.

Ed hat diese Datei einfach so geändert, dass quay.io/libpod wird jedes Mal kontaktiert, wenn die Tests nach docker.io/library suchen . In unserem obigen Beispiel würden Sie die folgenden Zeilen an /etc/containers/registries.conf anhängen auf allen Systemen, auf denen Sie Ihren Cache verwenden möchten:

toml
[[registry]]
prefix=" docker.io/library"
location=" quay.io/myquayaccountname"

Alle nachfolgenden podman pull alpine Befehle werden von Ihrem Spiegel abgerufen. Sie können die Änderung, die Ed für Podman vorgenommen hat, hier in diesem Pull-Request sehen.

Um die Spiegelungsfähigkeiten im Container/Image-Projekt, das Buildah verwendet, weiter hervorzuheben, können Sie einen Spiegel für Container-Images festlegen, der es Ihnen ermöglicht, mit dem alten Namen aus einer anderen Registrierung zu ziehen. Die Spiegelung wurde ursprünglich hinzugefügt, um nicht verbundene Umgebungen zu unterstützen. Umgebungen ohne Internetverbindung, in denen Software wie OpenShift ausgeführt wird, können oft keine Images von nicht lokalen Registrierungen abrufen, daher ermöglichen wir Benutzern, die Images in internen Registrierungen zu spiegeln, ohne die Software ändern zu müssen.

Hier ist ein Ausschnitt mit weiteren Informationen aus der containers-registries.conf Datei, die Teil des container/image ist Projekt:

$ man containers-registries.conf

   Remapping and mirroring registries
       The user-specified image reference is, primarily, a "logical" image  name,  always
       used for naming the image.  By default, the image reference also directly specifies
       the registry and repository to use, but the following options can be used to  redi‐
       rect  the  underlying  accesses to different registry servers or locations (e.g., to
       support configurations with no access to the  internet  without  having  to  change
       Dockerfiles, or to add redundancy).

Warnhinweise :Dieses Verfahren erstellt eine einmalige Kopie der Container-Images. Ihr zwischengespeichertes Image wird Sicherheitsfixes, die auf docker.io übertragen werden, nicht auf magische Weise aufnehmen. (Auch zufälliger Vandalismus wie entfernte Binärdateien oder andere Breaking Changes werden nicht erfasst – lassen Sie mich nicht anfangen.)

Weitere Arbeiten

Angesichts der Einschränkung liegt die Bildpflege jetzt bei Ihnen, und Sie könnten erwägen, die Skopeo-Befehle zum Kopieren des Bildes zu Beginn Ihres Testverfahrens hinzuzufügen. Eine weitere mögliche Problemumgehung besteht darin, einen öffentlichen Spiegel wie die Google Cloud Registry (GCR) zu aktivieren oder möglicherweise die registries.conf weiter zu verfeinern Datei zum Einrichten mehrerer Spiegel. Besser noch, dies passt wahrscheinlich hervorragend zum Befehl skopeo-sync, da es eine nette CLI hat und mit einer YAML-Datei verwendet werden kann, die eine breite Palette von Konfigurationsoptionen bietet.

[ Erste Schritte mit Containern? Schauen Sie sich diesen kostenlosen Kurs an. Containerisierte Anwendungen bereitstellen:Eine technische Übersicht. ]

Abschluss

Es gibt verschiedene Möglichkeiten, die eingeführte Drosselung des Docker-Hubs zu lösen, aber die von Ed verwendete Methode war schnell, schmerzlos und brachte unser CI schnell wieder online. Jetzt, da wir etwas Luft zum Atmen haben, können wir an einer umfassenderen Lösung arbeiten.

Mit dieser Änderung laufen die Buildah-Tests nicht mehr über das Limit und werden von Docker Hub gedrosselt, sodass das Drosselungsproblem gelöst ist.


Linux
  1. So ändern Sie die Farbe Ihres Linux-Terminals

  2. So analysieren und vergleichen Sie Container-Images mit Container-Diff

  3. So verwalten Sie Linux-Containerregistrierungen

  4. So sichern Sie Ihre Site mit dem persönlichen FTP-Repository

  5. So sichern und wiederherstellen Sie Ihre Website mit dem LCN-Sicherungsdienstprogramm

So überprüfen Sie Ihre Serverlast unter Linux

So testen Sie Ihre Verbindungsgeschwindigkeit über das Terminal mit Speedtest

So konvertieren Sie JPG-Bilder mit dem Terminal in PDF

So pushen und ziehen Sie Docker-Images mit der Container Registry von DigitalOcean

So überprüfen Sie Ihre Serverlast im Linux-System

So löschen Sie ausgewählten Text im vi-Editor