Kubernetes algemeen

Wat is Kubernetes?

Kubernetes is een platform waarmee je je applicaties, microservices en workloads eenvoudig in containers kunt draaien en beheren. Kubernetes is open source en platform-onafhankelijk, dus je kunt het op je eigen hardware of bij een Cloud-aanbieder naar keuze draaien. Door de geavanceerde API en de mogelijkheid om alles wat je in Kubernetes wilt doen in code te definiëren, is Kubernetes uitermate geschikt voor het automatiseren van je processen.

Voor wie is Kubernetes geschikt?

Kubernetes heeft een steile leercurve en is, als je de juiste kennis in huis hebt, geschikt om applicaties in productie te draaien. Het is bijzonder geschikt voor toepassingen waarbij high-availability en schaalbaarheid van belang zijn. Daarnaast kan Kubernetes goed ingezet worden als onderdeel van je development pipeline. Het stelt je in staat om je ontwikkeltraject heel efficient in te richten, continuous deployment eenvoudig in te zetten en zero-downtime deployments te doen.

Wat is een container?

Je kunt een container zien als een hele kleine, zelfstandige omgeving waar één applicatie of proces in draait. De container bevat alles dat nodig is om die applicatie starten of het proces uit te voeren: je applicatiecode, de benodigde libraries en noodzakelijke systeemtools. De applicatie die in je container draait, is in geen enkel opzicht meer afhankelijk van het onderliggende besturingssysteem van je server. Daardoor kan je je containers platform-onafhankelijk draaien en heb je overal een applicatie die hetzelfde draait. Je applicatie draait in een volledig reproduceerbare omgeving. Dat maakt het eenvoudig om je processen te automatiseren en het neemt heel veel overhead weg die je wel hebt als je je applicatie op een traditionele (virtuele) server draait.

Wat is een image?

Een container rol je uit op basis van een image. In je image specificeer je alle details, zoals softwareversies, de configuratie en  parameters die je aan je applicatie wilt meegeven. Wil je een verandering aanbrengen in een bestaande container, dan dien je het image aan te passen en op basis daarvan een nieuwe container uit te rollen. Met Kubernetes kan je dat proces automatiseren en zonder downtime uitvoeren.

De meest gangbare webapplicaties hebben images die je kunt gebruiken en eventueel naar wens kunt aanpassen. Deze images zijn ondergebracht in repositories of registries. De meestgebruikte public repository is Docker Hub. Je kunt eenvoudig je eigen (private) repository aanmaken om zelfgemaakte images te hosten. Kies je ervoor om images uit een openbare repository te gebruiken, houdt er dan rekening mee dat iedereen images kan aanbieden, je hebt dus geen zekerheid over de kwaliteit en veiligheid van die images.

Wat kan je met Kubernetes?

Welke voordelen biedt Kubernetes?

Kubernetes biedt diverse voordelen. Draai je Kubernetes in productie, dan zijn de belangrijkste voordelen ten opzichte van een traditionele serveromgeving:

  • Aanzienlijk minder overhead: geen VPS of dedicated server meer veel tijd vraagt in onderhoud en relatief veel resources inneemt.
  • High-availability: met beperkte resources kan je meerdere replicas van je applicatie draaien. Is één van de instanties unhealthy of overbelast, dan kan start – indien juist geconfigureerd – er vanzelf een nieuwe, identieke container op die de taken overneemt.
  • Hoge performance: doordat een container alleen de software bevat die noodzakelijk is voor om één taak te kunnen uitvoeren, kan je iedere container volledig optimaliseren voor zijn taak.

Ook in het traject voordat een applicatie naar productie gaat, biedt Kubernetes aanzienlijke voordelen. Door lokaal Kubernetes te draaien, kan je in het ontwikkelproces al met de images en containers werken die je later in productie zult brengen. Daardoor is je ontwikkelomgeving identiek aan je productieomgeving en sluit je problemen als gevolg van softwareverschillen tussen diverse omgevingen uit. Daarnaast kan je geautomatiseerd en zonder downtime nieuwe releases doen. Continous Integration en Continous Deployment zijn binnen handbereik zodra je Kubernetes gebruikt.

