Ga naar hoofdinhoud

Kubernetes-tutorial: een beginnersgids voor het deployen van applicaties

Leer Kubernetes door te doen! Deze gids laat je zien hoe je lokaal een Kubernetes-cluster opzet, apps deployt en resources efficiënt beheert.
· 13 min lezen

Verken met AI

Toen ik begon als machine learning engineer, merkte ik al snel dat het bouwen van modellen niet de grootste uitdaging was. Ze op een betrouwbare en schaalbare manier in productie brengen wél. 

Toen maakte ik kennis met Kubernetes, de containerorchestrator waar iedereen in de sector het over leek te hebben.

In het begin worstelde ik met de complexe architectuur. Ik probeerde meer te leren via documentatie en gidsen over Kubernetes die de basis uitlegden. Maar toch vond ik het lastig om te doorgronden.

Dat veranderde toen ik de concepten zelf ging toepassen. Door mijn eigen Kubernetes-cluster op te zetten, te experimenteren met verschillende configuraties en kleine applicaties te deployen, vielen de puzzelstukjes langzaam op hun plek. Die praktijkervaring gaf me vertrouwen, en uiteindelijk begreep ik hoe Kubernetes applicatiebeheer op schaal kan vereenvoudigen.

Deze tutorial is bedoeld om jou dezelfde hands-on ervaring te geven. Of je nu een beginner bent of je basis wilt versterken, deze gids begeleidt je bij het opzetten van een lokaal Kubernetes-cluster, het deployen van applicaties en het efficiënt beheren van resources. 

Aan het einde heb je een solide begrip van de Kubernetes-basis en ben je klaar om deze skills toe te passen op real-world applicaties!

Voordat je begint

Laten we de vereisten en tools doornemen die je nodig hebt om deze gids te volgen. 

Vereisten

  • Basiskennis van de command-line: Je kent de fundamentele Linux-commando’s voor het navigeren door mappen, uitvoeren van opdrachten en bewerken van bestanden, want Kubernetes werkt via de command-line. Denk aan commando’s als cd en ls en eenvoudige tekstbewerking met nano of vim.
  • Inzicht in containers: Begrip van containerisatieconcepten en tools zoals Docker. Leer meer over Docker in de cursussen Introduction to Docker en Intermediate Docker.
  • YAML: Je bent bekend met YAML-bestanden en hun syntax. Dit is essentieel, want in Kubernetes wordt alles via YAML-bestanden beheerd.
  • (Optioneel) Cloudomgevingen: Bekendheid met public cloud-platforms zoals AWS, Azure of GCP en hun beheerde Kubernetes-diensten (bijv. EKS, AKS, GKE). Handig als je later wilt overstappen van een lokale naar een cloudopzet.

Tools

  • minikube: Tool om lokaal een single-node Kubernetes-cluster te draaien (we behandelen de installatie).
  • kubectl: De Kubernetes-commandline om met clusters te communiceren (we behandelen de installatie).
  • Teksteditor: Elke editor voor het maken en bewerken van YAML-bestanden. Als aanbeveling: gebruik een tool met YAML-extensies om je leven makkelijker te maken (bijv. VSCode).

Omgeving

  • Hardware: Minimaal 2 CPU’s, 2 GB vrije geheugen en 20 GB vrije schijfruimte.
  • Container-manager: Voor het beheren van containerimages (bijv. Docker, Podman).

Wil je leren hoe Kubernetes en Docker zich tot elkaar verhouden? Bekijk deze uitgebreide vergelijking tussen Kubernetes en Docker om hun rol in containeromgevingen te begrijpen.

Je lokale Kubernetes-cluster opzetten

Laten we nu concreet worden en je lokale Kubernetes-cluster opzetten! 

Maar wat is een Kubernetes-cluster? Een Kubernetes-cluster is een verzameling nodes die samenwerken om je applicaties te draaien. Het bestaat uit twee componenten: 

  1. Control plane: Beheert het cluster en regelt taken zoals het inplannen van applicaties, het bewaken van de gewenste status en het schalen van je applicaties naar die gewenste status.
  2. Worker-nodes: Machines die je applicaties draaien in Pods, de kleinste eenheden in Kubernetes (daarover later meer). 

Kernonderdelen van Kubernetes.

