Docker Hub Rate Limit Monitoring mit Prometheus

Montag, 15.5.2023

Helm chart to monitor your Docker Hub rate limit quota with a Prometheus exporter

Sie suchen eine einfache Möglichkeit, die Docker Hub Limits zu überwachen und rechtzeitig reagieren zu können? Zum Beispiel bevor Ihr Kubernetes Cluster keine Images mehr laden kann?

Wir zeigen Ihnen, wie der docker-hub-rate-limit-exporter funktioniert und wie Sie ihn in Ihrem Kubernetes Cluster installieren können.

Vor Kurzem hat Docker eine Begrenzung für die Docker Hub Image Registry eingeführt. Sie limitiert unauthentifizierte Docker Pull Requests auf 100 Requests pro 6 Stunden und authentifizierte Requests von einem kostenlosen Account auf 200 Requests pro 6 Stunden (siehe hier).

Obwohl es viele Möglichkeiten gibt, die Auswirkungen dieser Einschränkungen auf den Entwicklungszyklus und die Infrastruktur zu mildern, brauchen wir eine Möglichkeit, die verfügbaren Anfragen für unsere Infrastruktur zu überwachen. Gitlab hat eine einfache Lösung in einem Blogpost veröffentlicht.

Wir sind einen Schritt weiter gegangen und haben ein Docker Image und ein Helm Chart auf Basis ihres Skripts erstellt. Mit beiden können Sie ganz einfach das Skript docker-hub-rate-limit-exporter in Ihrem Kubernetes-Cluster installieren.

Es ist übrigens Open Source und Sie können den gesamten Code auf GitHub finden.

Klick image to enlarge

Das Helm-Chart unterstützt die Überwachung sowohl von nicht-authentifizierten als auch authentifizierten Anfragen an Docker Hub und bietet eine einfache Integration mit dem Prometheus Kubernetes Operator. Wenn Sie die hier beschriebenen Schritte befolgen, erhalten Sie ein Grafana Dashboard, mit dem Sie Ihre verbleibenden Docker Hub Pull Requests überwachen können, wie in der Abbildung oben dargestellt.

DAS PROBLEM

Wenn Sie Ihr Docker Hub Rate Limit überschreiten, werden Sie beim nächsten Versuch, einen Docker Pull Request zu senden, mit einer der folgenden Fehlermeldungen begrüßt:

ERROR: toomanyrequests: Too Many Requests.

oder

You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limits.

Um nicht von diesen Fehlermeldungen überrascht zu werden, empfehlen wir den Einsatz einer Überwachungslösung wie unten beschrieben.

VORAUSSETZUNGEN

Diese Anleitung setzt voraus, dass Sie über ein laufendes Kubernetes Cluster mit installiertem Prometheus Operator und Grafana verfügen. Außerdem benötigen Sie ausreichende Berechtigungen, um Helm-Releases in Ihrem Kubernetes Cluster zu erstellen.

INSTALLATION DES HELM-CHARTS

Um das Helm Chart in Ihrem Cluster zu installieren, führen Sie einfach die folgenden Befehle aus:

$ git clone https://github.com/viadee/docker-hub-rate-limit-exporter.git
$ helm install docker-hub-rate-limit-exporter/chart --namespace=<desired namespace>

Dadurch wird ein Helm-Release mit dem Namen "docker-hub-rate-limit-exporter" im angegebenen Namensraum erstellt. Sie können überprüfen, ob alles korrekt funktioniert, indem Sie eine Port-Weiterleitung für den erstellten Pod einrichten:

$ kubectl port-forward 8080:80 -n <namespace>

Sobald die Port-Weiterleitung konfiguriert ist, können Sie Ihren Browser öffnen und zu http://localhost:8080 navigieren. Hier finden Sie eine Reihe von Standardmetriken sowie zwei Metriken, die Ihrem Docker Hub-Ratenlimit entsprechen. Diese sind:

  • max_requests_total: Die maximale Anzahl der Anfragen, die Sie innerhalb des 6-Stunden-Zeitrahmens durchführen dürfen.
  • remaining_requests_total: Die verbleibenden Anfragen, basierend auf Ihrem Limit und den bereits gesendeten Anfragen. Wenn diese Zahl Null erreicht, sind Sie im aktuellen Zeitrahmen ratenbegrenzt.

 

KONFIGURIEREN DES PROMETHEUS SERVICE MONITOR