Is Kubernetes ingewikkeld?

Deze vraag kunnen we het beste beantwoorden met een citaat van Greg Taylor, infrastructure specialist bij Reddit:

“Developers should not need to be familiar with Kubernetes to work on their applications”

Kubernetes stelt je in staat om het gehele proces van de eerste stap van software-ontwikkeling tot het in productie draaien van je applicatie of proces te automatiseren. Als je het Ops deel van DevOps goed hebt geregeld, dan hoeft een developer geen kennis te hebben. Het goed configureren en instellen van Kubernetes vereist het nodige denkwerk en is vraagt in veel situaties om maatwerk. Hulp nodig bij het opzetten, behoefte aan een check of wil je op andere gerelateerde vlakken van dienst is? Cloudlets verzorgt graag het Ops-gedeelte voor je.

Wat hebben Docker en Kubernetes met elkaar te maken?

Docker is de techniek waarmee je een applicatie kunt isoleren in een eigen container. Kubernetes is een platform waarmee je het geheel aan je in Docker containers kunt beheren. Het regelt alles wat nodig is om te zorgen dat je containers kunnen schalen, dat ze onderling met elkaar kunnen communiceren, het biedt een geavanceerde vorm van toegangsbeheer (Role Based Access Control) en meer.

Wat moet ik weten voordat ik aan de slag ga met Kubernetes?

Kubernetes heeft een vrij steile leercurve en als je gewend bent om met traditionele (virtuele) servers te werken, dan zal je even van mindset moeten switchen voordat je aan de slag gaat. Er zijn een aantal basisconcepten, termen en principes die je moet begrijpen voordat je aan de slag kunt. Om Kubernetes onder de knie te krijgen, kan je het beste gewoon starten en spelen met de mogelijkheden die het platform je biedt. Het is mogelijk om Kubernetes lokaal te installeren met Minikube, zodat je niet direct een volledig cluster hoeft aan te nemen.

Om je op weg te helpen met de belangrijkste concepten en begrippen verwijzen we je naar ons artikel Aan de slag met Kubernetes voor meer achtergrondinformatie.

Welke applicaties kan ik draaien op Kubernetes?

Praktisch alle applicaties kunnen op Kubernetes draaien. Daarbij is het wel van belang een onderscheid te maken tussen cloud native applicaties en de meer traditionele applicaties. De meeste nieuwe webapplicaties zijn gebouwd om in containers in een Cloud-omgeving zoals Kubernetes te draaien, met als voordeel de portability, de schaalbaarheid en de mogelijkheid om replicasets te draaien. Ook de meer traditionele applicaties die oorspronkelijk niet gebouwd zijn om in containers te draaien, kunnen overgezet worden.

Alle applicaties die beschikbaar zijn in een (Docker-)container kunnen eenvoudig gestart worden in je cluster. Daarnaast biedt Kubernetes zelf een uitgebreide repository met applicaties die je eenvoudig kunt uitrollen. Denk hierbij aan bijvoorbeeld zijn Apache, Nginx, Php, NodeJS, WordPress en Magento. Ook Bitnami, een van de grootste distributeur van softwarepackages, heeft ervoor gekozen de meestgebruikte software beschikbaar te maken in Charts voor Kubernetes.

Heb je software waar nog geen containerimage voor is? In veel gevallen is het relatief weinig werk om een container met je applicatie te maken. Wij helpen je graag op weg.

Hoe installeer ik kubectl?

Kubectl is de commandline tool waarmee je alle resources in je cluster kunt beheren. Zonder kubectl kom je niet ver met je clusterbeheer. Kubectl communiceert via de Kubernetes API en dient eenmalig ingesteld te worden. Op de website van Kubernetes vind je een duidelijke installatiehandleiding voor Kubectl. Na het installeren van kubectl dient kubeconfig ingesteld te worden. Ook voor het configureren daarvan kan je met de genoemde handleiding goed uit de voeten. Maak je gebruik van Kubernetes op het platform van Cloudlets? Dan adviseren we je onze handleiding voor kubeconfig te volgen.