Kernonderdelen van Kubernetes. Afbeelding door Kubernetes.io

Minikube installeren

Minikube kan worden geïnstalleerd op Windows, Linux en macOS. Volg de instructies in de sectie Get Started van de officiële Minikube-documentatie.

Ik werk op Windows maar gebruik WSL2 omdat ik de Linux-interface prettiger vind. Wil je WSL2 instellen op je Windows-machine, lees dan de Microsoft Install guide.

kubectl installeren

kubectl is de commandline-interface voor je Kubernetes-resources. Je kunt het installeren via de officiële Kubernetes-documentatie of via de geïntegreerde installatie in minikube.

 Ik raad aan om de officiële Kubernetes-documentatie te volgen, zodat je kubectl als los commando kunt gebruiken. Met minikube moet je commando’s met het voorvoegsel minikube uitvoeren.

Een minikube-cluster starten

Nu we minikube hebben geïnstalleerd, kunnen we een cluster starten vanuit een terminal met beheerdersrechten met het volgende commando: 

minikube start

Dit commando haalt automatisch de benodigde Kubernetes-binaries op en start voor jou een single-node-cluster. 

Het cluster verifiëren

We kunnen nu de status van het cluster controleren om te zien of alles draait zoals verwacht:

minikube status

Dat zou ongeveer het volgende moeten opleveren:

minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured

We kunnen nog een stap verder gaan en met kubectl alle nodes van ons cluster ophalen, wat er één zou moeten zijn: 

kubectl get nodes 

Het bovenstaande commando zou iets soortgelijks moeten teruggeven: 

NAME       STATUS   ROLES           AGE   VERSION
minikube   Ready    control-plane   10m   v1.32.0

Het cluster stoppen

Als je het cluster wilt stoppen om resources vrij te maken wanneer je het niet nodig hebt, kun je dit uitvoeren: 

bash
minikube stop

Start het de volgende keer gewoon opnieuw wanneer je verder wilt werken met Kubernetes.

Het cluster verwijderen

Als je je minikube-cluster en alle toegevoegde resources volledig wilt verwijderen, voer je dit uit:

minikube delete

Kubernetes-basis: Pods, Deployments, Services en Namespaces

Nu we een cluster hebben opgezet en gecheckt dat alles werkt, is het tijd om onze eerste applicatie te maken.

Maar voor we de eerste applicatie maken, is het essentieel om de basis van Kubernetes te begrijpen. Wil je een diepere introductie tot Kubernetes, kijk dan zeker de cursus Introduction to Kubernetes.

De meest basale concepten in Kubernetes zijn Pods, Deployments en Services. Met deze drie resourcetypen kun je krachtige applicaties maken. Laten we er dus dieper op ingaan.

Wat zijn Pods?

Een Pod is de kleinste deploybare eenheid in Kubernetes. Hij draait één of meer nauw samenwerkende containers met hetzelfde storage-, netwerk- en namespace-domein. Een Pod wordt altijd ingepland op een Kubernetes-node. 

Je kunt aangeven hoeveel resources je Pod moet krijgen (bijv. CPU en geheugen). 

Een voorbeeldapplicatie met twee containers kan jouw applicatiecontainer zijn en een helpercontainer die logs verzamelt en doorstuurt. 

Eigenschappen van een Pod:

  • Enkele instantie: Elke Pod draait één instantie van je applicatie.
  • Van nature vluchtig: Pods zijn tijdelijk en worden vervangen als ze falen of worden geüpdatet.

Voorbeeld-YAML om een Pod te maken:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: nginx-container
    image: nginx:1.21
    ports:
    - containerPort: 80

Je kunt de Pod daarna installeren met kubectl:

kubectl apply -f pod.yaml

Dit start een Pod met de naam my-pod die een nginx-webserver voor je draait.

Wat zijn Deployments?

Een Deployment is een hoger-niveau Kubernetes-object om de lifecycle van Pods te beheren. Het zorgt dat het gewenste aantal Pod-replica’s draait en handelt updates en rollbacks af. 

Eigenschappen van een Deployment:

  • Replicabeheer: Zorgt dat het gewenste aantal pods altijd draait.
  • Zelfherstellend: Vervangt ongezonde Pods automatisch.
  • Rolling updates: Update de applicatie stapsgewijs zonder downtime (indien geconfigureerd).

