K8s/Kubernetes: AWS vs. GCP vs. Azure

Veröffentlicht: 2022-03-11

Kubernetes (oft stilisierte „K8s“) hat den Kampf der Container-Orchestrierungs-Tools vor Jahren gewonnen. Dennoch gibt es heute noch viele Möglichkeiten, Kubernetes zu implementieren und es mit verschiedenen Infrastrukturen und vielen Tools zum Laufen zu bringen – einige besser gewartet als andere. Die vielleicht interessanteste Entwicklung an dieser Front ist jedoch, dass die führenden Cloud-Anbieter beschlossen haben, ihre eigenen verwalteten Kubernetes-Versionen zu veröffentlichen:

  • Microsoft Azure bietet den Azure Kubernetes Service (AKS)
  • AWS bietet den Amazon Elastic Kubernetes Service (EKS) an
  • Google Cloud bietet die Google Kubernetes Engine (GKE)

Was bieten diese Plattformen aus DevOps-Perspektive? Halten sie ihre Versprechen? Wie lassen sich ihre Erstellungszeit und andere Benchmarks vergleichen? Wie gut integrieren sie sich in ihre jeweiligen Plattformen, insbesondere in ihre CLI-Tools? Wie ist es, sie zu pflegen und mit ihnen zu arbeiten? Im Folgenden werden wir uns mit diesen und weiteren Fragen befassen.

Hinweis: Für Leser, die die Konzepte eines Kubernetes-Clusters erklärt haben möchten, bevor sie weiterlesen, bietet Dmitriy Kononov eine hervorragende Einführung.

AKS vs. EKS vs. GKE: Beworbene Funktionen

Wir haben uns entschieden, die verschiedenen Funktionen, die für jede verwaltete Kubernetes-Version verfügbar sind, in Silos zu gruppieren:

  • Globale Übersicht
  • Vernetzung
  • Skalierbarkeit und Leistung
  • Sicherheit und Überwachung
  • Ökosystem
  • Preisgestaltung

Hinweis: Diese Details können sich im Laufe der Zeit ändern, da Cloud-Anbieter ihre Produkte regelmäßig aktualisieren.

Globale Übersicht

Service- Aspekt AKS EKS GKE
Jahr veröffentlicht 2017 2018 2014
Letzte Version 1.15.11 (Standard) - 1.18.2 (Vorschau) 1.16.8 (Standard) 1.14.10 (Standard) - 1.16.9
Spezifische Komponenten Oms-Agent, Tunnelfront aws-Knoten fluentd, fluentd-gcp-scaler, event-exporter, l7-default-backend
Upgrade der Kubernetes-Steuerungsebene Handbuch Handbuch Automatisiert (Standard) oder manuell
Worker-Upgrades Handbuch Ja (einfach mit verwalteten Knotengruppen) Ja: automatisiert und manuell, Feinabstimmung möglich
SLA 99,95 Prozent mit Verfügbarkeitszone, 99,9 Prozent ohne 99,9 Prozent für EKS (Master), 99,99 Prozent für EC2 (Knoten) 99,95 Prozent innerhalb einer Region, 99,5 Prozent innerhalb einer Zone
Native Knative-Unterstützung Nein Nein Nein (aber native Istio-Installation)
Preis der Kubernetes-Steuerungsebene Kostenlos 0,10 $/Stunde 0,10 $/Stunde

Kubernetes selbst war das Projekt von Google, daher macht es Sinn, dass sie 2014 als erste eine gehostete Version vorgeschlagen haben.

Von den dreien, die hier verglichen werden, war Azure der nächste mit AKS und hatte etwas Zeit, um sich zu verbessern: Wenn Sie sich an die acs-Engine erinnern, die vor einigen Jahren zur Bereitstellung von Kubernetes auf Azure verwendet wurde, werden Sie die Bemühungen von Microsoft zu ihrer Ersetzung zu schätzen wissen. aks-engine.

