24/09/2015
Cyso lanceert publieke openstack cloud Fuga in Nederland
Cyso Managed Hosting lanceert één van de eerste publieke OpenStack clouds van Nederland.
Blog
Docker vs Kubernetes is als appels met peren vergelijken. Het zijn geen alternatieven van elkaar. Ze vullen elkaar eigenlijk aan. Alleen al het opschalen met Docker brengt veel uitdagingen met zich mee die Kubernetes kan oplossen.
Docker is een tool voor het creëren, deployen en uitvoeren van applicaties door het gebruik van containers. De applicatie denkt hiermee dat het zijn eigen OS heeft, terwijl er ook nog andere containers uitgevoerd kunnen worden op hetzelfde systeem. In andere woorden: Docker stelt je in staat om op een OS meerdere containers te maken, te beheren en uit te voeren.
Kubernetes is de overtreffende trap. Als je Docker op meerdere hosts (verschillende OS) hebt geïnstalleerd, kan je de kracht van Kubernetes inzetten. Kubernetes stelt je in staat om processen te automatiseren: het start de containers op, zorgt voor onder andere load-balancing, routing van netwerkverkeer bij drukte, (automatische) opschaling of downscaling. Loopt een container vast, dan zorgt Kubernetes voor een nieuwe. De Docker hosts (ook wel nodes) zijn bijvoorbeeld bare metal servers of virtual machines (VM’s). Een verzameling van nodes die beheerd wordt door een enkele Kubernetes instance wordt een Kubernetes cluster genoemd.
Onbekend met Kubernetes? Lees ook: Kubernetes eenvoudig uitgelegd
Je zou dan kunnen zeggen als je maar een paar nodes hebt dat het makkelijker is om alleen Docker te gebruiken. Er zijn echter redenen waarom er gekozen wordt voor meerdere nodes. Vaak zijn het deze twee:
Om de verschillen beter te begrijpen nemen we je mee in een praktijkvoorbeeld. We hebben een containerized applicatie geschreven (bijv. in React in combinatie met Node.js) die praat met de database via Java en Python voor externe API’s.
Een engineer die bekend is met Docker om applicaties te deployen zou de volgende structuur kunnen gebruiken:
De onderliggende structuur stelt de engineer in staat om de containers te deployen met Docker Build, in dit geval de app, de database en API’s.
Misschien zijn er nog wel resources over, en wordt de bovenste laag opgeschaald naar het volgende:
So far, so good. Dit is een relatief eenvoudige opzet en heeft nog weinig containers.
Maar wat als de applicatie, laten we een webwinkel als voorbeeld nemen, opeens heel veel meer verkeer ontvangt door bijvoorbeeld de uitverkoop? De benodigde resources nemen dan snel toe en je moet opschalen om de webwinkel in de lucht te houden.
Doordat je in het voorbeeld al een script hebt geschreven voor het deployen van de containers kun je er voor kiezen om meer hardware toe te voegen en de deployment meerdere keren te doen.
Het is precies bij deze schaalbaarheid waar het kan gaan knellen. Stel dat de webshop een nieuwe feature krijgt en de engineer hiervoor een microservice moet toevoegen. Bijvoorbeeld de functie van “klanten die dit artikel kochten, kochten ook artikelen a, b en c.”. Waar in deze stack komt die nieuwe feature, als de hardware al volledig gebruikt wordt? Dat is een nieuw puzzelstuk voor de engineer die elke keer zal terugkomen.
Daarnaast is het grote voordeel van microservices dat het mogelijk is om individuele componenten te schalen. Ook hier moeten scripts voor geschreven worden en bekeken worden wat de meest effectieve manier is om op of af te schalen afhankelijk van de load.
Precies hier komt Kubernetes zijn meerwaarde laten zien. Kubernetes, ookwel bekend als k8s, is een open source container orchestration platform die veel van de handmatige taken automatiseert: deployment, beheer en het schalen van containerized applicaties.
Laten we een voorbeeld geven van Kubernetes. Onderstaande afbeelding geeft een server stack weer, waarbij iedere server in de stack ook wel een worker node wordt genoemd. We installeren Kubernetes op elke worker node (workers), en maken er een hiervan de Kubernetes master. De master staat in verbinding met alle workers en bepaalt waar onze applicaties (onze Docker containers) gehost zijn, hoe ze in elkaar steken.
Terugkomend op ons voorbeeld, laten we zeggen dat we onze React applicatie zes keer willen deployen. Elke versie van de applicatie heeft ongeveer 128MB RAM nodig en we willen regels vastleggen wanneer een herstart van de applicatie of container gedaan moet worden. Deze regels kan je instellen in Kubernetes. Als onze applicatie crasht, dan zal Kubernetes het automatisch opnieuw starten in de staat die we hiervoor hebben aangegeven.
Bij het uitrollen van meer containers kan een goed ingestelde configuratie ervoor zorgen dat de routering van request geregeld wordt (load balancing). Automatisch bijschalen kan ook als reactie op de load als deze omhoog gaat. Bijvoorbeeld bij meer bezoekers = meer containers.
Kubernetes beschikt over een grote hoeveelheid opties om logs te kunnen inzien. Deze applicatie en system logs helpen je te begrijpen wat er gebeurt binnen jouw cluster. Wil je nog meer informatie hebben? Doordat Kubernetes open source is heeft de community erachter diverse tools ontwikkeld. Je kan bijvoorbeeld Prometheus gebruiken voor het exporteren van statistieken over je applicaties en verzoeken.
Het is geen verhaal van Kubernetes versus Docker. Door ze beide te gebruiken profiteer je van de voordelen die ze bieden. Met Kubernetes kan je je bestaande Docker workloads gemakkelijker schalen zonder de complexiteit die het schalen in Docker met zich meebrengt. Je kan ook direct met Kubernetes beginnen als je verwacht in de toekomst snel op te moeten schalen.
Gebruik je nu al Docker en containers voor je applicaties? Door Kubernetes te gebruiken verminder je de operationele overhead waar bijna elke applicatie tegenaan loopt als het opgeschaald wordt. Kubernetes heeft wel een initiële tijdsinvestering voordat je aan de slag kan, maar diensten zoals Managed Kubernetes kunnen deze tijdsinvestering aanzienlijk verminderen.
Heb jij vragen over Kubernetes of Docker en wil je ook met ons samenwerken? Cyso kan je als Managed Service Provider helpen. Laten we een virtueel kopje koffie pakken. Neem contact met ons op!