Kubernetes Fundamentals

In deze post leer je de basisprincipes van Kubernetes, inclusief containers, container orchestration en de Kubernetes-architectuur. We bespreken de verschillende soorten containers, hoe Kubernetes helpt bij het beheren van containers in complexe applicaties, en de rol van de control plane en worker nodes. We eindigen met een uitleg over de Container Runtime Interface (CRI) en de flexibiliteit die het biedt voor container runtimes.

Containers

Containers zijn machines die alles bevatten om een applicatie zoals nginx te draaien. Ze omvatten de code, runtime, libraries en systeemafhankelijkheden die nodig zijn om de applicatie uit te voeren. Containers worden vaak gebruikt om een applicatie consistent te laten draaien in verschillende omgevingen, zoals development, test en productie. Er zijn verschillende soorten containers, elk met hun eigen focus en gebruiksscenario:

Systeemcontainers (LXC, LXD)

Een systeemcontainer biedt een volledige operating system (OS) binnen een container, ze issoleren hiermee niet alleen de applicatie, maar het gehele systeem, inclusief de processen.

Applicatiecontainers (Docker)

Een applicatiecontainer is gericht op het draiien van één applicatie en de bijbehorende afhankelijkheden. Ze delen de kernel van de host en zijn minder zwaar in resources dan een systeemcontainer.

Container Orchestration

Container orchestration is het beheren en automatiseren van het inzetten, schalen en netwerken van applicaties die draaien in containers. Het is belangrijk voor het effectief beheren van complexere applicaties die bestaan uit meerdere containers (microservice-architecture)

Functies

  • Containers worden automatisch gestart of gestopt op basis van de vraag en workload
  • De workload wordt verdeeld over de beschikbare containers om de druk te verminderen
  • Containers worden automatisch herstart wanneer ze “unhealthy” zijn
  • Regelt de interne en externe netwerkcommunicatie tussen containers en services

Kubernetes Architecture

Kubernetes is ontworpen om container orchestration op schaal mogelijk te maken. Het bestaat uit een control plane en worker nodes

Control Plane

De control plane beheert het cluster en zorgt ervoor dat de gewenste status van de applicaties behouden blijft. Ook draaien er op de control plane de volgende services:

  • API Server
    Centrale interface waarmee gebruikers en applicaties communiceren met Kubernetes.
  • ETCD
    Een key-value store die de configuratie en status gegevens van het Kubernetes-cluster opslaan.
  • Scheduler
    De scheduler is verantwoordelijk voor het toewijzen van workloads (pods) aan geschikte nodes op basis van beschikbare resources.
  • Controller
    De Kubernetes controller zorgt ervoor dat de resources zoals pods en replica’s blijven voldoen aan de configuraties gegeven door de gebruiker

Worker node

Een worker node wordt, zoals de naam al zegt, aangestuurd door de Control Plane. Een worker node bevat hierom niets meer dan het programma Kubelet, en de Container Runtime

Container Runtime Interface (CRI)

De CRI maakt het mogelijk voor elke container format om te werken met Kubernetes zolang ze maar compliant zijn met de Open Container Initiative (OCI). Dit zorgt voor flexibiliteitbij het kiezen van een container-runtime, zoals containerd of CRI-O.