👁️
pierreinside
  • Introduction
  • Workbench
    • VirtualBox
    • Linux
      • Linux-Paketverwaltung
      • Linux Initialisierung
      • Ubuntu 14.10 LTS
      • Ubuntu 16.04 LTS
      • Ubuntu 18.04 LTS
      • Ubuntu 20.04 LTS
      • Ubuntu - Netzwerk
    • Konsole
      • ssh
      • zsh
      • cygwin
      • Babun
      • terminator
      • Terminal Multiplexer
      • Linux Tools
    • awesome
    • Entwicklungsumgebungen
      • Texteditors
      • Visual Studio Code
      • IntelliJ - IDEA
  • Softwareentwicklungsprozess
    • Schätzungen
    • Eventstorming
    • OKR
  • Architektur
    • Uncle Bob
    • Microservices
    • NoSQL
      • ElasticSearch
    • Hystrix
    • Reactive Programming
    • AngularJS
    • Service Mesh
  • Networking
    • Dependency Injection
  • Programming
    • Java Core/EE
      • Java 8
      • Java Annotationen
      • Bean Validation
      • Enterprise Java Beans Specification
      • Dependency Injection
    • JRebel
    • Webservices
      • HTTP
      • REST
      • Spring MVC REST
      • Swagger
      • Postman
    • Spring Ecosystem
      • Spring Core
      • Spring Boot
        • Programming
        • Production Ready
        • Testing
      • Spring Cloud
      • Spring Cloud Config
      • Spring MVC
      • Spring Data
      • Spring Petclinic
    • NodeJS
    • UI-Technologie
      • Thymeleaf
      • ionic
      • Web Fonts
      • Jinja Templates
      • Twitter Bootstrap
    • Python Ecosystem
      • Python Libraries
      • Python Testing
      • Python Best-Practices
      • Python Snippets
      • Python Selenium
      • Kivy UI
      • FastAPI
      • Typer CLI
      • Django
    • Groovy
    • Persistenz
      • Transactions
        • Java TX
        • JPA TX
      • TX Handling
      • JPA
        • Eclipse Link
      • MySQL
        • MySQL Performance
        • Docker MySQL
      • Hazelcast
    • Glassfish
    • YAML
    • Angular
    • Camel
    • Zeichenkodierung
    • Kinder lernen Programmieren
  • Testen
    • Easymock
    • Mockito
  • Performance & Scalability
    • Java Performance
      • Heapdump Analysis
    • Java Concurrency
    • Instana
  • Sicherheit
    • Authentifizierung
      • OpenID Connect
      • Web-Authentication API
    • Authorisierung
      • OAuth
      • SAML
    • Spring Security
    • Zertifikate
    • Kali Linux
    • VPN
    • Zero-Trust-Networks
  • Build und Deployment
    • Maven
    • Bamboo
    • Jenkins
      • Jenkins Pipelines
      • Jenkins Pipelines Tips und Tricks
      • Jenkins-configuration-as-Code
      • Jenkins IDE
    • Travis CI
    • Shellprogrammierung
      • jq - JSON Parsing
    • Konfiguration Management
    • Vagrant
      • Vagrant-Ansible-Integration
      • Vagrant Box bauen
    • Ansible
      • Getting Started
      • Ansible Details
    • Saltstack
    • LinuxKit
    • Container
      • Docker
        • Docker Getting Started
        • Debugging Docker
        • Docker Build
        • Docker Registry
        • Docker run
          • docker run
          • docker network
        • Docker Compose
        • docker machine
        • Docker@Windows
        • Docker Host
        • Docker Scaling
        • Docker Ressources
        • Docker Logging
        • windowsContainer
      • Cloud Deployment Provider
        • AWS
          • Anwendungsdeployment
          • Workload
          • Permissions
          • Netzwerke
          • AWS CLI
            • aws-vault
          • RDS
          • Static Website Hosting
          • EKS - Elastic Kubernetes Service
          • S3
        • Google Cloud Platform
      • Docker Orchestrierung
        • CoreOS
        • Kubernetes
          • microK8s
          • minikube
          • autoscaler
          • Docker
          • k9s
        • Nomad
    • PHP
  • Operations
    • Proxy
      • NGINX
    • DNS
    • Logging
      • Graylog
      • Fluentd
    • Monitoring
      • Grafana
    • Infrastructure-as-Code
      • Terraform
        • AWS-Provider
        • GitHub-Provider
      • Packer
    • Deployment
      • Vault
      • Consul
        • Consul Template
      • Fabio
  • Rechtliches
    • Software-Lizenzen
  • Git Ecosystem
    • Git
      • Git Lifecycle Hooks
    • GitHub
      • GitHub Organizations
    • GitHub Actions
    • GitHub Pages
    • GitHub CLI
    • GitHub Copilot
    • GitHub-AWS OIDC
    • GitBook
    • GitLab
    • Bitbucket/Stash
  • Publishing
    • WordPress
    • Markdown
    • Static Site Generators
      • Hugo
      • Jekyll
    • Tiddly Wiki
    • Leanpub
    • Animationsfilme
  • Storage
    • Synology 2012
    • Synology 2021
  • Collaboration
    • Übersicht
    • Microsoft Teams
  • Konferenzen
    • Velocity Berlin 2019
  • IT mit Kindern
    • Projekt Sportstracker
    • Scratch
    • Pico Spielekonsole
  • Schule
    • Mathematik
  • Misc
    • Foto/Video
      • Foto/Video Sammlung bis 2023
        • Handbrake
        • Onedrive
      • Foto/Video Sammlung ab 2024
      • Gopro
      • Panasonic FZ1000 ii
        • als Webcam
      • AV Receiver
      • Videos erstellen
        • OBS Studio
        • Touch Portal
        • Game-Streaming
      • Kameratasche
      • Kamera 2020
    • Handy
      • 2016
      • 2018
      • 2019
      • 2021
      • 2022
    • Computer
      • Laptop
        • 2018
        • Chromebook
      • Monitor
        • 4k
      • Software
        • Command Line Interface
        • Google API
        • Plant UML
        • Chromium
        • Passwort-Manager
        • GPG
      • Dell CNF 2665 Farbdrucker
      • Dockingstation
      • Gaming PC 2021
      • Mobiles Büro
      • Mobiles Internet
      • Mobiler Router
    • Beamer Benq W1000+
    • Spielekonsole
      • 2017
        • Playstation 4
      • Pico Spielekonsole
    • Gadgets
      • iPad Pro 2015 und 2016
      • iPad Air 2024
      • Macbook Pro
      • Smartwatch
      • Slate
      • Mudi
    • Fahrrad
      • Jonas 2018
      • SQLab
    • Auto
      • Auto 2022
      • Camping
        • Camping Touren Ideen
          • Camping Tour - Gardasee 2021
        • Camper
          • Camper klein - keine Stehhöhe
            • VW Bus Erfahrungen
          • Camper gross - Stehhöhe
    • Haus
      • Klimaanlage
      • Swimming Pool
      • Quick Mill Orione 3000
      • Spülmaschine 2021
      • Hebe-Schiebetür
      • Gasgrill
      • Minibar / Mini-Kühlschrank
      • Glasfaseranschluss (Fiber-to-the-Home)
      • Smart-Home
        • Raspberry Pi
        • Heimnetzwerk
      • Homeoffice
      • Energie
        • Solar
        • Wärmepumpe
    • Freizeit
      • Musik Streaming
      • Sky
      • Online Lernplattformen
      • eScooter - ePowerFun
    • Fußball
      • Meine Arbeit als Fußball-Trainer
      • Fußball Tools
      • DFB Talentförderung
    • Google Impact Challenge
  • Englisch