Zo ziet een Deployment-YAML eruit die opnieuw een nginx-webserver maakt, maar nu met drie replica’s:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.21
        ports:
        - containerPort: 80

Je kunt dat Deployment installeren met kubectl:

kubectl apply -f deployment.yaml

Bovenstaand maakt een Deployment met de naam nginx-deployment dat drie Pods aanmaakt, elk met de nginx-container. 

Wat zijn Services?

Dan het laatste onderdeel: de services. 

Een Service is een abstractie die stabiele netwerktoegang tot Pods biedt, zelfs als hun IP-adressen veranderen. Het fungeert als brug tussen je applicaties en externe clients. 

Waarom is dat nodig? Elke Pod heeft een eigen IP-adres. Waarom kunnen we dat IP dan niet direct gebruiken? 

Dat kan! Maar het is niet verstandig. Waarom? 

Omdat een Pod vluchtig is: hij wordt door het Deployment beëindigd en opnieuw opgeschaald wanneer je Pod ongezond is. De nieuwe Pod krijgt dan een ander IP-adres. Dat zou betekenen dat de client die je applicatie gebruikt steeds het IP-adres moet aanpassen wanneer een Pod crasht, en dat kan vaak gebeuren.

Hier komt een Service om de hoek kijken: die zoekt naar alle Pods met een bepaald label en routeert het verkeer automatisch naar die Pods. Als een Pod ongezond wordt, stopt de Service met verkeer naar die Pod. En als er een nieuwe Pod opkomt, stuurt de Service verkeer naar de nieuwe Pod. 

De Service verdeelt het verkeer ook over alle replica’s van je Deployment. Dat is ideaal: je kunt meer instanties van je applicatie maken om verkeer te verdelen zonder dit in je applicatielogica te hoeven bouwen.

Typen Services:

  • ClusterIP (standaard): Stelt de Service binnen het cluster beschikbaar.
  • NodePort: Stelt de Service beschikbaar op een poort die buiten het cluster bereikbaar is.
  • LoadBalancer: Integreert met cloudproviders om de Service via een load balancer bloot te stellen.

Voorbeeld-YAML om onze nginx-webserver buiten het cluster beschikbaar te maken:

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  type: NodePort

Je kunt die service weer aanmaken met kubectl:

kubectl apply -f service.yaml

Deze Service verdeelt nu inkomend verkeer naar alle Pods met het label app=nginx op poort 80. 

Als je een describe-commando uitvoert op je nieuw aangemaakte Service, zie je dat er nu drie endpoints zijn; elk endpoint is het IP-adres van een Pod die momenteel draait:

kubectl describe service nginx-service

Het bovenstaande commando zou iets vergelijkbaars teruggeven als: 

Name:                     nginx-service
Namespace:                default
Labels:                   <none>
Annotations:              <none>
Selector:                 app=nginx
Type:                     NodePort
IP Family Policy:         SingleStack
IP Families:              IPv4
IP:                       10.104.53.131
IPs:                      10.104.53.131
Port:                     <unset>  80/TCP
TargetPort:               80/TCP
NodePort:                 <unset>  32256/TCP
Endpoints:                10.244.0.5:80,10.244.0.6:80,10.244.0.7:80
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

Relaties tussen Pods, Deployments en Services

Kort samengevat:

  • Pods: Stellen individuele applicatie-instanties voor.
  • Deployments: Beheren de lifecycle van Pods en bewaken hun gezondheid.
  • Services: Bieden stabiele toegang tot Pods en maken externe of interne communicatie mogelijk.

Wat zijn Namespaces?

Namespaces in Kubernetes laten je resources binnen een cluster organiseren en isoleren. Je kunt ze zien als virtuele clusters binnen hetzelfde fysieke cluster. 

Voordelen van Namespaces:

  • Scheiding van verantwoordelijkheden: Verschillende teams of applicaties kunnen in hun eigen namespace werken zonder anderen te beïnvloeden. 
  • Resourcemanagement: Je kunt resourcequota en limieten instellen per namespace.
  • Beveiliging en toegang: Beleid kan op namespace-niveau worden afgedwongen.

