Xylos brands

Hoe orkestreer je containers met Azure Kubernetes Service?

Wil je containers op een betrouwbare manier aanbieden aan je eindgebruikers? Gebruik dan een container orchestrator. Vandaag is Kubernetes, een open-source container orchestrator van Google, de meest voor de hand liggende keuze. Vrijwel alle publieke clouds reiken het aan, waardoor je het kan beschouwen als dé standaard. Microsoft biedt Kubernetes aan als een dienst via Azure Kubernetes Service (AKS).
 

1. Container Orchestration, hoe werkt dat?

Het begrip “container orchestration” klinkt wat ingewikkeld, niet? Geen zorgen, het concept is heel eenvoudig. Het gaat hier om software die je toelaat om containers op te starten volgens jouw persoonlijke specificaties. Voor onze webtoepassing doen we bijvoorbeeld het volgende:

  • Start de containers altijd twee of meerdere keren. Dat zorgt voor een hogere beschikbaarheid én extra snelheid.
  • Verspreid de containers over meerdere servers. Dat beschermt je tegen het falen van een server.
  • Maak de containers beschikbaar via een service. Een service geeft je toegang tot de webtoepassing.
  • Maak de service beschikbaar via een publiek IP-adres. Je gebruikers kunnen de webtoepassing bereiken via dat adres.
  • Zorg dat je zonder onderbreking de toepassing kan upgraden.
  • Zorg ervoor dat we bij een upgrade kunnen teruggaan naar de vorige versie.

Wanneer je Kubernetes als container orchestrator gebruikt, definieer je bovenstaande vereisten als een gewenste staat (desired state). Kubernetes zal de huidige staat van wat je gedefinieerd hebt in de gaten houden. Wanneer de huidige staat afwijkt van de gewenste staat, zal Kubernetes die corrigeren.

2. Met Azure Kubernetes Service aan de slag

Als je Kubernetes wil uitrollen in je eigen datacenter, heb je hiervoor heel wat kennis nodig. Alhoewel er veel tools bestaan die de uitrol vereenvoudigen, ben je verantwoordelijk voor het onderhoud, de back-up, de disaster recovery en de troubleshooting.

Met Azure Kubernetes Service (AKS) biedt Microsoft Kubernetes aan als een dienst. Dat heeft de volgende voordelen:

  • Eenvoudige installatie via de Azure Portal of scripts.
  • Geen beheer van de master nodes. De master nodes zijn het kloppend hart van Kubernetes. Microsoft beheert deze servers voor jou. Je hoeft ze ook niet te betalen.
  • Gecontroleerde upgrade naar nieuwe Kubernetes-versies.
  • Eenvoudige schaling van de agent nodes. De agent nodes zijn servers die je containers draaien. Via een schuifbalkje bepaal je de hoeveelheid. Wil je er 100? Geen probleem.
  • Integratie met het Azure virtuele netwerk en Azure Load Balancers.
  • Integratie met Azure Active Directory.
  • Integratie met Azure Monitor voor zowel de logs als de meetgegevens (zoals disk, CPU en  netwerk)

Na de uitrol van Kubernetes kan je een aantal van de bovenstaande taken uitvoeren via de Azure Portal of scripts. Onderaan zie je hoe je de schaal kan aanpassen.

3. Hoe kan je containers uitrollen?

Laten we het praktisch houden en onze webtoepassing uitrollen in AKS. In dit voorbeeld gebruiken we een aantal commando’s in de Azure Cloud Shell. We rollen containers uit met configuratiebestanden en een tool als Azure DevOps. Die techniek bespreken we in een latere blogpost.

We starten onze containers met het volgende commando:

kubectl run nasnet --image=xylos/nasnet --port=9090 --replicas=2

Bovenstaand commando gebruikt kubectl, een programma dat je toepast op de commandolijn. Het zorgt voor twee containers die op de webtoepassing draaien. De toepassing is beschikbaar via TCP-poort 9090 en de container gebruikt de image xylos/nasnet die we in de vorige blogpost gemaakt hebben.

Met het onderstaande commando kan je je containers zien:

kubectl get pods

Kubernetes gebruikt pods. Zo'n pod kan een of meerdere containers bevatten. In ons voorbeeld draait elke container in een aparte pod, wat in dit geval ook zo hoort te zijn. Het resultaat van het commando zie je in onderstaande afbeelding:

Het kubectl run commando heeft naast de pods, nog andere objecten aangemaakt. Een van die objecten is een deployment. Een deployment laat ons toe om de toepassing op een gecontroleerde wijze aan te passen, bijvoorbeeld om een nieuwe versie te installeren.

Omdat de pods momenteel nog niet beschikbaar zijn via een extern IP-adres, gebruiken we de deployment om een service aan te maken. Aan die service kunnen we vervolgens een Azure Load Balancer koppelen. Daarvoor gebruiken we het volgende commando:

kubectl expose --port=80 --target-port=9090 --type=LoadBalancer deploy/nasnet

Bovenstaand commando maakt een service aan die de containers in de nasnet deployment intern beschikbaar maakt. Hierbij maakt het niet uit of het om één of honderd containers gaat. De service is beschikbaar op een publiek IP-adres via een Azure Load Balancer (type=LoadBalancer). We kunnen dit IP-adres zien met het volgende commando:

kubectl get service nasnet

Dit resulteert in de volgende output:

We kunnen verifiëren dat onze acties werken door te surfen naar http://52.166.68.169:

Als je toepassing heel succesvol is, is het super eenvoudig om het aantal containers op te schalen. Onderstaande afbeelding toont het commando om te schalen naar 4 containers en het resultaat:

Je hoeft als beheerder de service of de load-balancer niet zelf aan te passen. Kubernetes doet dit werk in de achtergrond. Met dit eenvoudig voorbeeld zie je meteen het voordeel van een container orchestrator.

Conclusie

Een container orchestrator geeft je een krachtige gereedschapsdoos om containers in productie uit te rollen. Met een aantal eenvoudige commando’s maakten we onze webtoepassing hoog beschikbaar en schaalden we de toepassing van twee naar vier containers. In de praktijk is het niet aan te raden om manuele commando’s te hanteren. Het risico op fouten verhoogt en manuele acties beperken de mogelijkheid om meerdere malen per dag uit te rollen. In een volgende post nemen we een kijkje naar Azure DevOps om containers automatisch uit te rollen.

Benieuwd hoe je een container maakt en gebruikt? Lees dan zeker ook de andere blogposts in de reeks: in 6 stappen naar de cloud.

Deel dit blogbericht

Laat een antwoord achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd.

Breng jouw kennis en skills naar een hoger niveau

Schrijf nu in voor onze nieuwsbrief en krijg maandelijks:

  • Uitnodigingen voor Xylos' events & webinars
  • De laatste blogposts en cases
  • Nieuwste IT-trends