Wat is Kubernetes?

Een orkestratieplatform dat containers op een cluster van vele machines (nodes) plaatst, hun aantal op peil houdt, ze bijwerkt en er aanspreekpunten voor biedt. Gebruikers declareren een gewenste toestand met resources zoals Deployments en Services, en controllers bekijken de werkelijke toestand en brengen die dichter bij de declaratie (reconciliatie). De kleinste eenheid is de Pod; verloren Pods worden automatisch opnieuw gemaakt, en rolling updates en autoscaling naar gelang de belasting worden ondersteund. Het wordt ook afgekort tot K8s.

Japanse benaming: Kubernetes

“Kubernetes” komt voor in 10 oefenvragen uit 1 onderwerpen, bijv. Basis van cloud en containers.

Vakgebied: Basis van cloud en containers

De belangrijkste resources

Een Pod is de kleinste eenheid die containers groepeert, een ReplicaSet houdt het aantal Pods op peil, en een Deployment gebruikt ReplicaSets om nieuwe versies uit te rollen en terug te draaien. Een Service geeft meerdere Pods een stabiele naam en een stabiel adres, en een Ingress stuurt HTTP-aanvragen van buiten het cluster op basis van het pad of de hostnaam naar Services. ConfigMaps en Secrets geven configuratie en vertrouwelijke waarden los van images door, en namespaces verdelen een cluster per team of per omgeving.

Declaratie en reconciliatie

Gebruikers declareren een toestand zoals „draai drie Pods van deze versie” in YAML of iets vergelijkbaars en registreren die bij Kubernetes. Controllers controleren herhaaldelijk de werkelijke toestand, maken verdwenen Pods opnieuw en verwijderen overtollige. Omdat het resultaat wordt gedeclareerd en niet de stappen, komt het systeem bij het willekeurig vaak toepassen van dezelfde definitie in dezelfde toestand terecht, en herstelt het zich automatisch van uitvallende nodes.

Instellingen voor resources en probes

Elke container geeft op hoeveel CPU en geheugen hij gereserveerd wil hebben (requests) en wat zijn bovengrenzen zijn (limits), en de scheduler kiest voor elke Pod een node op basis van de requests. Een readiness-probe controleert of een container aanvragen kan aannemen en stuurt de routering, en een liveness-probe laat een container herstarten die niet meer reageert. Een HorizontalPodAutoscaler verandert het aantal Pods op basis van metrics zoals het gebruik ten opzichte van de requests.

Nu oefenen: vragen over Kubernetes

Wat is in Kubernetes de kleinste eenheid die wordt gedeployed en beheerd, en die een of meer containers groepeert die hetzelfde IP-adres en dezelfde volumes delen?

  1. ANode
  2. BService
  3. CPod
Antwoord en toelichting tonen

Antwoord: C. Pod

Een Pod is de kleinste eenheid die Kubernetes plaatst en uitvoert. De containers erin delen een netwerknamespace, zodat ze via localhost met elkaar kunnen communiceren, en ze kunnen dezelfde volumes gebruiken. Gewoonlijk bevat een Pod één applicatiecontainer, en soms worden hulpcontainers, bijvoorbeeld voor het doorsturen van logs, aan dezelfde Pod toegevoegd. Pods zijn wegwerpbaar en krijgen een nieuw IP-adres als ze opnieuw worden gemaakt; ze worden daarom meestal indirect beheerd via een Deployment of iets vergelijkbaars. Een node is een machine waarop Pods draaien, en een Service is een stabiel aanspreekpunt voor meerdere Pods.

In Kubernetes draait een Deployment met replicas: 3 drie Pods. Welke beschrijving van wat er gebeurt als een van deze Pods met kubectl delete pod wordt verwijderd, is juist?

  1. AOok de instelling van de Deployment wordt herschreven naar replicas: 2, en er blijven twee Pods draaien
  2. BEen controller merkt dat het werkelijke aantal onder het opgegeven aantal van 3 is gedaald en maakt één nieuwe Pod
  3. COok de andere twee Pods van de Deployment worden verwijderd, en de hele Deployment stopt
Antwoord en toelichting tonen

Antwoord: B. Een controller merkt dat het werkelijke aantal onder het opgegeven aantal van 3 is gedaald en maakt één nieuwe Pod

