Container on Azure – Teil 2: Was bietet Azure
Wie in den Grundlagen im Teil 1 beschrieben erfreuen sich Container Architekturen großer Beliebtheit. Folgend erläutere ich die Services die Azure hierfür bietet um uns das Leben zu erleichtern.
Azure Container Registry (ACR)
Hierbei handelt es sich um die Container Registry Lösung von Azure. Sie erlaubt das managen und aufbewahren von Container Images, sowie Container zu updaten oder zu rebuilden. Ein Image ist dabei ein Read only Container Snapshot, aus dem neue Container erstellt werden können (ACR build). Pro Azure Subscription sind mehrere Container Registries möglich. ACR kann in Kombination mit DC/OS, Docker Swarm, Kubernetes sowie diversen Azure Diensten wie etwa App Services, Batch und Service Fabric verwendet werden.
Azure Kubernetes Service (AKS)
Der Azure Kubernetes Service bietet die Möglichkeit einer gehosteten Kubernetes Umgebung um Container-Anwendungen zu deployen und zu verwalten (Kubernetes API as a Service). Die Vorteile dieser Lösung ist, dass Health Monitoring, Updates und Clusterskalierung deutlich vereinfacht sind. Zudem werden keine Kosten für die Master Nodes oder die Verwaltung berechnet, sondern nur für die Agent Nodes. Das Erstellen kann mittels CLI mit nur 3 Befehlen erfolgen.
Die Einrichtung ist aber auch mit wenigen Einstellungen über das Azure Portal möglich bzw. über Azure Resource Manager (ARM) Templates komplett automatisierbar. Durch die Azure Active Directory (AAD) Integration und Role-Based Access Control (RBAC) kann der Zugriff leicht eingeschränkt werden. Bezüglich der Netzwerkkonfiguration gibt es eine Basic Einstellung bei der alles automatisch von Azure bereitgestellt wird. Allerdings lassen sich auch selbst Konfigurationen über die Advanced Einstellung tätigen.
Azure Container Instances (ACI)
Mit Azure Container Instances wird ein sehr schneller Einstieg in die Welt der Container ermöglicht. Normalerweise ist es nötig sich zuerst mit der Container Hosting Infrastruktur zu befassen. Es muss eine Container Environment erstellt werden, VM`s sind zu provisionieren und man benötigt das Wissen was hinter Orchestrierung steckt. Mit ACI ist es möglich Container serverless zu betreiben. Das bedeutet, dass Azure die nötigen Resourcen verwaltet und bereitstellt. Es muss lediglich ein Image (Linux oder Windows) spezifiziert werden, welches genutzt werden soll. Die Bezahlung erfolgt per Sekunde und auch nur wenn der Container aktiv ist, was nochmals die Flexibilität erhöht.
Ein wichtiger Teil den es zu erwähnen gibt ist das Konzept von Container Groups. Diese sind vergleichbar mit Pods in Kubernetes. Es handelt sich dabei um Container die sich ein lokales Netzwerk, Storage und Lebenszyklus teilen. Auch sind sie über dieselbe Adresse ansprechbar und Teilen sich den Port Namespace. Vorteil von diesem Konzept ist, dass das sogenannt Sidecar Pattern genutzt werden kann. Dieses erlaubt verschiedene Komponenten einer Anwendung in separate Container auszulagern und so verschiedene Aufgaben zu isolieren. Die Container sind dann in einer Container Group zusammengefasst.
Als Beispiel könnte man einen Application Container, welcher die Anwendung enthält, einen Logging Container der die Logs in den Storage schreibt und einen Monitoring Container, welcher den Gesundheitsstatus der Anwendung prüft und bei Bedarf alamiert in einer Container Group zusammenfassen.
ACI eignet sich somit perfekt für Testläufe, Experimente, kurzzeitige Workloads und dem Überbrücken von Lastspitzen. Jeder Container ist über einen Fully-Qualified Domain Name (FQDN) z.B name.region.azurecontainer.io erreichbar und hat eine IP Adresse. Die Integration von Azure CLI, PowerShell, dem C# fluent SDK und ARM Templates erlaubt eine umfangreiches Nutzungsspektrum. Auch lassen sich CPU, Speicher, Restart Policies und Environment Variablen spezifizieren.
Es handelt sich um keinen Ersatz für einen Container Orchestrator. Dafür vielmehr um eine Möglichkeit dessen Funktionsweise zu erweitern. Beispielsweise gibt es einen ACI Connector für Kubernetes mit dem die Container Instance als virtuelles Node in einem Kubernetes Cluster genutzt werden kann um diesen zu erweitern.
Monitoring von Container on Azure
Das Überwachen der einzelnen Container lässt sich über Log Analytics und die diversen Monitoring Möglichkeiten, die Azure bietet realisieren. Container Health als Beispiel identifiziert Container und sammelt Daten über die Auslastung und Speicher. So können etwa Bottlenecks leicht aufgedeckt werden. Auch werden Performance Messungen und die Cluster Auslastung angezeigt.
Mit der Log Analytics Container Monitoring Solution wird ein allgemeiner Überblick über die gesamte Infrastruktur gegeben. Hierdurch stehen detaillierte Berichte über CPU, Speicherauslastung, Storage und Netzwerk Nutzung zur Auswertung bereit. Auch können die Logs einfach zusammengeführt und ausgewertet werden.