Standaard levert Kubernetes een paar ingebouwde namespaces:

  • default: De standaardnamespace waar resources worden aangemaakt, tenzij anders opgegeven
  • kube-system: Voor interne Kubernetes-componenten (bijv. API-server, scheduler, etc.).
  • kube-public: Een publiek leesbare namespace.
  • kube-node-lease: Voor het bijhouden van node-heartbeats.

Je kunt een namespace aanmaken met een YAML-bestand: 

apiVersion: v1
kind: Namespace
metadata:
  name: my-namespace

Sla dat op als namespace.yaml en pas het toe met: 

kubectl apply -f namespace.yaml

Als je het onderstaande commando draait, zie je een lijst met alle standaard-namespaces plus de nieuw aangemaakte: 

kubectl get namespaces

Je kunt daarna resources in die namespace aanmaken door simpelweg de namespace in de metadata-sectie van je resource te zetten. 

Ons nginx-Deployment ziet er als volgt uit als we het in je nieuw aangemaakte namespace willen maken:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: my-namespace
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.21
        ports:
        - containerPort: 80

Nu moet je expliciet aangeven dat je resources uit je nieuw aangemaakte namespace wilt ophalen met het -n argument: 

kubectl get deployment -n my-namespace

Je eerste applicatie beheren met Kubernetes

Oké, nu je bekend bent met de basisconcepten van Kubernetes, is het tijd om onze eerste webapplicatie te deployen naar Kubernetes en te proberen die te benaderen. 

In dit hoofdstuk maken we een nginx-webserver, stellen we die via een Service bloot aan de buitenwereld, schalen we de applicatie om hoge verkeersbelasting te simuleren en updaten we de applicatie met een rolling update naar een nieuwere versie.

Dus, laten we aan de slag gaan!

Een eenvoudige webapplicatie-deployment maken

De eerste stap is een Deployment maken voor onze webserver die een container op basis van de Nginx-image creëert.

Kopieer de onderstaande code en sla die op als nginx-deployment.yaml.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

Pas dat Deployment vervolgens toe op je cluster met het volgende commando:

kubectl apply -f nginx-deployment.yaml

Je kunt daarna verifiëren dat de Pod draait: 

kubectl get pods

De applicatie blootstellen met een service

We moeten de nginx-webserver via een Service aan de buitenwereld blootstellen. Hiervoor maken we een Service van het type NodePort, omdat we de nginx-webserver willen benaderen vanaf onze lokale machine buiten het Kubernetes-cluster.

Maak dus een bestand nginx-service.yaml en voeg de volgende inhoud toe:

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  type: NodePort

Je kunt de Service dan toepassen met het onderstaande commando:

kubectl apply -f nginx-service.yaml

Tot slot kun je minikube gebruiken om de URL van je nginx-webserver op te halen:

minikube service nginx-service --url

Open die URL in je browser en je zou de welkomstpagina van je nginx-webserver moeten zien.

Screenshot van een nginx-webserver welkomstpagina in een lokale browser.

Screenshot van een nginx-webserver welkomstpagina in een lokale browser.

De applicatie schalen

We hebben één Pod die draait. Maar er kan een grote toestroom aan gebruikers zijn die onze webpagina bezoeken. Daarom kun je in Kubernetes je applicatie snel schalen zodat er meer Pods draaien. 

De Service detecteert automatisch alle Pods die bij dat Deployment horen en verdeelt inkomende requests over alle Pods die de nginx-webserver draaien. Dit helpt de algehele performance van onze webpagina te verbeteren wanneer er veel verkeer binnenkomt.

Laten we onze applicatie opschalen naar 3 replica’s met het onderstaande commando:

kubectl scale deployment nginx-deployment --replicas=3

Je kunt nu opnieuw alle draaiende Pods opvragen; dat zouden er drie moeten zijn:

kubectl get pods

Je kunt ook het onderstaande commando gebruiken om alle endpoints op te vragen waarmee onze nginx-service is verbonden. Dit zou drie endpoints moeten teruggeven, elk een eigen intern cluster-IP-adres:

kubectl get endpoints nginx-service

Rolling updates

Nu komen we bij een ander groot voordeel van Kubernetes: rolling updates.

Het doel van een rolling update is om downtime van je webapplicatie te voorkomen. Stel je de financiële schade voor bij bedrijven als Amazon als hun website telkens onbereikbaar zou zijn bij een nieuwe release.

