EKS - Elastic Kubernetes Service
Last updated
Was this helpful?
Last updated
Was this helpful?
AWS EKS ist eine managed Kubernetes Control Plane (abgebildet im sog. Master-Node - im Gegensatz zu den Worker-Nodes = Data-Plane), die den härtesten Teil eines abbildet. Das Control-Plane-Cluster läuft in einem von AWS managed VPC, hat aber eine Verbindung in das vom Kunden managed Worker-Cluster (abgebildet als Node-Groups).
man muss natürlich nicht AWS EKS verwenden, um Kubernetes auf EC2 zu nutzen. Man kann auch die Control-Plane vollkommen selbst bauen. Die Control-Plane ist allerdings der komplexe Part eines Kubernetes-Clusters. Man benötigt hier entsprechend Erfahrung und Zeit, um einen HA-Cluster zuverlässig (etcd Backup) bereitzustellen und alle 6 Monate eine Migration der Kubernetes Version vorzunehmen. Aus diesem Grund hat sich AWS entschieden EKS anzubieten. Kubernetes selbst ist Technologie-agnostic, d. h. das unterliegende Backend (Cloud, OnPrem) spielt keine Rolle für die Orchestrierung von Workload. Allerdings wird ein Backend benötigt und hier kommen natürlich alle Cloud-Anbieter (AWS; Azure, Google) in Frage ... man kann prinzipiell aber natürlich auch seine eigene Hardware bereitstellen.
Für die Data-Plane bietet AWS
EC2 Instanzen, NLBs (Network-Load-Balancers), EBS-Volumes,
oder AWS Fargate
oder beides
Die Data-Plane ist der einfache Teil, weil man hier nur eine Integration in den Cluster braucht um Compute-Ressourcen zur Verfügung zu stellen.
Der Elastic-Container-Service (ECS) stellt eine AWS-spezifische Alternative zu Kubernetes dar. Genau wie AWS-EKS kann es mit EC2 oder Fargate Ressourcen als Compute-Nodes arbeiten.
Der Fargate Ansatz reduziert den Maintenance Aufwand deutlich, da Auto-Scaling und VMs automatisch managed sind von AWS selbst. Dafür ist er in der Vielfalt limitiert (z. B. kein Support von DaemonSets).
Fargate verwendet letztlich auch EC2 Instanzen ... man muss sie aber nicht managen.
Der offizielle Amazon EKS Workshop ist eine tolle Einführung und ein MUST-HAVE für den Einstieg.
Amazon EKS Workshop
Videos
Nach einem initialen
steht das EKS-Cluster bereits zur Verfügung.
Verwendet man Amazon-EKS, so kann man sich per
die Konfiguration in eine Datei erzeugen lassen. Per Default ist es ~/.kube.config
. Hat man allerings eine KUBECONFIG
Umgebungsvariable gesetzt, dann wird diese Datei verwendet.
Ich bevorzuge für jedes Cluster eine eigene Datei in
~/.kube.config
(z. B.~/.kube/config-microk8s
,~/.kube/config-aws-eks
). Deshalb mache ich VOR der Cluster einexport KUBECONFIG=~/.kube/config-aws-eks
und anschließend dasaws eks update-kubeconfig
. Später kann ich dann zwischen den verschiedenen Clustern mit einem einfachexport KUBECONFIG=...
wechseln.
Eine Liste der im Account verfügbaren Cluster bekommt man per aws eks list-clusters
(die korrekte Konfiguration der AWS Credentials natürlich vorausgesetzt).
Mit der eksctl
wird das AWS EKS Cluster gemanaged. Mit
kann man besipielsweise ein AWS-EKS-Cluster erzeugen. Bei diesem einzelnen Befehl werden sehr viele AWS-Ressourcen erstellt und miteinander über Konfiguration verknüpft. Somit ist das ekscli
ein sehr mächtiger Apparat, der auf hohem Abstraktionslevel sitzt.
Diese CLIs sind i. a. sehr praktisch für die Fehleranalyse. Für die Administration (Erstellung/Konfiguration/Löschung) eines Clusters sind sie aber nicht erste Wahl, da die Wahrscheinlichkeit hoch ist, dass durch die fehlende Automatisierung Snowflake Server entstehen (Kommandos werden in einer bestimmten Reihenfolge evtl. sogar fehlerhaft oder unvollständig) ausgeführt werden. Aus diesem Grund empfiehlt sich für die Administration Terraform oder AWS Cloudformation.
Es ist ok eksctl
für gelegentlich Abfragen über das Cluster zu verwenden (z. B. zur Fehleranalyse). Vielleicht ist es auch ein nettes Learning, mal ein Cluster damit aufzubauen.
nur wenn self-managed EC2 Instanzen als Worker-Nodes verwendet
in AWS verwendet man Node-Groups, um die Worker-Nodes in Gruppen zu separieren
Der EKS-Service-Account ist die AWS-Identität, mit der die Kubernetes Ressourcen (z. B. Pods) arbeiten ... der Pod wird mit dem Service-Account assoziiert. Insofern hängen hier u. a. Berechtigungen dran.
Der Service-Account ist vergleichbar mit einem technischen User-Account
Der erzeugt ein Cluster (ACHTUNG: signifikante KOSTEN) und auch eine Cloud9 Entwicklungsumgebung, so dass man die Beispiele leicht nachvollziehen kann, ohne die ganzen Tools lokal selbst installieren zu müssen. Über lässt sich der Umfang leicht konfigurieren. Ein Reset ist leicht über ein einziges Kommando zu bewerkstelligen (``).
Step-by-Step Workshop wie man ein AWS EKS Cluster auf Basis des aufsetzt. Diese Projekt bietet schon eine Vielzahl von .
Allerdings sollte man jegliche Infrastruktur-Komponenten mit Infrastructure-as-Code managen (z. B. ). Tut man das nicht entstehen Snowflake-Installationen, die nur noch manuell gemanged werden können und das ist sehr fehleranfällig und kaum nachvollziehbar. Mit Terraform kann man auch schnell mal erstellte (teure) Infrastruktur mit einem einzigen Kommando wieder abbauen. Insofern ist das auch in Lernsituationen die bessere Variante.
Der verwendet eine Auto-Scaling-Group, um die Anzahl der Nodes lastabhängig zu steuern.
neben diesem Node-Scaling gibt es auch ein Auto-Scaling auf Pod-Ebene ()