© HelenField/Shutterstock.com
Segel setzen mit Kubernetes

PHP trifft Kubernetes


„You build it, you run it“ – ist das nur Hype oder die heutige Realität? In diesem Artikel erfahren wir, wie Entwickler PHP-Anwendungen selbst bereitstellen können – mit Docker, Kubernetes und ein bisschen Glück. Wir befinden uns damit im Grenzbereich zwischen Entwicklung und DevOps. Und das ist genau so, wie es in der modernen Entwicklungswelt sein sollte.

Wie implementieren und skalieren wir heutzutage PHP-Anwendungen? Cloud-Implementierungen werden heute zum Standard, aber können wir weiterhin auf ähnliche Weise arbeiten wie mit Bare-Metal-Servern? Bevor wir tiefer in das Thema einsteigen, möchte ich einige Herausforderungen beim Deployment von Webanwendungen ansprechen. Zunächst einmal läuft das Deployment permanent auf einem Webserver. Hochgeladene Webanwendungen erhalten durchgehend eine große Menge Datenverkehr und eine Anwendung muss während des Deployments ohne Unterbrechung weiterhin Dienste für Endkunden bereitstellen. Eine weitere Herausforderung hat mit der Versionierung der Anwendung zu tun. Bei Webanwendungen ist es normalerweise schwierig, korrekte Versionierungskonzepte zu verwenden, die zwei oder mehr Versionen gleichzeitig unterstützen. Natürlich können wir Blue-Green Deployment oder die Canary-Release-Technik verwenden, wenn wir eine neue Version der Anwendung in einem Subset unserer Infrastruktur bereitstellen und das Traffic Routing zwischen zwei Versionen auf dem Balancer einrichten. Aber Kubernetes ist ein Werkzeug, das diese Funktion schon „out of the box“ mitbringt.

Webanwendungen beruhen oft auf verschiedenen States: Konfigurationen, Umgebungsvariablen, Softwareversionen, Treiber und Hardware-Set-up. Das blockiert die Fähigkeit, sie schnell und einfach zu skalieren. Klassische Bare-Metal-Set-ups erfordern manchmal nicht nur die gleiche Software, die auf den gleichen Betriebssystemen läuft, sondern oft auch ähnliche Hardware, um eine erfolgreiche Ausführung sicherzustellen. Und genau hier kommt die Anwendungscontainerisierung ins Spiel, die dabei hilft, eine stateless isolierte Webanwendung (Abb. 1) zu erstellen.

bulakh_kubernetes_1.tif_fmt1.jpgAbb. 1: Erstellung einer isolierten Webanwendung

Anstatt den State und die Dependencies zu verwalten, können wir sie in die Anwendung aufnehmen und isolieren. Alles, zu dem Dependencies aus einer Anwendung heraus bestehen, einschließlich dem Betriebssystem, installierter Module und Bibliotheken sowie Umgebungseinstellungen, kann in eine einzige isolierte Anwendung gepackt werden. Sie lässt sich leicht skalieren, weil wir so viele isolierte Anwendungen ausführen können, wie wir brauchen, ohne uns um deren State und Dependencies kümmern zu müssen.

Das sieht simpel und kompliziert zugleich aus. Bei physischen Servern haben wir das Gefühl, sie zu kontrollieren. Wenn etwas schiefläuft, können wir sie jederzeit neu starten und von vorne anfangen. Bei Containern ist das anders – wir können sie nicht anfassen, wir sollten uns nicht einmal in den Container einloggen, um den aktuellen Status zu prüfen, wenn wir eine Stateless-Anwendung betreiben. Wie also können wir Dutzende von Containern verwalten, auf denen unsere Anwendung läuft, ohne sofort ein Desaster auszulösen? Spezielle Tools namens Orchestrators kommen uns hier zu Hilfe. Orchestrators können containerisierte Anwendungen automatisch verwalten, skalieren und warten. Ich habe mit verschiedenen davon Erfahrungen gesammelt. Zunächst begann ich, meine Container mit Docker Compose zu organisieren. Das ist ein simples Tool, das es erlaubt, eine einzige Konfigurationsdatei zu erstellen, in der alles steht, was wir brauchen, um unsere Anwendung auszuführen. Docker Compose ist ein sehr gutes Tool für lokale Entwicklung. Ein weiteres Tool aus der Docker-Familie namens Docker Swarm ist sehr mächtig und erlaubt das Skalieren von Webanwendungen zwischen verschiedenen Servern, was Docker Compose an seine Grenzen bringt. Eines der praktischsten und beliebtesten Tools ist heutzutage Kubernetes. Es ist ein Open-Source-Projekt, das ursprünglich von Google, einer Firma, die effiziente Infrastrukturtools mitunter am meisten benötigt, an die Community gespendet wurde. Kubernetes bringt einige wichtige Features mit, darunter die folgenden:

Automatisierte Roll-outs und Roll-backs: Es ist einfach, einen Canary-Test während des Deployments zu erstellen, indem ein kleiner Teil des Traffics zur neuen Version umgeleitet wird. Genauso einfach sollte es sein, den kompletten Traffic zur alten Version zurückzuleiten.

Horizontale Skalierung: Kubernetes verwaltet die Anzahl der Repliken basierend auf der vorhandenen Konfiguration und den vorhandenen Limits.

Service Discovery und Load Balancing: Kubernetes bietet verschiedene Schemes, um Services freizulegen.

Selbstheilend: Kubernetes stellt sicher, dass der Appli...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang