Is Linkerd iets voor jou?

Niels Bogers, oktober 2021.


In deze blogpost doe ik verdiepend onderzoek naar een technologie die DevOps gerelateerd is. Ik kijk hoe je [Linkerd](https://linkerd.io/) kunt inzetten in een DevOps project. Aan het eind van deze blogpost is hopelijk helder hoe je Linkerd kunt toepassen in een eigen project.

Voor het onderzoek maken we gebruik van de workshop en library onderzoeksruimtes van de ict research methods. Het gebruik van meerdere onderzoeksruimtes zorgt ervoor dat je triangulatie toepast, data verzamelen gebeurt dus op meerdere manieren. We passen de volgende onderzoeksmethoden toe:

We gaan als eerste kijken naar wat Linkerd is en waar het uit bestaat, vervolgens hoe je Linkerd opzet, daarna hoe je Linkerd toevoegt in een bestaande applicatie en tot slot kijken we wat Linkerd toe kan voegen aan een applicatie.

Introductie Linkerd

Linkerd is een service mesh voor Kubernetes. Linkerd maakt het uitvoeren van services veiliger en eenvoudiger door het bieden van runtime debugging, observeerbaarheid, betrouwbaarheid en beveiliging. Linkerd doet dit allemaal zonder aanpassingen te maken aan de al bestaande code.

Een service mesh is een speciale infrastructuurlaag om communicatie tussen services veilig, betrouwbaar en snel te maken (Kunze, 2018a). Waar je normaal de communicatie logica in de services stopt, abstraheert een service mesh die logica met behulp van een proxy. Zo'n proxy draait naast elke service en zo voorkom je aanpassingen aan de code.

Een service mesh omvat meerdere management processen en een set van schaalbare netwerkproxy's die naast de applicatie draaien (Morgan, z.d.). De proxy's vormen de data plane van een service mesh. De management processen vormen de control plane van een service mesh. De architectuur van Linkerd is goed te zien in onderstaande afbeelding.

Linkerd architecture

Opmerking. Overgenomen uit Linkerd vs Istio: Service Mesh Comparison door A. Sahu, 2021 (https://www.infracloud.io/blogs/service-mesh-comparison-istio-vs-linkerd). 2021, Anjul Sahu.

Data plane

In bovenstaande afbeelding is te zien dat de data plane, oftewel de proxy's het verkeer van en naar de services afvangt. Dit gebeurt onder andere om het verkeer van TLS encryptie te voorzien (Fainchtein Buenavida, 2019). Dit gebeurt ook om het gedrag door te geven aan de control plane, deze kan daarmee relevante data tonen in grafieken aan de gebruiker.

Control plane

In bovenstaande afbeelding is te zien waar een deel van de control plane van Linkerd uit bestaat. De control plane heeft echter nog andere componenten die hier niet tussen staan, zoals Prometheus en Grafana.

De control plane heeft controle over de data plane en zorgt ervoor dat de data plane op een gecoördineerde manier kan handelen. Ook zorgt de control plane ervoor dat er een API is waar een gebruiker het gedrag van de data plane kan inspecteren en wijzigen.

Opzetten Linkerd

Om Linkerd te kunnen gebruiken moet je het eerst installeren. Onderstaande instructies geven aan hoe dit moet.

Installatie

Bij deze installatie gaan we er vanuit dat je een werkend kubectl commando hebt, is dit niet zo? Kijk dan hier hoe je dit moet installeren.

De Linkerd CLI installeren kan op met één van de volgende twee opties.

  1. Homebrew

    Als je gebruikt maakt van Homebrew dan kan je de CLI met het brew install linkerd commando installeren.

  2. Curl

    Als je geen gebruik maakt van Homebrew dan kan je de CLI installeren met behulp van het curl commando. Het installatie commando is: curl -sL run.linkerd.io/install | sh.

    Voeg de CLI toe aan de PATH variabele om verder te kunnen gaan. Het commando hiervoor ziet er als volgt uit: export PATH=$PATH:/c/Users/<USER>/.linkerd2/bin, vervang hierbij <USER> voor de naam van jouw user.

    Dit commando staat ook in de output van het curl commando.

Om te controleren of de installatie succesvol was voer je het linkerd version commando uit, de output toont de versies voor de client en server.

Linkerd version

De server version is nu nog unavailable, de volgende stappen lossen dit op.

Voer het volgende commando uit om te controleren of de cluster gereed is om Linkerd te installeren: linkerd check --pre. De output laat zien of de cluster gereed is.

Linkerd check

Vervolgens kun je met linkerd install | kubectl apply -f - de control plane installeren. De -f optie geeft aan dat er een naam van een bestand of folder volgt, de - erna laat weten dat het de bestanden pakt die voortkomen uit het linkerd install commando. Dit kan even duren, dus voordat je verder gaat is het aan te raden om te verifiëren dat alles goed ging met het linkerd check commando. De output laat zien of de installatie klaar is.

In Linkerd is het linkerd dashboard commando deprecated. Linkerd raadt daarom aan dat je linkerd viz dashboard gebruikt, zoals te zien in onderstaande afbeelding. Hiervoor is de viz extensie vereist, deze moet je dus installeren.

Linkerd dashboard

Met het linkerd viz install | kubectl apply -f - commando voegen we de viz extensie toe. Met het linkerd viz check commando kun je kijken of de installatie van de viz extensie succesvol is verlopen.

Het dashboard openen kan vervolgens met het al eerder genoemde linkerd viz dashboard commando. Het dashboard opent dan automatisch in een nieuw tabblad in de browser.

dashboard

Toevoegen van Linkerd aan een applicatie

Benodigdheden

De volgende stappen vereisen twee dingen:

  1. Een Kubernetes cluster.

    Een makkelijke manier om er één aan te maken is het runnen van een cluster op je lokale machine. Dit kan gemakkelijk met bijvoorbeeld Docker Desktop of k3d.

  2. Een valide YAML/JSON bestand.

    Gebruik het curl -sL run.linkerd.io/emojivoto.yml commando om het emojivoto.yml bestand te downloaden, deze kun je gebruiken in de volgende stappen.

Stappen

Om Linkerd ook echt te kunnen gebruiken voeg je het toe aan de applicatie. Onderstaande stappen geven aan hoe dit moet.

  1. Pak eerst het YAML/JSON bestand van de applicatie en run het kubectl apply -f <YAML/JSON file> commando.
  2. Open een lokale port om de applicatie op te draaien met het kubectl -n <NAMESPACE> port-forward <SERVICE> 8080:80 commando.
  3. Voeg Linkerd toe aan de applicatie met het volgende commando:
kubectl get -n <NAMESPACE> deploy -o yaml \
  | linkerd inject - \
  | kubectl apply -f -

Dit commando haalt alle deployments in de meegegeven namespace op, voegt annotaties toe in de Kubernetes deployment bestanden en daarna voert Kubernetes een rolling deploy uit om elke pod zonder downtime bij te werken met de proxies van de data plane.

Linkerd is nu aan de bestaande services toegevoegd!

Toevoegingen van Linkerd

Linkerd voegt een grote reeks aan functionaliteit toe, waaronder (Sahu, 2021):

  • Monitoring met Prometheus en Grafana
  • Automatic proxy injection
  • Load balancing
  • High availability mode
  • TLS encryptie

De grootste kracht van Linkerd is echter geen van deze functionaliteiten, maar juist dat deze functionaliteiten werken zonder dat Linkerd aanpassingen maakt aan de applicatie. Dit zorgt ervoor dat Linkerd makkelijk in gebruik te nemen is, zelfs voor grootte applicaties.

Het gebruik van Linkerd

Linkerd kan waarde toevoegen aan een applicatie, zeker als de applicatie veel services heeft. Linkerd komt dan ook veel voor in een microservice architectuur. Het is niet noodzakelijk om een microservice architectuur te hebben, het zou bij een monoliet bijvoorbeeld ook waarde kunnen toevoegen (INNOQ, 2021). Het hangt dus echt af van de functionaliteit die de applicatie nodig heeft en wat grootte van de applicatie is.

Applicaties die bijvoorbeeld nog niet in Kubernetes draaien moeten eerst in Kubernetes komen, hier kan veel tijd in gaan zitten. In zo'n geval kan je Linkerd dus beter niet gebruiken (Kunze, 2018b). Ook als je bijvoorbeeld alleen maar monitoring gebruikt dan is het niet verstandig om Linkerd met allemaal 'extra' functionaliteiten toe te voegen die je niet gebruikt, maar kun je beter zelf de monitoring inbouwen.

Conclusie

Is Linkerd iets voor jou? Deze blogpost heeft uitgelegd dat het erg afhangt van de applicatie. Linkerd kan veel functionaliteiten toevoegen, bestaande code hoeft niet aangepast en het is makkelijk te installeren en op te zetten. Het gebruik van Linkerd is daarom vaak handig in grotere applicaties met een microservice architectuur.

Is Linkerd iets voor jou? Naar mijn mening is het altijd verstandig om het gebruik van Linkerd te overwegen als je met een microservice architectuur werkt, zelf zou ik er voor kiezen om het wel te gebruiken tenzij er een goede rede is om het niet te doen.

Toepassen linkerd in Pitstop

Met deze blogpost sluit ik de onderzoeksweek in de minor af en ga door naar de eindopdracht van de coursefase. Dit is een kort DevOps project op basis van Pitstop, een demo applicatie van InfoSupport medewerker Edwin van Wijk. Hierin mag ik de onderzochte technologie ook toepassen. Linkerd toepassen in de pitstop applicatie kan eenvoudig door de installatie en opzet stappen te volgen die ik deze blogpost beschreef. Bij het toevoegen van Linkerd aan de pitstop applicatie gebruik je de .yml bestanden die al in pitstop zitten. In het geval van pitstop gaat het om meerdere .yml bestanden in plaats van één. Het vervangen van kubectl apply -f <YAML/JSON file> voor kubectl apply -f <folder name> is de enige nodige aanpassing, waarbij de <folder name> in dit geval k8s is.

Bronnen

Last change: 2025-01-13