Wat zijn resources?

Een resource is een object dat in je cluster draait. Een pod, een service, een deployment, een ingress: ze worden allemaal resources genoemd.  Iedere resourcetype heeft een eigen functie. Alle soorten resources kunnen met kubectl of via de Kubernetes API aangemaakt worden. Dat biedt een enorme flexibliteit en veel mogelijkheden je processen in Kubernetes te automatiseren. De meestvoorkomende resourcetypen worden hieronder beschreven.

Wat is een deployment?

Een deployment is een resourcetype waarin je beschrijft hoe je pods en replicasets eruit moeten zijn. Je definieert in je deployment onder andere welke images moeten gebruikt worden voor je containers, welke CPU- en geheugenlimieten gehanteerd worden en welke volumes gekoppeld moeten. Ook zaken als autoscaling en het aantal replica’s configureer je in je deployment.

Wat is een pod?

Kubernetes noemt gebruikt de benaming pod voor een container of een groep containers. Hoewel een container zelfstandig een taak behoort te kunnen vervullen, is er soms sprake van meerdere containers die elkaar nodig hebben. Dat is bijvoorbeeld het geval als de een container verantwoordelijk is voor het ophalen van data die noodzakelijk is voor het functioneren van een andere container.

Wat is een service?

Een pod is niet benaderbaar van buitenaf. Doordat bestaande pods vervangbaar door nieuwe identieke pods en gerepliceerd kunnen worden, hebben pods geen vast IP-adres. In een service regel je de toegang tot je pods. Je regelt er onder andere de poort waarop je containers bereikbaar moeten zijn en of je wel of geen externe LoadBalancer wilt gebruiken.

Wat is ingress?

Een ingress is net als een service een manier om toegang tot de objecten in je cluster te regelen. In tegenstelling tot de service, functioneert een ingress als een router in je cluster die zorgt dat het verkeer op de juiste plek terechtkomt. Er zijn situaties waarbij het gebruik van een ingress voordelen biedt. Meer weten over het verschil tussen een de verschillende Service Types en Ingress? Dan verwijzen we je graag naar dit artikel op Kubernetes NodePort vs Loadbalancer vs Ingress op Medium.com.

Wat is serverless?

Serverless computing stelt je in staat om je applicatie te draaien zonder dat je daarvoor een server nodig hebt en zonder verder omkijken naar de onderliggende infrastructuur. Een groot verschil tussen serverless computing en reguliere orchestration tools, is dat je bij serverless computing kunt terugschalen naar nul, waardoor je een situatie kunt bereiken waarin je alleen maar betaald als je daadwerkelijk server resources gebruikt. Voor meer informatie, bekijk ons artikel over Serverless computing met Knative.

Je cluster beheren

Zelf een cluster opzetten of kiezen voor een Managed Kubernetes Cluster?

Alle grote Cloud-aanbieders en partijen zoals Cloudlets bieden de optie om met een klik één cluster op te zetten. Dat is makkelijk, efficient en in het grootste deel van de gevallen toereikend voor je doelstellingen. Wil je Kubernetes graag volledig op eigen hardware draaien op wil je specifieke instellingen in de setup van Kubernetes, dan is het mogelijk om een cluster vanaf scratch op te bouwen. Er zijn diverse tools in omloop die je helpen met het opzetten van je cluster, bijvoorbeeld Kops. Houdt er rekening mee dat het zelf opzetten van een Kubernetes cluster een kennisintensief en rijdrovende klus is.

Kan ik het beheer van mijn cluster uitbesteden?

Het is eenvoudig om je eigen Kubernetes cluster op te zetten bij steeds meer Cloud aanbieders, maar het beheer en de inrichting van je cluster vergen meer expertise en tijd. Het is goed mogelijk om de operationele kant van Kubernetes te scheiden van de development-taken en het uitrollen van je applicaties. Denk bij operationale vraagstukken die je kunt uitbesteden bijvoorbeeld aan het monitoren van de infrastructuur, het maken van backups, een uptime garantie of het meeschalen van je cluster op basis van piekbelasting. Heb je interesse in het uitbesteden van het operationele beheer van je cluster? Vul ons contactformulier in en we nemen zo snel mogelijk contact met je op.