Met een rolling update schaalt Kubernetes een nieuwe Pod op, controleert of die gezond is, en schaalt dan de oude af. 

Standaard zorgt Kubernetes dat minstens 75% van het gewenste aantal Pods draait, waarbij 25% maximaal onbeschikbaar mag zijn. In ons geval, met drie replica’s, voegt Kubernetes dus telkens één nieuwe Pod toe, checkt of die gezond is en schaalt vervolgens een andere Pod af. Dat herhaalt het tot alle Pods zijn geüpdatet naar de nieuwe versie.

Laten we dat nu doen door de versie van onze nginx-image te wijzigen van latest naar 1.23:

kubectl set image deployment/nginx-deployment nginx=nginx:1.23

Je kunt de uitrolstatus volgen met: 

kubectl rollout status deployment/nginx-deployment

De output ziet er ongeveer zo uit: 

Waiting for deployment "nginx-deployment" rollout to finish: 1 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 1 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 1 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 1 old replicas are pending termination...
Waiting for deployment "nginx-deployment" rollout to finish: 1 old replicas are pending termination...
deployment "nginx-deployment" successfully rolled out

En terwijl de uitrol bezig is, blijft je webpagina de hele tijd bereikbaar zonder downtime!

Geweldig toch?

Kubernetes-resources beheren

Kubernetes biedt krachtige tools om resources van alle typen te inspecteren, wijzigen en verwijderen. Begrijpen hoe je resources effectief beheert, zorgt voor betere troubleshooting, resourceallocatie en algemeen clustonderhoud. 

In deze sectie gaan we in op andere essentiële commando’s die helpen je resources effectief te beheren en problemen op te lossen als die zich voordoen.

Clustresources bekijken

Voordat je resources wijzigt, is het belangrijk om de momenteel draaiende resources in je cluster te bekijken en te inspecteren.

Je kunt bijvoorbeeld alle draaiende Pods, Services en Deployments opvragen om te zien wat er in je cluster gebeurt: 

# list running Pods
kubectl get pods

# list running Services 
kubectl get services

# list running Deployments
kubectl get deployments

Wil je dieper graven in een specifieke resource, gebruik dan het describe commando:

kubectl describe deployment nginx-deployment

Dit toont meer informatie, waaronder rolling updates, schalen of image-pull-events. Dit is het eerste aanknopingspunt als er iets misgaat.

Je kunt ook de logs van een draaiende Pod bekijken om te zien wat er binnen die Pod gebeurt met het onderstaande commando:

kubectl logs <pod-name>

Resources verwijderen

Het is ook belangrijk om resources op te ruimen wanneer ze niet meer worden gebruikt, zodat clustresources vrijkomen voor nieuwe applicaties. 

Je kunt een Pod verwijderen met:

kubectl delete pod <pod-name>

We kunnen dit doen voor een van onze nginx-pods. Er zou echter meteen een nieuwe Pod worden opgeschaald, omdat ze worden beheerd via een Deployment, dat altijd probeert drie replica’s draaiende te houden. 

Hier moeten we dus het nginx-deployment verwijderen: 

kubectl delete deployment nginx-deployment

Na dit commando moeten alle draaiende nginx-Pods zijn verwijderd. 

We kunnen ook alle resources in een Namespace verwijderen. Het volgende commando verwijdert alle resources die standaard in de default Namespace zijn aangemaakt:

kubectl delete all --all

Conclusie

Gefeliciteerd! Je bent tot het einde gekomen en hebt je eerste stappen in Kubernetes gezet. 

Door deze tutorial te volgen, heb je geleerd om:

  • Een lokaal Kubernetes-cluster op te zetten met minikube.
  • Te werken met Pods, Deployments, Services en Namespaces (de essentiële bouwstenen van Kubernetes).
  • Een eenvoudige webapplicatie te deployen en te beheren binnen Kubernetes.
  • Applicaties dynamisch te schalen en rolling updates uit te voeren zonder downtime.
  • Kubernetes-resources te beheren door ze te lijsten, te beschrijven en te verwijderen.

Kubernetes kan in het begin complex lijken (dat vond ik tenminste). Maar door het op te delen in fundamentele concepten wordt het veel toegankelijker. 

Blijf experimenteren en deploy meer applicaties. 

De beste manier om Kubernetes te leren is door te doen, dus ga bouwen!