AWS war das letzte Unternehmen, das seine eigene Version, EKS, eingeführt hat, daher kann es manchmal so aussehen, als ob es an der Feature-Front hinterherhinkt, aber sie holen auf.

In Bezug auf die Preisgestaltung sind die Dinge natürlich immer in Bewegung, und Google hat beschlossen, sich AWS in seinem Preispunkt von 0,10 $/Stunde mit Wirkung ab Juni 2020 anzuschließen. Azure ist hier der Außenseiter, indem es den AKS-Dienst kostenlos zur Verfügung stellt, aber es ist unklar, wie lange, die dauern kann.

Ein weiterer Hauptunterschied liegt in der Upgrade-Funktion des Clusters. Die meisten automatisierten Upgrades befinden sich in GKE und sind standardmäßig aktiviert. Allerdings sind sich AKS und EKS hier insofern ähnlich, als beide manuelle Anfragen erfordern, um die Master- oder Worker-Knoten aktualisieren zu können.

Vernetzung

Service- Aspekt AKS EKS GKE
Netzwerkrichtlinien Ja: Azure-Netzwerkrichtlinien oder Calico Calico muss installiert werden Ja: Nativ über Calico
Lastverteilung Basic- oder Standard-SKU-Load-Balancer Klassischer und Netzwerk-Load-Balancer Containernativer Load Balancer
Service-Mesh Keine out of the box AWS App Mesh (basierend auf Envoy) Istio (out of the box, aber Beta)
DNS-Unterstützung CoreDNS-Anpassung CoreDNS + Route53 innerhalb von VPC CoreDNS + Google Cloud-DNS

Netzseitig liegen die drei Cloud-Anbieter sehr nah beieinander. Sie alle ermöglichen Kunden beispielsweise die Implementierung von Netzwerkrichtlinien mit Calico. In Bezug auf den Lastausgleich implementieren sie alle ihre Integration mit ihren eigenen Lastausgleichsressourcen und lassen Ingenieuren die Wahl, was sie verwenden möchten.

Der hier gefundene Hauptunterschied basiert auf dem Mehrwert des Service Mesh. AKS unterstützt standardmäßig kein Service Mesh (obwohl Techniker Istio manuell installieren können). AWS hat ein eigenes Service Mesh namens App Mesh entwickelt. Schließlich hat Google eine eigene Integration mit Istio veröffentlicht (obwohl noch in der Beta-Phase), die Kunden direkt beim Erstellen des Clusters hinzufügen können.

Beste Wette: GKE

Skalierbarkeit und Leistung

Service- Aspekt AKS EKS GKE
Bare-Metal-Knoten Nein Jawohl Nein
Max. Knoten pro Cluster 1.000 1.000 5.000
Hochverfügbarkeitscluster Nein Ja für Kontrollplan, Handbuch über AZ für Arbeitnehmer Ja über regionales Cluster, Master und Worker werden repliziert
Automatische Skalierung Ja über Cluster Autoscaler Ja über Cluster Autoscaler Ja über Cluster Autoscaler
Vertikaler Pod-Autoscaler Nein Jawohl Jawohl
Knotenpools Jawohl Jawohl Jawohl
GPU-Knoten Jawohl Jawohl Jawohl
Vor Ort Verfügbar über Azure ARC (Beta) Nein GKE On-Prem über Anthos GKE

In Bezug auf die Leistung und Skalierbarkeit von GKE vs. AKS vs. EKS scheint GKE die Nase vorn zu haben. Tatsächlich unterstützt es die größte Anzahl von Knoten (5.000) und bietet eine umfassende Dokumentation zur richtigen Skalierung eines Clusters. Alle Features für Hochverfügbarkeit sind vorhanden und lassen sich einfach feintunen. Darüber hinaus hat GKE kürzlich Anthos veröffentlicht, ein Projekt zur Schaffung eines Ökosystems rund um GKE und seine Funktionalitäten; Mit Anthos können Sie GKE On-Prem bereitstellen.