In Kubernetes declareren gebruikers een gewenste toestand, zoals „draai drie Pods”, en controllers bekijken herhaaldelijk de werkelijke toestand en grijpen in om die dichter bij de declaratie te brengen als ze verschillen (reconciliatie). Het verwijderen van één Pod maakt het werkelijke aantal 2, dus maakt de ReplicaSet-controller een nieuwe Pod om weer op 3 te komen. Als een Pod verloren gaat doordat een node uitvalt, maakt hetzelfde mechanisme hem op een andere node opnieuw. Om het aantal Pods echt te verminderen, verandert men de replicas van de Deployment in plaats van Pods te verwijderen.

Veelgestelde vragen

Wat is het verschil tussen Docker en Kubernetes?

Docker is vooral een tool om images te bouwen en containers op één machine te draaien. Kubernetes is een platform dat over vele machines heen beheert welke node wat draait, hoeveel exemplaren er draaien en hoe ze worden bijgewerkt. Kubernetes draait containers uit images in een standaardformaat die met Docker of andere tools zijn gebouwd.

Moet ook een klein systeem Kubernetes gebruiken?

Niet per se. Kubernetes is sterk in hoge beschikbaarheid, automatisch herstel en het beheer van veel diensten, maar het beheren van een cluster vraagt kennis en moeite. Voor een klein systeem kan het beter passen om containers op één machine te draaien of een beheerde containerdienst in de cloud te gebruiken.

“Kubernetes” in de toelichting

Vragen met “Kubernetes” (10)

  1. Wat is in Kubernetes de kleinste eenheid die wordt gedeployed en beheerd, en die een of meer containers groepeert die hetzelfde IP-adres en dezelfde volumes delen?
  2. In Kubernetes draait een Deployment met replicas: 3 drie Pods. Welke beschrijving van wat er gebeurt als een van deze Pods met kubectl delete pod wordt verwijderd, is juist?
  3. In een Kubernetes-Deployment wordt het containerimage in de Pod-template veranderd in een nieuwe versie. Welke beschrijving van wat er gebeurt met de standaardupdatestrategie (RollingUpdate) is juist?
  4. In Kubernetes krijgt een Pod telkens een ander IP-adres wanneer hij opnieuw wordt gemaakt. Met welke resource kunnen andere applicaties via een naam en een adres die niet veranderen, verbinding maken met meerdere Pods die met labels zijn geselecteerd, waarbij de belasting over die Pods wordt verdeeld?
  5. In een Kubernetes-cluster moeten HTTPS-aanvragen die voor één hostnaam binnenkomen, naar de Service api worden gestuurd als het pad met /api begint, en anders naar de Service web. Welke resource is geschikt om deze routeringsregel vast te leggen?
  6. Het wachtwoord van een database wordt in een Kubernetes-Secret opgeslagen. Welke beschrijving van een Secret is juist?
  7. Bij een webapplicatie op Kubernetes is de controle van de liveness-probe zo gemaakt dat ze ook nagaat of de applicatie verbinding kan maken met de database waarvan ze afhangt. Welk probleem is met deze instelling het meest waarschijnlijk?
  8. Een Kubernetes-HorizontalPodAutoscaler heeft een doel voor het CPU-gebruik van de Pods van 70% en een bereik van 1 tot 10 Pods. Op dit moment is het gemiddelde CPU-gebruik van 5 Pods 30%. Als het benodigde aantal Pods wordt berekend als ⌈huidig aantal × huidig gebruik ÷ doelgebruik⌉ (⌈ ⌉ betekent naar boven afronden), hoeveel Pods zijn er dan nodig?
  9. Welke beschrijving van de requests en limits voor resources die in Kubernetes voor een container worden ingesteld, is juist?
  10. Zoals hierboven wordt het verbindingsdoel van de database niet in het image geschreven, maar bij het starten van de container als omgevingsvariabele doorgegeven. Wat is het belangrijkste voordeel van dit ontwerp?

Verwante termen

Pod Container Omgevingsvariabele (environment variable) Containerimage DNS (Domain Name System) Loadbalancer HTTP (Hypertext Transfer Protocol) TLS (Transport Layer Security) Reverse proxy Deadlock

Naar de woordenlijst