Vier keer per jaar komt er een nieuwe release van het Kubernetes platform uit. De 1.24 release was oorspronkelijke gepland voor 19 april 2022, maar kende een uitstel van 2 weken vanwege een release-blocking bug in Golang. Deze nieuwe release heeft de naam Stargazer meegekregen.
“Heb je een applicatie op een oude versie van het platform staan, dan is deze niet per definitie compatible met de nieuwe update. Dat gebeurt vooral als je meer dan 2 updates achterloopt”, zegt Martijn van Calker, Solutions Architect bij True. Zaak om dus wel te kijken naar upgrades en tijdig te beginnen.
Upgraden naar 1.24? Test ‘m eerst op een testcluster
Zomaar naar deze versie upgraden met je huidige Kubernetes-omgeving, is niet aan te raden. “Wij houden voor klanten in de gaten wat deprecated wordt, welke oude versies van configuraties eruit gaan en op welke manier jouw app naar de nieuwe configuraties over te zetten is. We controleren hun platform en app en geven aan waar het spaak loopt”, zegt Martijn van Calker.
Rick Wagenaar, Kubernetes Engineer bij True, vult aan: “Veel van onze klanten hebben 2 Kubernetes platformen bij ons: een productie-cluster en een klein testcluster. Deze testclusters gebruiken we samen met de klant om de compabiliteit van hun app met de nieuwste versie te testen. Voordat de productie-omgeving naar de nieuwe upgrade overgaat, weten we door de upgrade in het testcluster al waar het werkt en waar het aangepast moet worden.”
Wees op tijd voor de end-of-life van versie 1.23
De belangrijkste boodschap van de Kubernauts van True: wacht niet te lang met upgraden naar 1.24 🤖 Versie 1.23 heeft een end-of-life datum van 28 februari 2023. Na die tijd komen er voor versie 1.23 of ouder geen updates en geen security-updates, ook geen kritieke security patches. Daarmee raak je in een potentieel onveilige situatie na februari volgend jaar. Moeite met upgraden, geen tijd of focus voor het beheer van je Kubernetes-omgeving? Onze Kubernetes Engineers staan voor je klaar en nemen het uit handen.
Je Kubernetes-omgeving voor je beheerd, inclusief upgrades? Ontdek Fully Managed Kubernetes van True
Opvallend in de Kubernetes release 1.24
Een volgende stap in de volwassenheid van Kubernetes
In versie 1.24 staan alpha en beta API’s standaard uit. Door de snelle groei van Kubernetes was het eerder standaard om ook beta API’s en features te gebruiken. Deze stonden standaard aan. “Maar niet elke beta API wordt een stable API. Beta API’s kunnen ook uit een release gaan. Voor continuïteit van je omgeving en zekerheid daarvoor niet handig”, zegt Daniel Koopmans, Innovation Officer bij True. “Stable API’s en features worden eerst deprecated en pas 2 versies later verwijderd. Daardoor heb je langer de tijd om de afhankelijkheid van je applicatie en omgeving op deze features aan te passen.”
Het standaard uitschakelen van beta API’s is een volgende stap in de volwassenheid van Kubernetes. Drie opvallende features die van beta naar stable zijn gegaan:
- PreemptionPolicy: geef bij het schedulen sommige containers meer prioriteit dan anderen;
- CSI volume expansion: de mogelijkheid om een Persistent Volume te vergroten of verkleinen;
- Storage Capacity Tracking: weerhoud pods ervan om gescheduled te worden op nodes gekoppeld aan CSI volumes zonder voldoende vrije ruimte.
De volledige release notes zijn op de GitHub van Kubernetes te vinden 🤖
Kubelet out-of-memory metrics
Was het in eerdere versies nog soms uitzoeken waarom een Pod crasht, versie 1.24 levert daar meer opsporingsmogelijkheden voor in de vorm van Kubelet out-of-memory metrics (OOM). “Een best practice is om te bepalen hoeveel geheugen een container maximaal mag gebruiken. Als een container toch meer geheugen gebruikt, dan raakt deze out-of-memory met als resultaat een crash van de container. De container start opnieuw op, totdat het geheugen weer meer dan maximaal gebruikt is, met weer een crash als resultaat. Resultaat: een onderdeel van je app ligt er tijdelijk uit, soms meerdere keren achter elkaar”, zegt Daniel.
“Om dat te debuggen, werd eerder naar het gehele cluster gekeken. Er is een pod gecrasht en herstart, maar er stond geen reden bij waarom. Daarvoor moest je dieper in de techniek duiken. Met Kubelet OOM is er een counter bij pods en containers die aangeeft hoe vaak er een out-of-memory issue is voorgekomen. Dat geeft beter inzicht om het limiet van de container te verhogen óf om aanpassingen in de code te doen zodat de container minder geheugen nodig heeft.”
Verwijdering van Dockershim
Deze zat er al enige tijd aan te komen: in versie 1.20 is Dockershim deprecated geworden en in versie 1.24 is deze container runtime interface verwijderd. Dockershim gebruikt Docker als container runtime voor Kubernetes.
Een container runtime is software die containers runt binnen een pod. Kubernetes zelf zorgt voor de orkestratie en planning van pods. Op elke node gebruikt Kubelet de container runtime interface als abstractielaag zodat je elke compatible container runtime kunt gebruiken. Docker is oorspronkelijk niet bedoeld geweest als container runtime; met dockershim heeft het team van Kubernetes de mogelijkheid ingebouwd dat Kubelet met Docker communiceert alsof Docker wel een container runtime is.
Applicaties gebouwd met Docker werken in versie 1.24 nog steeds. Je kunt Docker ook nog steeds gebruiken om images voor containers te bouwen.
Heeft de verwijdering van Dockershim invloed op mijn applicatie?
- Zorg dat geen enkele privileged Pods Docker commands uitvoeren (zoals docker ps). Herstart de Docker service (het command systemctl herstart docker.service) of wijzig Docker-specifieke bestanden zoals /etc/docker/daemon.json
- Check alle private registries of image mirror instellingen in de Docker configuratie (zoals /etc/docker/daemon.json). Deze moeten over het algemeen geherconfigureerd worden voor een andere container runtime.
- Check dat scripts en apps die op nodes buiten je Kubernetes-omgeving draaien, geen Docker commands uitvoeren. Dat kan gaan om:
- SSH naar nodes;
- node startup scripts;
- monitoring en security tools die direct op nodes staan geïnstalleerd.
- Check externe tools van derden die bovenstaande commands gebruiken.