AWS hat jedoch einen entscheidenden Vorteil: Es ist das einzige, das es Bare-Metal-Knoten ermöglicht, Ihren Kubernetes-Cluster auszuführen.

Ab Juni 2020 fehlt es AKS an Hochverfügbarkeit für den Master, was ein wichtiger zu berücksichtigender Aspekt ist. Aber wie immer könnte sich das bald ändern.

Beste Wette: GKE

Sicherheit und Überwachung

Service- Aspekt AKS EKS GKE
App-Secrets-Verschlüsselung Nein Ja, über AWS KMS möglich Ja, über Cloud KMS möglich
Einhaltung HIPAA, SOC, ISO, PCI-DSS HIPAA, SOC, ISO, PCI-DSS HIPAA, SOC, ISO, PCI-DSS
RBAC Jawohl Ja, und eine starke Integration mit IAM Jawohl
Überwachung Integritätsfunktion für Azure Monitor-Container Überwachung der Kubernetes-Steuerungsebene verbunden mit Cloudwatch, Container Insights-Metriken für Knoten Kubernetes Engine Monitoring und Integration mit Prometheus

In puncto Compliance sind alle drei Cloud-Anbieter gleichwertig. In Bezug auf die Sicherheit bieten EKS und GKE jedoch mit ihren eingebetteten Schlüsselverwaltungsdiensten eine weitere Sicherheitsebene.

Was die Überwachung betrifft, bieten Azure und Google Cloud ihr eigenes Überwachungsökosystem rund um Kubernetes. Es ist erwähnenswert, dass die von Google kürzlich aktualisiert wurde, um Kubernetes Engine Monitoring zu verwenden, das speziell für Kubernetes entwickelt wurde.

Azure bietet ein eigenes Container-Überwachungssystem, das ursprünglich für ein einfaches Container-Ökosystem ohne Kubernetes entwickelt wurde. Sie haben die Überwachung einiger Kubernetes-spezifischer Metriken und Ressourcen (Clusterzustand, Bereitstellungen) hinzugefügt – im Vorschaumodus ab Juni 2020.

AWS bietet leichtgewichtige Überwachung für die Steuerungsebene direkt in Cloudwatch. Um die Worker zu überwachen, können Sie Kubernetes Container Insights-Metriken verwenden, die über einen bestimmten CloudWatch-Agenten bereitgestellt werden, den Sie im Cluster installieren können.

Beste Wette: GKE

Ökosystem

Service- Aspekt AKS EKS GKE
Marktplatz Azure Marketplace (aber keine klare AKS-Integration) AWS Marketplace (über 250 Apps) Google Marketplace (über 90 Apps)
Infrastructure-as-Code (IaC)-Unterstützung Terraform-Modul
Ansible-Modul
Terraform-Modul
Ansible-Modul
Terraform-Modul
Ansible-Modul
Dokumentation Schwache, aber vollständige und starke Community (über 2.000 Stack Overflow-Posts) Nicht sehr gründlich, aber starke Community (1.500+ Stack Overflow Posts) Umfangreiche offizielle Dokumentation und sehr starke Community (4.000+ Stack Overflow Posts)
CLI-Unterstützung Vollständig Komplett, plus spezielles separates Tool eksctl (siehe unten) Vollständig

In Bezug auf Ökosysteme haben die drei Anbieter unterschiedliche Stärken und Vorzüge. AKS verfügt jetzt über eine sehr vollständige Dokumentation rund um seine Plattform und ist die zweitgrößte in Bezug auf Posts auf Stack Overflow. EKS hat die wenigsten Posts auf Stack Overflow, profitiert aber von der Stärke des AWS Marketplace. GKE hat als älteste Plattform die meisten Posts auf Stack Overflow und eine ordentliche Anzahl von Apps auf seinem Marktplatz, aber auch die umfassendste Dokumentation.

Die besten Wetten: GKE und EKS

Preisgestaltung