Wil je je Kubernetes-skills verder aanscherpen, verken dan:

  • Werken met ConfigMaps en Secrets: Sla configuraties veilig op en beheer ze.
  • Persistente volumes: Leer data op te slaan die Pod-restarts overleeft met persistente volumes.
  • Netwerken en ingress-controllers: Richt domeingebaseerde routing in en beheer extern verkeer.
  • Helm: Gebruik Helm-charts om complexe applicaties efficiënt te verpakken en te deployen.
  • Kubernetes in de cloud: Experimenteer met beheerde Kubernetes-diensten zoals AWS EKS, Azure AKS of Google GKE.

Tot slot is de track Containerization and Virtualization with Docker and Kubernetes op DataCamp een uitstekende bron om te oefenen met zowel Docker als Kubernetes.

FAQs

Hoe behoud ik data in Kubernetes bij het herstarten van Pods?

Kubernetes-Pods zijn vluchtig; hun data gaat verloren bij een herstart. Om data te behouden, kun je Persistent Volumes (PV’s) en Persistent Volume Claims (PVC’s) gebruiken. Daarmee wordt data onafhankelijk van de lifecycle van een Pod opgeslagen. Je definieert een Persistent Volume in YAML en mount het in een Pod, zodat de data blijft bestaan, zelfs als de Pod wordt verwijderd en opnieuw aangemaakt.

Hoe stel ik mijn Kubernetes-applicatie bloot aan het internet met een domeinnaam?

Om je applicatie met een eigen domeinnaam publiekelijk beschikbaar te maken, heb je een Ingress Controller nodig. Met Ingress definieer je regels om extern verkeer naar je services te routeren. Meestal is hiervoor een externe LoadBalancer en een geconfigureerde DNS nodig die naar je cluster wijst. NGINX Ingress Controller is een populaire keuze voor trafficmanagement in Kubernetes.

Hoe beveilig ik mijn Kubernetes-cluster tegen ongeautoriseerde toegang?

Beveiliging is cruciaal in Kubernetes. Enkele belangrijke stappen om je cluster te beveiligen:

  • Gebruik Role-Based Access Control (RBAC) om toegang te beperken op basis van rollen.
  • Schakel netwerkpolicy’s in om verkeer tussen Pods te beperken.
  • Update Kubernetes en afhankelijkheden regelmatig om kwetsbaarheden te patchen.
  • Beperk API-toegang met authenticatie- en autorisatiemechanismen.
  • Gebruik Secrets om gevoelige data zoals API-sleutels en credentials veilig te beheren.
Hoe kan ik de performance van mijn Kubernetes-cluster monitoren?

Je kunt je cluster monitoren met tools zoals:

  • Prometheus & Grafana – Verzamel en visualiseer metrics.
  • Kubernetes Dashboard – Een web-UI voor clustermanagement.
  • kubectl top – Geeft CPU- en geheugengebruik voor Nodes en Pods.
  • Loggingsoplossingen zoals Fluentd of Loki – Centraliseer logs voor troubleshooting.
Hoe deploy ik een Kubernetes-applicatie in een productieomgeving?

In productie zou je het volgende moeten doen:

  • Gebruik een beheerde Kubernetes-dienst zoals AWS EKS, Azure AKS of Google GKE.
  • Implementeer autoscaling met Horizontal Pod Autoscaler (HPA) en Cluster Autoscaler.
  • Gebruik CI/CD-pijplijnen (bijv. GitHub Actions, ArgoCD of Jenkins) voor geautomatiseerde deployments.
  • Beveilig je cluster met best practices zoals RBAC, netwerkpolicy’s en imagescanning.
  • Monitor het cluster met Prometheus, Loki of een cloudnative monitoringsoplossing.
Patrick Brus

Auteur

Patrick Brus

Ik ben een Cloud Engineer met een sterke basis in elektrotechniek, machine learning en programmeren. Mijn carrière begon in computervisie, met een focus op beeldclassificatie, waarna ik overstapte naar MLOps en DataOps. Ik ben gespecialiseerd in het bouwen van MLOps-platformen, het ondersteunen van data scientists en het leveren van Kubernetes-gebaseerde oplossingen om machinelearning-workflows te stroomlijnen.

Onderwerpen

Gerelateerd