Wir unterziehen unsere OpenShift Cluster vielen Tests im weitesten Sinne: Monitoring, Health Checks, Lasttests, Sicherheitsprüfungen und Schwachstellenscans, zum Beispiel. Dennoch begegne ich immer wieder Testfällen, die damit noch nicht abgedeckt sind. In vielen Fällen drehen sie sich um den Verwendungszweck des Clusters oder darum, wie die für ihn verantwortliche Organisation aufgebaut ist. Manchmal gibt es keine objektiv richtige oder falsche Antwort, keinen offensichtlichen Rückgabewert, den man im Test überprüfen kann. Ich möchte anhand von drei Beispielen zeigen, weshalb mir diese Tests sinnvoll erscheinen, und außerdem einen Weg vorstellen, sie mit minimalem Aufwand automatisiert auszuführen .
Beim ersten Beispiel geht es um die OpenShift Voreinstellung, nach der alle angemeldeten Nutzer Projekte erstellen (genauer, bestellen) können. Nehmen wir an, wir haben uns entschlossen, dies nicht zuzulassen. Wie stellen wir sicher, dass unser Cluster dieser Regel entspricht?
Stellen wir uns zweitens vor, dass unsere Architektur eine über drei Rechenzentren verteilte Applikation vorsieht, um Hochverfügbarkeit zu gewährleisten. Wir benötigen einen Test der prüft, ob die Infrastruktur dieser Anforderung entspricht.
Das dritte Beispiel versetzt uns in folgende Situation: Wir haben gerade einen längeren ungeplanten Ausfall erlitten. Die Verbindung zwischen zwei Projekten war unterbrochen. Natürlich konzentrieren wir uns zunächst auf die Behebung des Fehlers, aber im nächsten Schritt benötigen wir einen Test, der sicherstellt, dass diese Fehlkonfiguration des Pod Netzwerks nicht noch einmal vorkommt.
Diese drei Szenarien haben einiges gemeinsam. Die Tests erfordern direkten Lesezugriff auf die zentrale etcd Datenbank. Dies allein bedeutet, dass es sich um rechnerisch und netzwerktechnisch teure Tests handelt. Wir sprechen eher von täglichen als stündlichen Tests, nach Möglichkeit zu Schwachlastzeiten. Diese Tests sind besonders hilfreich nach Wartungsarbeiten oder einem Upgrade des Clusters. Wir kehren gleich zu ihnen zurück.
Wie lange dauert es, Tests wie diese aufzusetzen? In den meisten Fällen gar nicht lange. Falls wir nach Inspiration suchen, hilft gewöhnlich ein Blick in das Betriebshandbuch oder die Architekturdokumentation. Diese Tests zu schreiben sollte allen OpenShift Admins leicht fallen und einen Test zu schreiben sollte nicht mehr als fünf Minuten beanspruchen. Kubernetes bietet passende Abstraktionen für alle benötigten Komponenten an.
Aufbau des Testsystems
Ein CronJob Objekt löst nächtliche Testläufe aus. Die Tests werden auf einem Pod ausgeführt, der mit Kate Wards shUnit2 Test Framework, dem oc Kommandozeilentool und verschiedenen Tools (z.B. curl, psql, mysql, jq, awk) ausgestattet ist. Die Tests selbst werden aus einer ConfigMap eingelesen. Das ConfigMap Objekt wiederum basiert auf einem Ordner voller Testskripte in Git.
Zurück zum CronJob Objekt, das den Testlauf in Gang setzt. shunit2 arbeitet nach und nach die Testsuite (konkret die Testskripte in /etc/openshift-unit.d) ab und gibt die Ergebnisse aus. Aufgrund einer Einschränkung der CronJob API die erst mit Version 1.8 behoben wurde, wird auch bei Fehlern am Ende ‘Erfolg’ (Rückgabewert Null) gemeldet, weil Fehlercodes zu gehäuften Deployments und entsprechender Last für den Cluster führen.
War dieser Beitrag hilfreich?
|
Beitrag teilen
Blog-Autor*in
Gerald Schmidt
Du hast noch Fragen zu diesem Thema? Dann sprich mich einfach an.
Du hast noch Fragen zu diesem Thema? Dann sprich mich einfach an.
Blog-Autor*in
Gerald Schmidt
Du hast noch Fragen zu diesem Thema? Dann sprich mich einfach an.
Du hast noch Fragen zu diesem Thema? Dann sprich mich einfach an.