Service- Aspekt AKS EKS GKE
Kostenlose Nutzungsobergrenze $170 wert Nicht für das kostenlose Kontingent berechtigt $300 wert
Kosten der Kubernetes-Steuerungsebene Kostenlos 0,10 $/Stunde 0,10 $/Stunde (Juni 2020)
Reduzierter Preis (Spot-Instance/Präemptive Knoten) Jawohl Jawohl Jawohl
Beispielpreis für einen Monat $342
3 D2-Knoten
$300
3 t3.large-Knoten
$190
3 n1-Standard-2-Knoten

Was den Gesamtpreis betrifft, so bleibt sie trotz des Schritts von GKE, den Preispunkt von 0,10 $/Stunde für jeden Cluster zu implementieren, bei weitem die günstigste Cloud. Dies ist Google-spezifischen Rabatten für kontinuierliche Nutzung zu verdanken, die immer dann gewährt werden, wenn die monatliche Nutzung von On-Demand-Ressourcen ein bestimmtes Minimum erreicht.

Es ist wichtig zu beachten, dass die Beispielpreiszeile den Datenverkehr zum Kubernetes-Cluster nicht berücksichtigt, den der Cloud-Anbieter in Rechnung stellen kann.

Der Grund, warum AWS die Verwendung ihres kostenlosen Kontingents zum Testen eines EKS-Clusters nicht zulässt, ist, dass EKS größere Maschinen als das tX.micro-Tarif erfordert und die EKS-Stundenpreise nicht im kostenlosen Kontingent enthalten sind.

Dennoch kann es wirtschaftlich sein, jede dieser verwalteten Kubernetes-Optionen mit einer anständigen Last unter Verwendung der Spot-/Präemptionsknoten jedes Cloud-Anbieters zu testen – diese Taktik wird leicht 80 bis 90 Prozent des Endpreises einsparen. (Natürlich wird davon abgeraten, Stateful Production Loads auf solchen Maschinen auszuführen!)

Beworbene Funktionen und der Vorteil von Google

Wenn man sich die verschiedenen online beworbenen Funktionen ansieht, scheint es einen Zusammenhang zwischen der Dauer der Markteinführung der verwalteten Kubernetes-Version und der Anzahl der Funktionen zu geben. Wie bereits erwähnt, scheint Google als Initiator des Kubernetes-Projekts ein unbestreitbarer Vorteil zu sein, was zu einer besseren und stärkeren Integration mit seiner eigenen Cloud-Plattform führt.

Aber AKS und EKS sind mit zunehmender Reife nicht zu unterschätzen; beide können ihre einzigartigen Eigenschaften nutzen. Beispielsweise ist AWS das einzige Unternehmen mit Bare-Metal-Node-Integration und weist auch die höchste Anzahl von Anwendungen auf seinem Markt auf.

Nun, da die beworbenen Funktionen für jedes Kubernetes-Angebot klar sind, lassen Sie uns mit einigen praktischen Tests tiefer eintauchen.

Kubernetes: AWS vs. GCP vs. Azure in der Praxis

Werbung ist eine Sache, aber wie schneiden die verschiedenen Plattformen ab, wenn es darum geht, Produktionslasten zu bedienen? Als Cloud-Ingenieur weiß ich, wie wichtig es ist, wie lange es dauert, einen Cluster zu erzeugen und herunterzufahren, wenn Infrastruktur als Code durchgesetzt wird. Aber ich wollte auch die Möglichkeiten jeder CLI erkunden und kommentieren, wie einfach (oder nicht) jeder Cloud-Anbieter es macht, einen Cluster zu erstellen.

Benutzererfahrung bei der Clustererstellung

AKS

In AKS ähnelt das Spawnen eines Clusters dem Erstellen einer Instance in AWS. Suchen Sie einfach das AKS-Menü und gehen Sie eine Reihe verschiedener Menüs durch. Sobald die Konfiguration validiert ist, kann der Cluster erstellt werden, ein zweistufiger Prozess. Es ist sehr einfach und Ingenieure können einfach und schnell einen Cluster mit den Standardeinstellungen starten.

