Neuigkeiten von trion.
Immer gut informiert.

Artikel in der Kategorie 'cloud'

Beispiel für einen Kubernetes Mutating Admission Controller 25 Apr

Geschrieben von Thomas Kruse am 25. April 2019
Kubernetes

Im vorherigen Beitrag zu Kubernetes Admission Controller wurde beschrieben, wie das Konzept eines Admission Controllers in Kubernetes allgemein funktioniert. Anhand eines in Python geschriebenen Mutating Admission Controller wird im folgenden gezeigt, wie einfach ein Admission Controller implementiert werden kann.

Als Beispiel soll dazu ein Anwendungsfall aus der Kubernetes-Praxis dienen: Wenn Kubernetes-(Batch-)Jobs erfolgreich beendet wurden, sollen die zugehörigen Job-Objekte in der Regel entfernt werden. Das verschafft auf der einen Seite einen besseren Überblick, zum anderen wird unnötiger Overhead auf der Control Plane vermieden.
Dazu bietet Kubernetes auch ein Feature: Den TTL-Controller für Resourcen im Zustand finished. Aktuell ist dazu das Feature Gate TTLAfterFinished für den Controller-Manager und den API-Server in Kubernetes zu aktivieren. Anschließend prüft der TTL Controller bei Job Resourcen, ob das Property .spec.ttlSecondsAfterFinished gesetzt ist. Dann werden Jobs, die entweder completed oder failed sind durch den Controller nach Ablauf der entsprechenden Zeit entfernt.

Doch nicht immer werden Kubernetes-Job-Objekte bereits mit einem Wert für das ttlSecondsAfterFinished Attribut versehen. Um genau das sicherzustellen, soll nun ein entsprechender Mutating Admission Controller entwickelt werden.

Kubernetes Mutating Admission Controller 22 Apr

Geschrieben von Thomas Kruse am 22. April 2019
Kubernetes

Kubernetes ist flexibel um neue Funktionalität erweiterbar: Dabei gibt es neben CRDs (Custom Resource Definitions), mit denen die Kubernetes API um neue Typen und Operationen erweitert wird, auch Admission Controller. Admission Controller können dazu dienen, bestimmte Vorgaben einzuhalten. Beispielsweise, dass stets Ressourcen-Limits und -Requests spezifiziert werden. Wird dann ein Objekt angelegt, bei dem die Vorgaben nicht eingehalten werden, kann die Erzeugung abgelehnt werden.

Um das Konzept der Admission Controller zu veranschaulichen werden in einer kleinen Artikelserie die Grundlagen und die Umsetzung eines Beispiel-Mutating Admission Controllers mit Python vorgestelt.

Frontend Architektur für Microservices (JavaLand 2019) 20 Mär

Geschrieben von Thomas Kruse am 20. März 2019
JavaLand 2019

Auf der "JavaLand" Konferenz in Brühl präsentierte Thomas Kruse Architekturvarianten für Microservices. Für den Vortrag wurden die Erfahrungen aus verschiedenen Projekten in einem zeitlichen und technologischen Kontext eingeordnet und liefern damit Entscheidungshilfen für Architekten, die sich mit dem Thema Frontend im Microservice Kontext befassen.

Dank aktueller Entwicklungen eignen sich inzwischen Webcomponents für bestimmte Aufgabenstellungen und wurden mit einem Beispiel auf Basis von Angular Elements praktisch demonstriert.

Kubernetes Deployment mit CI Server 23 Feb

Geschrieben von Thomas Kruse am 23. Februar 2019
Kubernetes

In dem Beitrag zu Kubernetes Continuous Integration wurde am Beispiel von Drone CI gezeigt, wie Builds in einem Kubernetes Cluster umgesetzt werden können. Nun ist es oft der Wunsch von Kunden wie Entwicklern, möglichst schnell auf den aktuellen Stand auch zugreifen zu können. Dies Verfahren wird auch Continuous Deployment genannt, da stets der aktuelle Entwicklungsstand zur Nutzung bereit steht.

Dieser Beitrag zeigt daher auf, wie mit Kubernetes und Drone ein solches Deployment umgesetzt werden könnte. Damit das Setup nicht zu komplex wird, wird lediglich der aktuelle master-Branch in Kubernetes deployt.

Kubernetes Zertifikate verwenden 3 Feb

Geschrieben von Thomas Kruse am 3. Februar 2019
Kubernetes

