GitLab CI/CD vs. Hitze: Wie ein Hardwarefehler CI/CD Jobs sabotierte

In meinem Homelab Kubernetes (k8s) Cluster läuft seit kurzem ein ROCK 5 A als Node. Darauf werden beispielsweise Gitlab CI Jobs mit Container Builds (Buildah, Kaniko) ausgeführt. Eine ungewöhnlich hohe Fehlerrate im CI/CD System hat sich nach einigem Debugging und umfassender Fehlersuche als Hardware Fehler entpuppt. Nach mehreren Jahren Erfahrung mit Gitlab CI war das für mich einer der „verrücktesten“ Bugs.

Fehlerbeschreibung

Die Gitlab CI Jobs werden in einem Kubernetes Cluster über den Gitlab Runner Kubernetes executor ausgeführt. Für native arm64-Builds dient unter anderem ein ROCK 5 A als Node im Cluster.

Von Anfang an traten in meinen CI Jobs sporadische Fehler auf – bei TLS-Verbindungen, Layer-Caching, Kompression, Dekompression sowie beim Container-Pull/Push. Aufgrund des Teststatus und der kontinuierlichen Optimierung verschiedener Einstellungen in den CI Jobs und im Gitlab Runner nahm ich an, dass die sporadischen Fehler durch Fehlkonfigurationen oder unzureichende Ressourcen, wie zu wenig Arbeitsspeicher, verursacht werden könnten.

Im Rahmen weiterer Stabilisierungsmaßnahmen habe ich daher insbesondere die Ressourcen Requests und Limits überprüft und angepasst. Immer wieder gab es Phasen, in denen alles reibungslos funktionierte, bis plötzlich erneut verschiedene Fehler auftraten.

Auch Fehlermeldungen im Zusammenhang mit TLS/SSL bzw. HTTPS-Verbindungen ließen vermuten, dass es ein Problem mit der Netzwerk- oder Internetverbindung geben könnte. Eine erste Analyse des Traffics mit Wireshark zeigte jedoch keine Auffälligkeiten. Da die meisten Fehler nur auf dem arm64-Node auftraten, vermutete ich ein Problem im Zusammenhang mit der arm64-CPU-Architektur.

Erst ein paralleler Test mit verschiedenen Build-Tools wie Buildah und Skopeo brachte auffällige Ergebnisse – beide Tools erzeugten fast identische sporadische Fehlerbilder.

Verschiedene Fehlerbilder im Detail

tls: bad record MAC

error verifying sha256 checksum after reading x bytes; got „sha256:x“, want „sha256:y“

error building image: error building stage: failed to get filesystem from image: error reading tar 3: archive/tar: invalid tar header

DIGEST_INVALID: provided digest did not match uploaded content; map[Digest:sha256:x Reason:map[]]

Fatal error init error: DB error: failed to download vulnerability DB: database download error: oci download error: copy error: error verifying sha256 checksum after reading 54016433 bytes; got „sha256:x“, want „sha256:y“

Systemtest

Um Hardwareprobleme zu identifizieren, habe ich die CPU mit stress-ng im Verify-Mode getestet. Dabei zeigten einige Cores deutliche Fehler.

Stresstest der CPU mit stress-ng im verify mode

Es traten zahlreiche Rechenfehler auf, wie ungenaue Berechnungen von Konstanten oder fehlerhafte Quadratwurzeln.

Als Workaround habe ich die fehlerhaften Cores temporär deaktiviert. Zeitweise konnten dadurch die Fehler in den CI Jobs verhindert werden.

Später traten trotz deaktivierter Cores erneut Fehler auf.

Überwachen der CPU Temperatur mit lm-sensors

Im nächsten Schritt habe ich alle Cores wieder aktiviert und während des Stresstests die CPU-Temperatur mit dem Paket lm-sensors überwacht.

Die CPU-Temperatur stieg teilweise auf über 80°C, was theoretisch noch im zulässigen Bereich liegt. Dennoch konnte ich ab Temperaturen von etwa 70-80°C eine Zunahme der fehlerhaften Rechenoperationen beobachten.

The SoC (RK3588S) is specified to limit its maximum internal temperature to 80°C before
throttling the clock speeds to maintain reliability within the allowed temperature range. If
the ROCK 5A is intended to be used continuously in high performance applications, it may
be necessary to use external cooling methods (for example, heat sink, fan, etc.) which will
allow the SoC to continue running at maximum clock speed indefinitely below its prede‑
fined 80°C peak temperature limiter.

Quelle: https://docs.rs-online.com/a9f0/A700000010117420.pdf

Ein erneuter Stresstest mit einem zusätzlichen externen Lüfter senkte die SoC-Temperatur auf unter 50°C, und die Fehler verschwanden vollständig.

Fazit

Offenbar funktioniert mein ROCK 5 A zwar innerhalb der angegebenen Temperaturspezifikation, aber zusätzliche Kühlung ist erforderlich, um ein fehlerfreies Arbeiten zu gewährleisten. Der Fehler war besonders interessant, da er auf den ersten Blick nicht auf ein Hardwareproblem hindeutete und die resultierenden Fehlermeldungen sehr unspezifisch waren.

Hinterlasse einen Kommentar

de_DEGerman