EKS

Die Clustererstellung ist bei EKS im Vergleich zu AKS definitiv komplexer. Zunächst erfordert AWS standardmäßig eine Reise zu IAM, um eine neue Rolle für die Kubernetes-Steuerungsebene zu erstellen und ihr den Ingenieur zuzuweisen. Es ist auch wichtig zu beachten, dass diese Cluster-Erstellung nicht die Erstellung der Knoten beinhaltet, also wenn ich durchschnittlich 11 Minuten gemessen habe, ist dies nur für die Master-Erstellung. Die Erstellung der Knotengruppe ist ein weiterer Schritt für den Administrator, der wiederum eine Rolle für Arbeiter mit drei erforderlichen Richtlinien benötigt, die über das IAM-Steuerungsfeld erstellt werden müssen.

GKE

Für mich ist die Erfahrung, einen Cluster manuell zu erstellen, auf GKE am angenehmsten. Nachdem Sie die Kubernetes Engine in der Google Cloud Console gefunden haben, klicken Sie auf , um einen Cluster zu erstellen. In einem Menü auf der linken Seite werden verschiedene Kategorien von Einstellungen angezeigt. Google füllt den neuen Cluster vorab mit einem leicht modifizierbaren Standard-Knotenpool. Nicht zuletzt hat GKE die schnellste Cluster-Spawning-Zeit, was uns zur nächsten Tabelle bringt.

Zeit, einen Cluster zu spawnen

Service- Aspekt AKS EKS GKE
Größe 3 Knoten (Ds2-v2) mit jeweils 2 vCPUs, 7 GB RAM 3 Knoten t3.large 3 Knoten n1-Standard-2
Zeit (m:ss) Durchschnittlich 5:45 für einen vollen Cluster 11:06 für Master plus 2:40 für die Knotengruppe (insgesamt 13:46 für einen vollständigen Cluster) Durchschnittlich 2:42 für einen vollen Cluster

Ich habe diese Tests in derselben Region (Frankfurt und Westeuropa für AKS) durchgeführt, um mögliche Auswirkungen dieses Unterschieds auf die Laichzeit zu beseitigen. Ich habe auch versucht, die gleiche Größe für Knoten für den Cluster auszuwählen: Drei Knoten mit jeweils zwei vCPUs und sieben oder acht GB Speicher, eine Standardgröße, um eine kleine Last auf Kubernetes auszuführen und mit dem Experimentieren zu beginnen. Ich habe jeden Cluster dreimal erstellt, um einen Durchschnitt zu berechnen.

In diesen Tests blieb GKE mit einer Spawn-Zeit von immer unter drei Minuten weit vorne.

Kubernetes: Überblick über AWS vs. GCP vs. Azure CLI

Nicht alle CLIs sind gleich, aber in diesem Fall sind alle drei CLIs tatsächlich Module einer größeren CLI. Wie ist es, die CLI-Toolchain jedes Cloud-Anbieters zum Laufen zu bringen?

AKS-CLI (über az )

Nach der Installation von az -Tools und dann des AKS-Moduls (über az aks install-cli ) müssen Ingenieure die CLI für die Kommunikation mit dem Azure-Konto des Projekts autorisieren. Dies ist eine Frage des Abrufens der Anmeldeinformationen zum Aktualisieren der lokalen kubeconfig-Datei über ein einfaches az aks get-credentials --resource-group myResourceGroup --name myAKSCluster .

Um einen Cluster zu erstellen, gehen Sie ähnlich vor: az aks create --resource-group myResourceGroup --name myAKSCluster

EKS CLI (über aws oder eksctl )

Bei AWS finden wir einen anderen Ansatz – es gibt zwei verschiedene offizielle CLI-Tools zur Verwaltung von EKS-Clustern. Wie immer kann aws eine Verbindung zu AWS-Ressourcen herstellen, insbesondere zu Clustern. Das Abrufen von Anmeldeinformationen in eine lokale kubeconfig-Datei kann über Folgendes erfolgen: aws eks update-kubeconfig --name cluster-test .

