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 volledigeorkestratie 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.