De control plane van een Kubernetes-cluster bevat onderdelen die gebruikt worden om beslissingen te nemen over het cluster, bijvoorbeeld het schedulen van taken. Daarnaast zorgt de control plane voor het detecteren van en reageren op cluster events, zoals het opstarten van een nieuwe pod.
De onderdelen van een control plane kunnen vanaf willekeurige servers in een Kubernetes-cluster uitgevoerd worden, maar voor eenvoud plaatst men de verschillende onderdelen doorgaans op één server.
Schematisch ziet een control plane, samen met de rest van een Kubernetes-cluster er als volgt uit:
Kubernetes API server
De API server (kube-apiserver) stelt de Kubernetes API beschikbaar en is de 'frontend' van een Kubernetes control plane. De Kubernetes API server schaalt horizontaal. Dit betekent dat je meerdere instances van de Kubernetes API server kunt uitvoeren en verkeer gebalanceerd wordt tussen die instances.
Etcd
Etcd is een key value store. Deze wordt door Kubernetes doorgaans gebruikt om kleine gegevens uit te lezen die zeer snel beschikbaar moeten zijn, zoals de status van een node. Wij gebruiken voor ons Kubernetes-platform Etcd bijvoorbeeld om een lock op een node te plaatsen indien nodig, bijvoorbeeld wanneer een node verwijdert wordt van het cluster.
Kube-scheduler
De Kube-scheduler controleert of er nieuw aangemaakte pods zijn nog die niet toegewezen zijn aan een node. Kube-scheduler wijst dan een node toe om de nieuwe pods vanaf uit te voeren. Hierbij wordt o.a. gelet op resource vereisten, hardware/software/policy beperkingen, etc.
Kube-controller-manager
Het onderdeel dat controlerende processen uitvoert. Ieder controller-proces is een losstaand proces, maar voor vereenvoudiging worden alle onderdelen samen in een enkel uitvoerbaar programma verwerkt en uitgevoerd. De Kube-controller-manager bestaat o.a. uit:
-
Node controller: Merkt en reageert op het neergaan van nodes.
-
Job controller: Controleert op eenmalig uit te voeren taken en creeërt een of meer pods om die taken uit te voeren.
-
Endpoints controller: Voegt services en pods samen.
- Service Account & Token controllers: Maakt standaard accounts en API access tokens voor nieuwe namespaces.
Cloud-controller-manager
Een control plane onderdeel dat cloud specifieke control logica embed. Simpel gezegd zorgt de cloud control manager ervoor dat je Kubernetes-cluster met de API van je cloud provider kan verbinden, en onderdelen die met dat cloud platform communiceren splitst van onderdelen die alleen met je cluster communiceren. Een on-premise Kubernetes-cluster maakt geen gebruik van een Cloud-controller-manager; het gaat dus enkel om de communicatie met de API van je cloud provider.
Er kan meer dan één Cloud-controller-manager tegelijk uitgevoerd worden om performance en foutgevoeligheid te verbeteren.
Een aantal Kubernetes-controllers kan cloud provider dependencies bevatten waar de Cloud-controller-manager voor van pas komt:
-
De node controller: Om bij de cloud provider vast te stellen wanneer een node niet langer reageert of die verwijderd is.
-
Route controller: Voor het opzetten van network routes in de onderliggende cloud infrastructuur.
- Service controller: Voor het maken, updaten en verwijderen van load balancers bij de cloud provider.