Ingenieure können jedoch auch eksctl verwenden, das von Weaveworks entwickelt und in Go geschrieben wurde, um auf einfache Weise einen EKS-Cluster zu erstellen und zu verwalten. Ein großer Vorteil, den EKS für Cloud-Ingenieure bietet, besteht darin, dass sie es mit YAML-Konfigurationsdateien kombinieren können, um Infrastructure-as-Code (IaC) zu erstellen, da es mit CloudFormation funktioniert. Es ist definitiv ein Vorteil, den Sie bei der Integration eines EKS-Clusters in eine größere Infrastruktur auf AWS berücksichtigen sollten.

Das Erstellen eines Clusters über eksctl ist so einfach wie eksctl create cluster , es sind keine weiteren Parameter erforderlich.

GKE-CLI (über gcloud )

Bei GKE sind die Schritte sehr ähnlich: Installieren Sie gcloud und authentifizieren Sie sich dann über gcloud init . Die Möglichkeiten von dort aus: Ingenieure können Cluster erstellen, löschen, beschreiben, Anmeldeinformationen abrufen, die Größe ändern, aktualisieren oder aktualisieren oder Cluster auflisten.

Die Syntax zum Erstellen eines Clusters mit gcloud ist einfach: gcloud container clusters create myGCloudCluster --num-nodes=1

AKS vs. EKS vs. GKE: Testlaufergebnisse

In der Praxis können wir sehen, dass GKE sicherlich am schnellsten ist, um einen einfachen Cluster hochzufahren, sowohl in Bezug auf die Einfachheit der Konsole als auch auf die Spawn-Zeit des Clusters. In Bezug auf die Benutzererfahrung mit der Verbindungsschaltfläche neben dem Cluster ist es auch am einfachsten, eine Verbindung zu einem Cluster herzustellen.

In Bezug auf CLI-Tools haben die drei Cloud-Anbieter ähnliche Funktionalitäten implementiert; Wir können jedoch das zusätzliche Tool hervorheben, das von Weaveworks für EKS bereitgestellt wird. eksctl ist das perfekte Tool für Sie, um Infrastructure-as-Code zusätzlich zu Ihrer bereits bestehenden AWS-Infrastruktur zu implementieren und andere Services mit EKS zu kombinieren.

Managed Kubernetes-Angebote auf dem Vormarsch: AWS vs. GCP vs. Azure

Für diejenigen, die gerade erst in die Welt von Kubernetes einsteigen, ist die Go-to-Implementierung für mich GKE, da es die einfachste ist. Es ist einfach einzurichten, hat eine einfache und schnelle UX zum Spawnen und ist gut in das Google Cloud Platform-Ökosystem integriert.

Obwohl AWS als letztes ins Rennen gegangen ist, hat es einige unbestreitbare Vorteile, wie z. B. Bare-Metal-Knoten und die einfache Tatsache, dass es mit dem Anbieter mit dem größten Mind-Share integriert ist.

Schließlich hat AKS seit seiner Gründung große Fortschritte gemacht. Tooling und Feature-Parität werden wahrscheinlich nicht lange dauern und dabei Raum für Innovationen lassen. Und wie bei jedem verwalteten Kubernetes-Angebot wird die Integration für diejenigen, die bereits auf der übergeordneten Plattform sind, ein Verkaufsargument sein.

Nachdem sich ein Team für einen Kubernetes-Cloud-Anbieter entschieden hat, kann es interessant sein, sich die Erfahrungen anderer Teams anzusehen, insbesondere die Misserfolge. Diese Post-Mortems spiegeln reale Fälle wider – immer ein guter Ausgangspunkt für die Entwicklung eigener Best Practices auf dem neuesten Stand der Technik. Ich freue mich auf Ihre Kommentare unten!

Verwandt: Ein Kubernetes-Service-Mesh-Vergleich