Kubernetes in AWS - duik in EKS

Het is 'in' - Kubernetes draaien in de cloud. Er zijn een aantal overtuigende voordelen van Kubernetes. Je configureert een compleet draaiende container op je lokale computer. Alles staat erop. Besturingssysteem, bestandssysteem, je Java- en Python-code, je front-end applicatie, en wanneer wenselijk een lokale database.

Zo'n lokale database - handig tijdens het ontwikkelen - kan je in een in een productiecontext makkelijk vervangen. Je hoeft alleen de connectie-settings te wijzigen. Je kan hierdoor de database als een aparte Docker-instantie draaien. Zo faciliteert een Kubernetes cloud architectuur een modulaire opbouw van je cloud systeem. Je elementaire bouwstenen zijn containers.

Kubernetes biedt meer voordelen in je cloud-opbouw. Naast de modulaire opzet van cloud-services, is command line configuratie van Kubernetes-services de way-of-working. Met een handvol aanroepen in de AWS cli kan je een complete Kubernetes cluster aanmaken
Je gebruikt gewoon de 'Clis', voor AWS is dat de AWS Cli. Met een handvol aanroepen in de AWS cli kan je een complete Kubernetes cluster aanmaken in EKS-AWS, in minder dan 10 minuten. Hieronder is een AWS architectuurontwerp te zien:
EKS-AWS setup waar je eerst een Docker-image bouwt lokaal. Inloggen in de aws console (met Google Authenticator). Upload Docker-image in de ECR-repository. Daarna gebruik je de aws cli om samen met eksctl je managed Kubernetes cluster aan te maken (met je Docker-image).
De figuur hierboven laat zien dat ECR en EKS beide vanuit de command line (aws cli) worden geconfigureerd. In deze flow wordt de docker-image in AWS ECR geupload, maar je kan ook deze image naar de Docker Hub uploaden, en aws eks haalt daar de docker image.

Managed Kubernetes betekent dat AWS de aansturing (maar niet de autoscaling) van de Kube-pods voor je doet:
Amazon Elastic Kubernetes Service (EKS) biedt een volledig beheerde Kubernetes-service die de complexiteit van het gebruik van Kubernetes-clusters wegneemt. Met EKS kan je: Applicaties sneller implementeren met minder operationele overhead, Naadloos schalen om te voldoen aan veranderende workloadvereisten, AWS-doc
Dat EKS je Kubernetes cluster gaat managen, betekent een makkelijke opzet van EKS voor je, waardoor configuratie en deployment van je Docker-container met een handvol aanroepen lukt. De Kubernetes API server, etcd (database van Kubernetes control plane), Scheduler, en Networking (CNI) wordt voor je managed. Met additionele configuraties kan je ervoor zorgen dat je Kubernetes cluster goed blijft draaien, wanneer er meer CPU-load wordt gevraagd, of het geheugen in de bestaande pods tegen de limiet gaat.
De Managed EKS Kubernetes control plane (KCP). AWS configureert, start en draait alle 5 de componenten in de KCP.
De Kubernetes control plane (KCP) bevat de volgende vijf onderdelen:
  • Kubernetes controller manager: Draait controllers om Kubernetes API-gedrag te implementeren.
  • Cloud controller manager: Integreert met onderliggende cloudprovider aws.
  • Kube-apiserver: De front-end voor het Kubernetes Control Plane dat de Kubernetes API beschikbaar stelt. De API-server is ontworpen om horizontaal te schalen (schalen door meer instanties te implementeren).
  • ects - Kubernetes control plane database: Een consistente en zeer beschikbare sleutelwaardeopslag die wordt gebruikt als Kubernetes-backingopslag voor alle clustergegevens.
  • Kube-scheduler: Zoekt naar Pods die nog niet aan een node zijn gekoppeld en wijst elke Pod toe aan een geschikte node.

Zoveel wordt er voor je ingericht en opgestart op EKS-AWS wanneer je een Kubernetes cluster aanmaakt met een enkele aanroep naar eksctl. En 'Managed EKS' beheert de 'KCP'.

Complete autoscaling van je EKS Kubernetes cluster, nodes en pods is niet inbegrepen in 'Managed EKS'. Meer - specifieke - EKS features moeten hiervoor worden worden gebruikt:
  • Horizontal Pod Autoscaler (HPA): Schaalt pods (aantal replica's) op basis van CPU, geheugengebruik en internetverkeer
  • Cluster Autoscaler (CAS), of Karpenter: Schaalt nodes (EC2 of beheerde nodes) op basis van wanneer Pods niet live kunnen gaan vanwege onvoldoende CPU/geheugen, knooppunten raken leeg → CA kan terugschalen
Om je doelstelling te realiseren dat je een volledig zelf-schalende EKS-Kubernetes cluster draait in de AWS cloud, dan moet je 'full managed EKS' kiezen, en je moet ernaast ook de EKS Horizontal Pod Autoscaler en de EKS Cluster Autoscaler inzetten.

Met deze elementen volledig geconfigureerd relealiseer je Kubernetes orkestratie - in EKS. Het vergt veel cloud expertise om een effectieve en tegelijk kostenefficiënte volledige orkestratie te ontwikkelen.

Hexagonale architectuur met Kubernetes

Met een Kubernetes cloud-cofiguratie ga je mee in een recentere stroming - een hexagonale architectuur. Hierin moet de kern van je IT-systeem (het domein) volledig onafhankelijk zijn van technologie, frameworks, databases, en de verdere buitenwereld.
Integratie van kubernetes in de cloud - als deel van een hexagonale IT-architectuur. Het Kubernetes cluster moet opgezet zijn zodat het direct inwisselbaar is door de complete applicatie met alle zijn services, opslag, bronnen, poorten en adaptors.
Een opzet met Pods in een managed Kubernetes omgeving laat zich makkelijk overhevelen van bijv. Azure-Kubernetes naar AWS-EKS, of vice versa. De cli-aanroepen wijzigen iets, maar in grote lijnen blijft de opzet hetzelfde in de beide cloudomgevingen.

Observability

Het is essentieel om te monitoren hoe goed een cloud IT-systeem werkt, en ook incidenten meteen op te sporen. Met Prometheus verzamel je run-gegevens (metrieken) via voor dit doel voorgedefinieerde rest-endpoints van je Pods. Met worden deze metrieken gevisualiseerd, naast evt. logs/traces. Gafana is puur een frontend — geen data-opslag of data scraping.



Javaka Professionals BV