Powered by GitBook
On this page
  • AWS Elastic Kubernetes Service
  • AWS-EKS vs AWS-ECS
  • EC2 vs Fargate Data Plane
  • AWS EKS Workshop
  • kubectl CLI
  • eksctl CLIs
  • Bewertung
  • AWS Node-Group
  • Node Auto-Scaler
  • Ingress
  • Service-Account

Was this helpful?

  1. Build und Deployment
  2. Container
  3. Cloud Deployment Provider
  4. AWS

EKS - Elastic Kubernetes Service

AWS Elastic Kubernetes Service

  • Kubernetes@pierreinside

  • EKS Terraform Blueprint

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 Kubernetes Clusters 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.


AWS-EKS vs AWS-ECS

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.


EC2 vs Fargate Data Plane

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.


AWS EKS Workshop

Der offizielle Amazon EKS Workshop ist eine tolle Einführung und ein MUST-HAVE für den Einstieg.

  • Amazon EKS explained

  • Amazon EKS Workshop

    • Dokumentation

    • code eks-workshop-v2 auf GitHub

    • Videos

      • Part 1

      • Part 2

      • Part 3

      • Part 4

      • Part 5

      • Managed Nodes

      • Fargate

        • Dokumentation

Der Terraform-Code 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 Addons 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 aws-samples/eks-workshop-v2 GitHub repos aufsetzt. Diese Projekt bietet schon eine Vielzahl von .

Nach einem initialen

terraform apply -auto-apply

steht das EKS-Cluster bereits zur Verfügung.


kubectl CLI

siehe hier @pierreinside

Verwendet man Amazon-EKS, so kann man sich per

aws eks --region <aws_region> update-kubeconfig --name <cluster-name>

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 ein export KUBECONFIG=~/.kube/config-aws-eks und anschließend das aws eks update-kubeconfig. Später kann ich dann zwischen den verschiedenen Clustern mit einem einfach export 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).


eksctl CLIs

  • Homepage

Mit der eksctl wird das AWS EKS Cluster gemanaged. Mit

eksctl create cluster \
  --name my-eks-cluster \
  --region eu-central-1 \
  --ssh-access \
  --ssh-public-key=my-public-keypair \
  --node-type=m5.large \
  --nodes=2

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.

Bewertung

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.

Allerdings sollte man jegliche Infrastruktur-Komponenten mit Infrastructure-as-Code managen (z. B. via terraform). 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.


AWS Node-Group

nur wenn self-managed EC2 Instanzen als Worker-Nodes verwendet

  • in AWS verwendet man Node-Groups, um die Worker-Nodes in Gruppen zu separieren


Node Auto-Scaler

Der AWS Cluster-Autoscaler 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 (siehe Horizontal-Pod-Autoscaler)


Ingress


Service-Account

  • kubernetes.io - Managing Service Accounts

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

PreviousStatic Website HostingNextS3

Last updated 8 months ago

Was this helpful?