Azure Kubernetes Service (AKS)
Da Kubernetes immer schneller der neue Standard für das Deployen und Betreiben von Software in der Cloud wird, bietet auch Microsoft in der Azure Cloud einen gemangten Service.
Was ist Azure Kubernetes Service (AKS)
Mit Azure Kubernetes Service (AKS) bietet Microsoft eine voll gemangte Kubernetes Container Infrastruktur für die Verwaltung und Skalierung von Containern. Der Service basiert auf dem bekannten Open Source Container Containerorchestrierungssystem Kubernetes (K8s). Wie bei vielen anderen Services auf Azure nimmt Microsoft den Infrastrukturteil ab und bietet ein vollumfänglichen Kubernetes Cluster innerhalb der Cloud an.
Die Kernfeatures hierbei sind
- Voll verwalteter und gemanagter Kubernetes Kluster mit Monitoring und Zugriffssteuerung
- automatisiertes Scaling für containerisierte Anwendungen
- keine Aufwände für die Infrastrukturkonfiguration
- Pay-per-Use und Abobezahlmodelle
Begriffserklärungen
Name | Beschreibung |
---|---|
Availability zones | Über die verschiedenen Zonen lassen sich Applikationen und Daten über mehrere Datencenter verteilen. Um Resilienz sicherzustellen, gibt es in jeder Azure Region mindestens 2 Availability Zones. |
Scale method | Es kann zwischen manueller und automatischer Scalierung unterschieden werden. Bei der manuellen Scalierung müssen die Knoten entsprechend angegeben werden. Mit automatischer Skalierung werden Knotenpunkte bei Bedarf auch automatisch nachgezogen. Weiterführende Informationen können hier gefunden werden. |
Node pool | Knoten derselben Konfiguration werden in sogenannten Node pools zusammengefasst. Diese Knotenpools erhalten die zugrundeliegenden virtuellen Computer.
Eine Einschränkung, welche sich auf Azure ergibt: Es können nur Node pools mit in der aktuell ausgewählten Region verfügbaren VM Typen erstellt werden. Außerdem kann die VM-Größe nach dem Erstellen nicht mehr geändert werden. |
Node size | Nodes sind die zugrundeliegende Einheit für Hardware in Kubernetes. Vereinfacht gesagt spiegelt jeder Node eine physikalische Maschine mit z. B. CPU und RAM Ressourcen im Datencenter wider. Dies bedeutet auch, dass die einzelnen Maschinen mit individuellen Größen angelegt werden können. So können sämtliche Azure VM Typen und Größen genutzt werden. Als Standard wird Standard_DS2_v2 mit 7 GiB verwendet. |
Automatic upgrade | Mit diesem Parameter kann angegeben werden, ob die zugrunde liegende Kubernetes Version automatisch geupdated wird oder nicht. AKS bietet die Möglichkeit dedizierte Kubernetes Versionen zu verwenden oder Updates nach dem Mechanismus none, stable, patch, rapid oder node-image auszuführen. |
Preismodell
Wie bei den meisten Services bietet Azure auch für das Kubernetes Cluster einen Free-Tarif zum Einstieg. Die Klusterverwaltung ist hier kostenlos und nur für die Knoten fallen nutzungsabhängige Kosten an. Als Knotenlimit gilt hier 1000.
Beispielrechnung: Wird ein Kluster mit einer VM vom Typ DS2_v2 mit 8 GB Ram kostet diese 0,112 € pro Stunde. In einem 24/7 Betrieb kommen hier im Monat ca. 80 € pro VM zusammen.
Daneben kann auch ein Standard-Tier für 0,094 € pro Stunde gewählt werden. Hier werden entsprechende SLAs und Betriebszeiten garantiert und das Klusterlimit liegt bei 5000 Knoten. Wie bei allen Azure Services kann bei Buchung über einen längeren Zeitraum im voraus (1 Jahr oder 3 Jahre) eine Preisersparnis erzielt werden. Auch ist es möglich, eine sogenannte Kostenersparnis durch Spot-Buchung möglich. Dies kann für nicht zeitkritische Aufgaben wie zum Beispiel Batchverarbeitung oder Machine Learning verwendet werden, welche eine temporäre Unterbrechung tolerieren können.
How to use
Wie jeder Azure Service kann AKS über die Oberfläche konfiguriert und über die gängigen Infrastructure-as-Code (IaC) Mechanismen aufgesetzt werden.
Beispiel UI
Wichtigste Parameter, welche beim Erstellen eines AKS benötigt werden, sind das „Pricing Tier“ sowie die „Scale Method“.
Beispiel Terraform
resource „azurerm_kubernetes_cluster“ „default“ { name = "${random_pet.prefix.id}-aks" location = azurerm_resource_group.default.location resource_group_name = azurerm_resource_group.default.name dns_prefix = "${random_pet.prefix.id}-k8s" default_node_pool { name = "default" node_count = 2 vm_size = "Standard_B2s" os_disk_size_gb = 30 } service_principal { client_id = var.appId client_secret = var.password } role_based_access_control_enabled = true tags = { environment = "Demo" } }
Quelle: https://developer.hashicorp.com/terraform/tutorials/kubernetes/aks
Beispiel Azure CLI
# Create a resource group in west europe az group create --name myAKSResourceGroup --location westeurope # Create a basic single-node pool AKS cluster az aks create \ --resource-group myAKSResourceGroup \ --name AKS-example-ANU \ --vm-set-type VirtualMachineScaleSets \ --node-count 2 \ --generate-ssh-keys \ --load-balancer-sku standard # Get the cluster credentials for use with kubectl az aks get-credentials --resource-group myAKSResourceGroup --name AKS-example-ANU
Nachdem der Kubernetes Cluster aufgesetzt und verfügbar ist, kann über die Credentials regulär das bekannte kubectl command verwendet werden.
Best practice
- Wie auch bei On-Premise Kubernetes Cluster bietet sich auch auf Azure an, für jede Aufgabenstellung einen dedizierten Node Pool mit passender zugrundeliegender VM (SKU) zu nutzen.
- Sollte ein Node pool nicht mit passender VM Größe konfiguriert sein, diesen löschen und neu aufsetzen.
- Die Auslastung der VMs ebenfalls beobachten.
- Alle Node pools müssen im selben virtuellen Netzwerk (und im besten Fall) in der gleichen Region betrieben werden.
- Als hilfreich hat sich auch die Arbeit mit kubectl und das Pflegen von Skripten und Konfigurationen in helm herausgestellt.
Quellen:
https://azure.microsoft.com/de-de/products/kubernetes-service
https://learn.microsoft.com/en-us/azure/aks/availability-zones
https://azure.microsoft.com/de-de/pricing/details/kubernetes-service/
https://medium.com/google-cloud/kubernetes-101-pods-nodes-containers-and-clusters-c1509e409e16