Im vorherigen Beitrag wurde erklärt, wie die Kubernetes Certificate Authority über die Kubernetes API angesprochen werden kann. Innerhalb des Kubernetes Clusters wird über die CA eine Vertrauensbeziehung etabliert - doch wie sieht es mit externen Zugriffen aus?
Nicht alles geschieht rein innerhalb des Clusters. Ein offensichtliches Beispiel ist der Betrieb einer (Docker) Container Registry innerhalb von Kubernetes. Das grundsätzliche Setup wurde in dem Beitrag Docker Registry in Kubernetes erläutert.

Da die Registry von der jeweiligen Container-Runtime angesprochen wird, geschieht dies regelmäßig direkt von einer Node und erfolgt damit nicht durch Kubernetes. Damit muss die Node über die passenden CA Zertifikate verfügen, sonst erhält man die Fehlermeldung, dass das X509 Zertifikat nicht validiert werden konnte. Nun geht es also darum, das CA Zertifikat von Kubernetes auf die einzelnen Nodes zu verteilen.

Kaniko mit Custom CA Certificates 2 Feb

Geschrieben von Thomas Kruse am 2. Februar 2019
Kaniko

Damit Kaniko mit einer eigenen Registry verwendet werden kann, die TLS Zertifikate von einer eigenen Certificate Authority (CA) verwendet, wird ein eigenes Kaniko Container-Image benötigt. Wenn darin die passenden Zertifikate enthalten sind, kann Kaniko auf die Registry ohne Probleme zugreifen.

Dieses Beispiel baut auf dem vorherigen Beitrag auf und verwendet daher schon ein spezielles Kaniko Image für ARM Maschinen.

Kaniko ARM Image 1 Feb

Geschrieben von Thomas Kruse am 1. Februar 2019
Kaniko

Kaniko ist in Version 1.0 erschienen, damit ist es Zeit, sich das Werkzeug genauer anzusehen. Bereits in Mit Kaniko Docker Images ohne Daemon bauen und Mit Kaniko Docker Images in Kubernetes bauen wurde Kaniko vorgestellt. Auch wenn sich Kaniko weiterentwickelt hat - so braucht man keine root-Rechte mehr, um ein Image zu bauen - so gibt es leider noch kein ARM oder ARM64 Image.

In diesem Beitrag geht es also darum, wie auf Basis eines existierenden Dockerfile ein Build in Kubernetes durchgeführt werden kann. Dabei wird der Docker-in-Docker Ansatz gewählt, womit auch bei einer anderen Container-Runtime wie rkt oder CRI-O keine Probleme auftreten.

Kubernetes TLS Zertifikate 29 Jan

Geschrieben von Thomas Kruse am 29. Januar 2019
Kubernetes

Zertifikate spielen in einem Kubernetes Cluster eine wichtige Rolle: Durch Zertifikate wird eine Vertrauensbeziehung ausgedrückt.
Vor allem bei einer statischen Beziehung zwischen Services lässt sich eine Authentifizierung durch TLS Zertifikate sehr effizient ausdrücken.

Kubernetes bringt daher auch typischerweise eine eigene Certificate Authority (CA) mit, die als Trust-Root für alle im Kubernetes Cluster verwendeten Zertifikate dienen kann.
Eine eigene CA kann, je nach verwendeten Verfahren zur Cluster Einrichtung, ebenfalls verwendet werden, oder es können intermediate-CA Zertifikate eingesetzt werden. Standard ist jedoch dass jeder Kubernetes Cluster über eine eigene CA verfügt.

Wie man mit dieser CA interagieren kann wird in diesem Beitrag erklärt.

Kubernetes continuous Integration (CI) 26 Jan

Geschrieben von Thomas Kruse am 26. Januar 2019
Kubernetes

In diesem Kubernetes Beitrag geht es darum, eine CI Pipeline auf Kubernetes Infrastruktur aufzusetzen. Wie bereits in den vorherigen Kubernetes Beiträgen soll auch hier ein Augenmerk auf dem Support der ARM Plattform gelegt werden. Leider trotz der zunehmenden Verbreitung von ARM im Serverumfeld noch immer nicht selbstverständlich, dass Multi-Arch Images bereitgestellt werden.

Docker Images ohne Dämon bauen mit Kaniko 3 Nov

Geschrieben von Thomas Kruse am 3. November 2018
Kaniko

Kubernetes nutzt Container Images im OCI- oder Docker-Format, um Workload im Cluster zu verteilen und auszuführen. Möchte man - zum Beispiel im Rahmen eines CI-Builds - in einem Kubernetes-Cluster auch Docker-Images bauen, gibt es im wesentlichen drei Ansätze:

  1. Verwendung des außenliegenden Docker-Daemons

  2. Verwendung eines Docker-Daemons in einem Container (Docker-in-Docker)

  3. Verwendung eines alternativen Build Werkzeugs

