Kubernetes operators

Laten we er geen doekjes om winden: Kubernetes yaml definities maken is best ingewikkeld. In eerste instantie heb je snel resultaat maar voordat het in een complexe applicatie echt helemaal doet wat je wil, kan dat best veel tijd kosten. Bij stateful applicaties komt daar nog een extra complexiteit bij. Dan moet je in eens goed nadenken over behoud van data en clustering mechanismes die specifieke eigenschappen hebben. Waar je vroeger afhankelijk was van een team om deze operationele taken uit te voeren kan de installatie, schaling van de stateful applicatie, backup en restore van data en updates/upgrades uitbesteed worden aan een Kubernetes Operator. Langzaam maar zeker behoort de tijd dat complexe en of stateful applicaties buiten Kubernetes gehouden worden steeds meer tot het verleden. In dit artikel behandel ik het concept van het Kubernetes Operator framework. Is de tijd nu al rijp om daar op in te zetten op je productieplatform?

Wat zijn Kubernetes operators?

Je kan een Kubernetes operator het best omschrijven als een verlengstuk van de Kubernetes API. Door “Custom resources” aan de Kubernetes API toe te voegen krijgt Kubernetes extra functionaliteit om beheertaken voor een specifieke applicatie uit te voeren zonder dat je operationele kennis uit het applicatieve domein nodig hebt. Dit stelt je in staat om bijvoorbeeld om bijvoorbeeld Percona XtraDB clusters te schalen door simpelweg een getalletje aan te passen. Backups en restores kunnen via de Kubernetes client uitgevoerd worden. Updates van de applicatie gebeuren ook op deze gestandaardiseerde manier. Kort gezegd probeert Kubernetes met het operator framework deze lastige beheertaken via een abstractielaag te vereenvoudigen. De Kubernetes gebruiker kan zich op die manier focussen op zijn eigen applicatie en is minder afhankelijk van een operations team voor het beheer van bijvoorbeeld databases.

Operatorhub

Iedereen kent inmiddels wel de Docker Hub. Het is de plek waar je standaard Docker images kan vinden. Voor operators is er de Operator hub. Kijk dan ook vooral eens op https://operatorhub.io . Het is de plek waar je kant en klare operators kan vinden. Let wel op! Net als bij de Docker Hub kan iedereen een operator maken. Het is verstandig om kritisch te kijken naar de maker. Test de operator in verschillende scenario’s om te kijken of het productie waardig is.

Praktijk

In de loop van de tijd heb ik veel clusters gebouwd. Mysql, Elasticsearch, MongoDB. IK heb het heel mooi zien werken maar ik heb het ook wel eens stuk zien gaan. Door die ervaringen ben ik wat huiverig om ziel en zaligheid uit handen te geven aan Kubernetes operators.

In Linuxland is een oude uitspraak “Go away or I Will replace you with a very small shell script” hiermee nog steeds actueel. Scripts klagen niet over de smaak van de koffie en doen hun werk elke keer het zelfde, wat weer goed is voor een consistente kwaliteit. Wat dat betreft zie ik de voordelen echt wel in van Kubernetes Operators. Vanuit historisch perspectief voelt het echter een beetje eng. De data is immers wel van levensbelang voor het platform.

Je moet bij Kubernetes leren leven met die abstractielagen. De focus van die abstractielagen richt zich echter vooral op developers/eindgebruikers van het platform. De nadruk ligt er minder op dat het voor het operations team makkelijker wordt. Medewerkers van zo’n operations team moeten alle abstractielagen echter wel kennen en goed kunnen doorgronden. Dat is niet altijd makkelijk.

Tot slot

Maak de technieken onder de abstractielagen het probleem van iemand anders. Voor de gebruiker van het platform is dat geweldig. Voor die “iemand anders” kan het nog een beste uitdaging zijn. Kubernetes is wel op de goede weg maar ik denk dat wat dat betreft Operators nog slechts een tussenstap zijn. Voordat je zover bent dat je eenvoudig je stateful applicatie kan schalen, backuppen en restoren, heb je eerst nog vraagstukken over bijvoorbeeld storage van je data op te lossen. Ook ben je stiekem nog met best wat Yaml definities bezig. Het is denk ik zoals bij wel meer zaken in Kubernetes echt een soort tussenstap. Ik denk dat er nog genoeg ruimte is voor het vereenvoudigen. Het zou toch mooi zijn dat je met Kubectl via een oneliner een operator kan toevoegen en bijvoorbeeld een mongoDB replicaset kan installeren. Zo ver zijn we nog niet maar het gaat wel hard die kant op.

 

Auteur: Geurt Hakfoort – Cloud Specialist Denit