Als Nächstes müssen wir unserer Prometheus-Instanz mitteilen, dass sie die Metriken, die von der Bereitstellung im Helm-Diagramm angezeigt werden, auslesen soll. Dazu können wir die benutzerdefinierte Ressource ServiceMonitor verwenden, die mit dem Kubernetes-Prometheus-Operator geliefert wird. Seit Version 1.4 dieses Helm-Diagramms kann der ServiceMonitor als Teil des Diagramms konfiguriert werden. Um ihn zu aktivieren, erstellen Sie die folgende value.yaml-Datei:

 

 

Installieren Sie anschließend das Helm Chart mit der Datei value.yaml auf Ihrem Cluster, indem Sie den folgenden Befehl ausführen:

$ helm upgrade docker-hub-rate-limit-exporter/chart -f values.yaml --namespace=<desired namespace> --install

Wenn Sie das Helm Chart in einer Version unter 1.4 verwenden, müssen Sie die benutzerdefinierte Ressource ServiceMonitor manuell erstellen:

 

 

Speichern Sie den obigen Code in einer Datei namens serviceMonitor.yaml und wenden Sie ihn mit dem folgenden Befehl auf Ihren Kubernetes-Cluster an:

$ kubectl apply -f serviceMonitor.yaml -n <your namespace>

Wenn Sie den ServiceMonitor in denselben Namespace wie Ihr Helm-Release installieren möchten, können Sie den NamespaceSelector-Block im Manifest weglassen. Andernfalls müssen Sie zusätzlich den Namespace angeben, in den Ihr Helm-Release installiert wurde. Außerdem müssen Sie Ihrem ServiceMonitor in Abhängigkeit von Ihrer Prometheus-Konfiguration möglicherweise weitere Labels hinzufügen.

 

DOCKER HUB CREDENTIALS KONFIGURIEREN

Wenn Sie ein Docker-Hub-Konto haben und es zum Abrufen von Images aus der Registry verwenden, müssen Sie das Helm-Diagramm auch mit diesen Anmeldeinformationen konfigurieren. Andernfalls wird nur das unauthentifizierte Ratenlimit Ihrer IP-Adresse überwacht und nicht das Limit Ihres Docker-Hub-Kontos. Sie können das Helm-Diagramm für die Verwendung Ihrer Docker-Anmeldeinformationen konfigurieren, indem Sie zusätzliche Parameter angeben:

$ helm upgrade docker-hub-rate-limit-exporter/chart -f values.yaml --namespace=<desired namespace> --install \ 
–-set config.dockerhubUsername=<you dockerhub username> \
–-set config.dockerhubPassword=<Your dockerhub access token>

 Alternativ können Sie die Konfiguration zur values.yaml-Datei von oben hinzufügen (oder eine neue values.yaml-Datei erstellen, wenn Sie eine Version unter 1.4 verwenden):

und installieren Sie das Helm Release in Ihrem Cluster mit dem folgenden Befehl:

$ helm upgrade docker-hub-rate-limit-exporter/chart -f values.yaml --namespace=<desired namespace> --install

 

ERSTELLEN DES GRAFANA-DASHBOARDS

 Zum Schluss müssen wir ein Grafana-Dashboard konfigurieren, um die verbleibende Docker Hub-Rate zu visualisieren. Gitlab hat zu diesem Zweck ein hübsches Dashboard erstellt, das hier verwendet werden kann. Die Konfiguration des Dashboards finden Sie hier.

Kopieren Sie einfach den Inhalt der verlinkten Datei und erstellen Sie ein neues Grafana Dashboard. Führen Sie dazu die folgenden Schritte aus:

  1. Navigieren Sie zu Ihrer Grafana-Instanz.
  2. Klicken Sie auf Dashboards und dann auf Importieren.
  3. Fügen Sie das kopierte Dashboard json ein und klicken Sie auf Laden.

Herzlichen Glückwunsch, Sie sind bereit, Ihr Docker Hub-Ratenlimit zu überwachen!

Besuchen Sie das GitHub-Repository und machen Sie mit. Es ist Open Source und bereit, jedem da draußen zu helfen.

Go to GitHup repository

 


zurück zur Blogübersicht

Diese Beiträge könnten Sie ebenfalls interessieren

Keinen Beitrag verpassen – viadee Blog abonnieren

Jetzt Blog abonnieren!

Kommentare

Marius Stein

Marius Stein

Marius Stein ist IT-Berater bei der viadee und Teil des Kompetenzbereichs Cloud-Architekturen. Sein Schwerpunkt liegt auf der Entwicklung und dem Betrieb von skalierbaren, zuverlässigen und sicheren Cloud-Native-Lösungen. Marius Stein bei LinkedIn