Kan ik mijn cluster upgraden naar een nieuwere versie van Kubernetes?

Zeker! We adviseren je gebruik te maken van de tools waarmee je je clust er hebt opgezet om de mogelijkheden voor een upgrade te onderzoeken. Neem je Managed Kubernetes af? In sommige gevallen kan het upgraden dan (gedeeltelijk ) geautomatiseerd verlopen. Zorg wel voor goede backups en een actieplan om alles snel weer online te krijgen mocht het upgraden niet goed gaan. Wij geven je graag vrijblijvend advies bij het upgraden van je cluster.

Toegang tot je cluster krijgen

Bij de meeste Kubernetes-aanbieders heb je standaard geen toegang tot Kubernetes. Om met kubectl, helm of andere tools te werken die een verbinding nodig hebben met Kubernetes, is het van belang dat je de toegang tot je cluster instelt. Er zijn een paar stappen die je moet doorlopen om je cluster open te stellen. Maak je gebruik van Kubernetes op het Cloudlets-platform, dan kan je onderstaande instructies volgen:

  • Maak een intern netwerk aan.
  • Maak een security group en koppel deze aan de Kubernets-nodes.
  • Stel de firewall in

Applicaties uitrollen en beheren met Helm

Applicaties die je op Kubernetes draait, worden in resources gedefinieerd: in je deployment specifieer je hoe je containers zich moeten gedragen, hoe ze schalen. In een service definieer je hoe je deployment bereikbaar is. Met Helm beheer je overzichtelijk alle resources die bij een applicatie horen. Je zou Helm als een moderne packagemanager kunnen zien, waarmee je in code de infrastructuur voor je applicatie kunt definiëren.

 

Kubernetes als onderdeel van je developmentproces

Welk voordeel biedt Kubernetes voor mijn development proces?

Kubernetes is bij uitstek geschikt voor continous integration / continous deployment. Nagenoeg alle development- en deploymenttools hebben tegenwoordig native ondersteuning voor Kubernetes. Daardoor is het mogelijk om geautomatiseerd een nieuw container image te maken na iedere wijziging in de repository met je applicatiecode. Daarmee vervalt de noodzaak om een server op te zetten en te configureren om je applicatie te draaien, worden menselijke configuratiefouten uitgesloten en worden nieuwe releases van je applicatie zonder downtime online gebracht.

Hoe kan ik mijn CI/CD-pipeline inrichten?

Er zijn diverse tools waarmee je eenvoudig je development pipeline kunt inrichten. Denk hierbij aan Gitlab, Bitbucket Pipelines en Spinnaker. Maak je gebruik van een Kubernetes cluster van Cloudlets? Dan kan je gebruik maken van onze kant-en-klare integratie met Jenkins. Na iedere code commit wordt een nieuw image gebouwd en uitgerold.

Hoe kan ik het beste mijn OTAP-straat inrichten met Kubernetes?

Zeker! Omdat je per branch van je (git-)repository een container kunt genereren, kan je eenvoudig geautomatiseerd per branch een omgeving online houden. Het voordeel van Kubernetes bij het opzetten van een OTAP-straat, is dat je configuratieverschillen tussen de fases van je ontwikkelproces kunt uitsluiten. Dankzij volledig reproduceerbare omgevingen, werk je sneller, foutlozer en efficiënter. Om meer te leren over het opzetten van een OTAP-straat en andere relevante DevOps-onderwerpen, adviseren we je onze DevOps-training te volgen.

Monitoring van je cluster

Containermonitoring met CoScale

Promotheus?

Centraal bijhouden en analyseren van alle logs met ELK (ElasticSearch, Logstash en Kibana)

Kubernetes & persistent storage

 

Security

 

Overig

Is het veilig om beta resources te gebruiken?

Kan ik mijn bestaande applicaties in Kubernetes draaien?

Kan ik mijn docker-compose.yml uitrollen op Kubernetes?

12 factor principle