Is Linkerd iets voor jou?
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.
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.
-
Homebrew
Als je gebruikt maakt van Homebrew dan kan je de CLI met het
brew install linkerd
commando installeren. -
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.
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.
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.
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.
Toevoegen van Linkerd aan een applicatie
Benodigdheden
De volgende stappen vereisen twee dingen:
-
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.
-
Een valide YAML/JSON bestand.
Gebruik het
curl -sL run.linkerd.io/emojivoto.yml
commando om hetemojivoto.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.
- Pak eerst het YAML/JSON bestand van de applicatie en run het
kubectl apply -f <YAML/JSON file>
commando. - Open een lokale port om de applicatie op te draaien met het
kubectl -n <NAMESPACE> port-forward <SERVICE> 8080:80
commando. - 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
- Bonestroo, W.J., Meesters, M., Niels, R., Schagen, J.D., Henneke, L., Turnhout, K. van (2018). ICT Research Methods. HBO-i Amsterdam. ISBN/EAN: 9990002067426. Geraadpleegd op 7 oktober 2021 van http://www.ictresearchmethods.nl/
- Fainchtein Buenavida, L. (2019, 10 december). Introduction to Service Meshes on Kubernetes. DZone. Geraadpleegd op 7 oktober 2021 van https://dzone.com/articles/introduction-to-service-meshes-on-kubernetes
- INNOQ. (2021, 28 september). Service Mesh Comparison. Geraadpleegd op 7 oktober 2021 van https://servicemesh.es/
- Kunze, T. (2018a, december 11). What is a Service Mesh?. Glasnostic. Geraadpleegd op 8 oktober 2021 van https://glasnostic.com/blog/what-is-a-service-mesh-istio-linkerd-envoy-consul
- Kunze, T. (2018b, 18 december). Should I Use a Service Mesh?. Glasnostic. Geraadpleegd op 7 oktober 2021 van https://glasnostic.com/blog/should-i-use-a-service-mesh
- Morgan, W. (z.d.). The Service Mesh: What Every Engineer Needs to Know about the World’s Most Over-Hyped Technology. Buoyant. Geraadpleegd op 6 oktober 2021 van https://buoyant.io/service-mesh-manifesto/
- Sahu, A. (2021, 9 maart). Linkerd vs Istio: Service Mesh Comparison. InfraCloud. Geraadpleegd op 6 oktober 2021 van https://www.infracloud.io/blogs/service-mesh-comparison-istio-vs-linkerd/