Den Docker-Daemon, der im Cluster selbst Container bereitstellt, in einem Build-Container zu verwenden bringt vor allem den Nachteil mit sich, dass der Build die Stabilität der Cluster-Node beeinträchtigen kann. Zudem ist nicht gesagt, dass überhaupt ein Docker-Daemon bereitsteht, schließlich könnte der Kubernetes-Cluster auch CRI-O als Runtime verwenden. Diese Option scheidet somit in der Regel aus.

Docker-in-Docker (DinD) ist eine häufig gewählte Option, verlangt jedoch, dass der entsprechende Container priviligiert gestartet wird. Aus Sicherheitsaspekten ist diese Option zwar nicht optimal, lässt sich jedoch in der Praxis gut einsetzen. Das gilt selbst dann, wenn die Container-Engine des Clusters gar kein Docker verwendet.

Als letzte Optionen bleibt noch die Verwendung spezialisierter Werkzeuge zur Erstellung von Container-Images. In diesem Beitrag wurde die Verwendung von Buildah beschrieben, in Spring Boot mit Jib die Verwendung von Jib.

Jib ist speziell auf Java-Anwendungen ausgerichtet, buildah benötigt zum Bauen von Images root-Berechtigungen - beide Werkzeuge bringen damit gewisse Einschränkungen mit.

Von Google kommt das Werkzeug Kaniko, das in diesem Beitrag vorgestellt wird, und speziell für den Einsatz in Kubernetes konzipiert wurde.

PHP in Docker 16 Okt

Geschrieben von Thomas Kruse am 16. Oktober 2018
Docker

Auch wenn mit Docker die Containertechnologie fast überall Einzug hält, gibt es immer wieder in der praktischen Arbeit Herausforderungen zu meistern. Ganz besonders dann, wenn die Anwendung, die in einen Container verbracht werden soll, nicht dafür ausgelegt wurde, entsprechend betrieben zu werden. Vor allem im PHP Umfeld finden sich oft Anwendungsarchitekturen, die der Docker Philosophie "Ein Container, eine Aufgabe" entgegen stehen.

Ein möglicher Ansatz zur Lösung ist die Nutzung von Docker lediglich zur Ausführung der PHP- und Webserverprozesse und separate Verwaltung der PHP Programmdateien. Ein Host-Mount kann die Dateien in beliebige Container einbinden - doch verliert man dann gerade die Stärke von Docker, sowohl für Rollout als auch Rollback eine handhabbare Einheit bestehend aus Anwendungsserver und Programmdateien bereitzustellen.

Das Problem besteht bei PHP Anwendungen in Docker darin, dass diese typischerweise aus mehreren Komponenten bestehen:

  • PHP-FPM für die Ausführung von PHP als Resultat von Web-Anfragen

  • Cron Jobs, oft ebenfalls als Trigger von PHP Scripten für periodische und asynchrone Aufgaben

  • Memcached oder Redis als Cache

  • Eine Datenbank wie MySQL oder PostgreSQL

  • Ein Webserver (nginx, Apache httpd, …​) zur Auslieferung statischer Dateien

Zumindest die ersten beiden Dienste benötigen Zugriff auf die selben PHP Programmdateien. Einen Scheduler und PHP-FPM im selben Container auszuführen passt nicht so ganz zur reinen Lehre von Docker, ist aber solange leicht zu verschmerzen, wie lediglich eine Container-Instanz läuft.

Sowieso als externe Resourcen verwaltete Dienste wie die Datenbank oder einen Memcached in einem separaten Container laufen zu lassen ist naheliegen. Doch wie geht mit man Software um, die für eine gänzlich andere Betriebsumgebung konzipiert wurde?

Am Beispiel typischer PHP Projekte kann man die unterschiedlichen Vorgehensweisen und damit einhergehende Eigenschaften betrachten.

Architektur mit Angular Elements 26 Sep

Geschrieben von Thomas Kruse am 26. September 2018
Java Magazin 11/2018

Das seit Angular 6 als Beta verfügbare Feature "Angular Elements" wird mit Angular 7 erweitert und für den produtkiven Einsatz stabilisiert. Mit Angular Elements lassen sich mit dem Angular-Framework leichtgewichtige Web-Components entwickeln, die sich in unterschiedlichen Kontexten einsetzen lassen.

Karsten Sitterberg stellt in seinem Artikel "Architektur mit Angular Elements" vor, wie sich bereits mit Angular in Version 6 die Entwicklung von Web-Components gestalten lässt und welche Konsequenzen sich für die Architektur von Anwendungen durch die neuen Möglichkeiten ergeben.

Los geht's!

Bitte teilen Sie uns mit, wie wir Sie am besten erreichen können.