Tools voor ontwikkelaars van applicaties die op Kubernetes draaien

Tools voor ontwikkelaars van applicaties die op Kubernetes draaien

Een moderne benadering van de bedrijfsvoering lost veel urgente zakelijke problemen op. Containers en orkestrators maken het gemakkelijk om projecten van elke complexiteit te schalen, vereenvoudigen de release van nieuwe versies, maken ze betrouwbaarder, maar creëren tegelijkertijd extra problemen voor ontwikkelaars. De programmeur geeft in de eerste plaats om zijn code: architectuur, kwaliteit, prestaties, elegantie - en niet hoe deze zal werken in Kubernetes en hoe hij deze moet testen en debuggen nadat hij zelfs maar minimale wijzigingen heeft aangebracht. Daarom is het ook heel natuurlijk dat er actief tools voor Kubernetes worden ontwikkeld, waardoor de problemen van zelfs de meest ‘archaïsche’ ontwikkelaars worden opgelost en ze zich op het belangrijkste kunnen concentreren.

Deze recensie biedt korte informatie over enkele van de tools die het leven gemakkelijker maken voor een programmeur wiens code in de pod'ax van een Kubernetes-cluster draait.

Simpele helpers

Kubectl-debug

  • De essentie: voeg uw container toe aan een Pod en kijk wat erin gebeurt.
  • GitHub.
  • Korte GH-statistieken: 715 sterren, 54 commits, 9 bijdragers.
  • Taal: Ga.
  • Licentie: Apache-licentie 2.0.

Met deze plug-in voor kubectl kunt u een extra container maken binnen de betreffende pod, die de procesnaamruimte deelt met andere containers. Hierin kunt u de werking van de pod debuggen: het netwerk controleren, naar netwerkverkeer luisteren, een spoor van het betreffende proces uitvoeren, enz.

U kunt ook overschakelen naar de procescontainer door te draaien chroot /proc/PID/root - dit kan erg handig zijn als u een rootshell in een container moet krijgen waarvoor deze in het manifest is ingesteld securityContext.runAs.

De tool is eenvoudig en effectief, dus hij kan voor elke ontwikkelaar nuttig zijn. We schreven er meer over in afzonderlijk artikel.

telepresence

  • De essentie: breng de applicatie over naar uw computer. Lokaal ontwikkelen en debuggen.
  • Plaats; GitHub.
  • Korte GH-statistieken: 2131 sterren, 2712 commits, 33 bijdragers.
  • Taal: Python.
  • Licentie: Apache-licentie 2.0.

Het idee van deze module is om een ​​container met de applicatie op de lokale gebruikerscomputer te starten en al het verkeer van het cluster ernaartoe en terug te proxyen. Met deze aanpak kunt u lokaal ontwikkelen door eenvoudigweg bestanden in uw favoriete IDE te bewerken: de resultaten zijn onmiddellijk beschikbaar.

De voordelen van lokaal draaien zijn het gemak van bewerkingen en directe resultaten, en de mogelijkheid om de applicatie op de gebruikelijke manier te debuggen. Het nadeel is dat het veeleisend is voor de verbindingssnelheid, wat vooral merkbaar is als je met een applicatie moet werken met redelijk hoge RPS en verkeer. Bovendien heeft Telepresence problemen met volumemounts op Windows, wat een beslissende beperking kan zijn voor ontwikkelaars die aan dit besturingssysteem gewend zijn.

Wij hebben onze ervaringen met het gebruik van Telepresence al gedeeld hier.

Ksync

  • De essentie: vrijwel onmiddellijke synchronisatie van code met de container in het cluster.
  • GitHub.
  • Korte GH-statistieken: 555 sterren, 362 commits, 11 bijdragers.
  • Taal: Ga.
  • Licentie: Apache-licentie 2.0.

Met dit hulpprogramma kunt u de inhoud van een lokale map synchroniseren met de map van een container die in het cluster draait. Zo'n tool is perfect voor ontwikkelaars die scripting-programmeertalen gebruiken, wier grootste probleem het leveren van code aan een actieve container is. Ksync is ontworpen om deze hoofdpijn te verlichten.

Wanneer eenmaal geïnitialiseerd door het commando ksync init in het cluster wordt een DaemonSet gemaakt, die wordt gebruikt om de status van het bestandssysteem van de geselecteerde container te controleren. Op zijn lokale computer voert de ontwikkelaar de opdracht uit ksync watch, dat configuraties en uitvoeringen bewaakt syncthing, waarmee bestanden rechtstreeks met het cluster worden gesynchroniseerd.

Het enige dat overblijft is ksync te instrueren wat ermee moet worden gesynchroniseerd. Dit commando is bijvoorbeeld:

ksync create --name=myproject --namespace=test --selector=app=backend --container=php --reload=false /home/user/myproject/ /var/www/myproject/

...zal een watcher maken met de naam myprojectdie zal zoeken naar een pod met een label app=backend en probeer de lokale map te synchroniseren /home/user/myproject/ met catalogus /var/www/myproject/ bij de container gebeld php.

Problemen en opmerkingen over ksync uit onze ervaring:

  • Moet worden gebruikt op Kubernetes-clusterknooppunten overlay2 als opslagstuurprogramma voor Docker. Het hulpprogramma werkt niet met andere.
  • Wanneer u Windows als client-besturingssysteem gebruikt, werkt de bestandssysteemwatcher mogelijk niet correct. Deze bug werd opgemerkt bij het werken met grote mappen - met een groot aantal geneste bestanden en mappen. Wij hebben gemaakt relevante kwestie in het synchronisatieproject, maar er is nog geen vooruitgang geboekt (sinds begin juli).
  • Gebruik bestand .stignore om paden of bestandspatronen op te geven die niet gesynchroniseerd hoeven te worden (bijvoorbeeld directories app/cache и .git).
  • Standaard zal ksync de container opnieuw opstarten wanneer bestanden veranderen. Voor Node.js is dit handig, maar voor PHP is dit totaal niet nodig. Het is beter om opcache uit te schakelen en de vlag te gebruiken --reload=false.
  • De configuratie kan altijd worden gecorrigeerd $HOME/.ksync/ksync.yaml.

squash

  • De essentie: foutopsporingsprocessen rechtstreeks in het cluster.
  • GitHub.
  • Korte GH-statistieken: 1154 sterren, 279 commits, 23 bijdragers.
  • Taal: Ga.
  • Licentie: Apache-licentie 2.0.

Deze tool is ontworpen voor het rechtstreeks opsporen van fouten in processen in pods. Het hulpprogramma is eenvoudig en stelt u interactief in staat de gewenste debugger te selecteren (zie hieronder) en naamruimte + pod, waarbij u moet ingrijpen. Momenteel ondersteund:

  • delve - voor Go-toepassingen;
  • GDB - via doelafstandsbediening + port forwarding;
  • JDWP port forwarding voor het debuggen van Java-applicaties.

Aan de IDE-kant is ondersteuning alleen beschikbaar in VScode (met behulp van uitbreiding), plannen voor het huidige (2019) jaar omvatten echter Eclipse en Intellij.

Om processen te debuggen voert Squash een geprivilegieerde container uit op de clusterknooppunten, dus u moet zich eerst vertrouwd maken met de mogelijkheden veilige modus om veiligheidsproblemen te voorkomen.

Volledige oplossingen

Laten we verder gaan met de zware artillerie - meer "grootschalige" projecten die zijn ontworpen om onmiddellijk aan veel van de behoeften van ontwikkelaars te voldoen.

NB: In deze lijst is uiteraard plaats voor ons Open Source-hulpprogramma werf (voorheen bekend als dapp). We hebben er echter al meer dan eens over geschreven en gesproken en hebben daarom besloten het niet in de recensie op te nemen. Voor degenen die meer vertrouwd willen raken met de mogelijkheden ervan, raden we aan het rapport te lezen/beluisteren “werf is onze tool voor CI/CD in Kubernetes.

Ontwikkelaarruimte

  • De essentie: voor wie graag in Kubernetes aan de slag wil, maar zich niet diep in de jungle wil verdiepen.
  • GitHub.
  • Korte GH-statistieken: 630 sterren, 1912 commits, 13 bijdragers.
  • Taal: Ga.
  • Licentie: Apache-licentie 2.0.

Een oplossing van het gelijknamige bedrijf, dat beheerde clusters met Kubernetes levert voor teamontwikkeling. Het hulpprogramma is gemaakt voor commerciële clusters, maar werkt uitstekend met alle andere.

Bij het uitvoeren van de opdracht devspace init in de projectencatalogus wordt u (interactief) aangeboden:

  • selecteer een werkend Kubernetes-cluster,
  • gebruik bestaande Dockerfile (of een nieuwe genereren) om er een container op te maken,
  • selecteer een opslagplaats voor het opslaan van containerimages, enz.

Na al deze voorbereidende stappen kunt u beginnen met ontwikkelen door de opdracht uit te voeren devspace dev. Het zal de container bouwen, deze uploaden naar de repository, de implementatie naar het cluster uitrollen en port forwarding en synchronisatie van de container met de lokale directory starten.

Optioneel wordt u gevraagd de terminal naar de container te verplaatsen. Je moet niet weigeren, want in werkelijkheid begint de container met het slaapcommando en voor echt testen moet de applicatie handmatig worden gestart.

Tenslotte het elftal devspace deploy rolt de applicatie en de bijbehorende infrastructuur uit naar het cluster, waarna alles in gevechtsmodus begint te functioneren.

Alle projectconfiguratie wordt opgeslagen in een bestand devspace.yaml. Naast de instellingen van de ontwikkelomgeving kun je daarin ook een beschrijving van de infrastructuur vinden, vergelijkbaar met standaard Kubernetes-manifesten, alleen dan sterk vereenvoudigd.

Tools voor ontwikkelaars van applicaties die op Kubernetes draaien
Architectuur en belangrijkste fasen van het werken met DevSpace

Bovendien is het eenvoudig om een ​​vooraf gedefinieerd onderdeel (bijvoorbeeld een MySQL DBMS) of een Helm-diagram aan het project toe te voegen. Lees meer binnen documentatie - het is niet ingewikkeld.

schavot

  • Plaats; GitHub.
  • Korte GH-statistieken: 7423 sterren, 4173 commits, 136 bijdragers.
  • Taal: Ga.
  • Licentie: Apache-licentie 2.0.

Dit hulpprogramma van Google beweert alle behoeften te dekken van een ontwikkelaar wiens code op de een of andere manier op een Kubernetes-cluster zal draaien. Beginnen met het gebruik ervan is niet zo eenvoudig als devspace: geen interactiviteit, taaldetectie en automatische creatie Dockerfile ze zullen het je hier niet aanbieden.

Als dit u echter niet bang maakt, kunt u met Skaffold het volgende doen:

  • Houd wijzigingen in de broncode bij.
  • Synchroniseer hem met de padcontainer als deze niet gemonteerd hoeft te worden.
  • Verzamel containers met code, als de taal wordt geïnterpreteerd, of compileer artefacten en verpak ze in containers.
  • De resulterende afbeeldingen worden automatisch gecontroleerd met behulp van container-structuur-test.
  • Afbeeldingen taggen en uploaden naar het Docker-register.
  • Implementeer een applicatie in een cluster met behulp van kubectl, Helm of kustomize.
  • Voer port forwarding uit.
  • Debug toepassingen geschreven in Java, Node.js, Python.

De workflow in verschillende varianten wordt declaratief beschreven in het bestand skaffold.yaml. Voor een project kunt u ook meerdere profielen definiëren waarin u de montage- en implementatiefasen geheel of gedeeltelijk kunt wijzigen. Geef voor ontwikkeling bijvoorbeeld een basisimage op die handig is voor de ontwikkelaar, en voor staging en productie - een minimale (+ gebruik securityContext containers of herdefinieer het cluster waarin de applicatie zal worden geïmplementeerd).

Docker-containers kunnen lokaal of op afstand worden gebouwd: in Google Cloud-build of in een cluster met behulp van Kaniko. Bazel en Jib Maven/Gradle worden ook ondersteund. Voor het taggen ondersteunt Skaffold vele strategieën: door git commit hash, datum/tijd, sha256-som van bronnen, etc.

Afzonderlijk is het vermeldenswaard de mogelijkheid om containers te testen. Het reeds genoemde container-structuur-testframework biedt de volgende verificatiemethoden:

  • Het uitvoeren van opdrachten in de context van een container met het bijhouden van de exit-statussen en het controleren van de tekstuitvoer van de opdracht.
  • Het controleren van de aanwezigheid van bestanden in de container en het matchen van de opgegeven attributen.
  • Controle van de bestandsinhoud met behulp van reguliere expressies.
  • Verificatie van metagegevens van afbeeldingen (ENV, ENTRYPOINT, VOLUMES etc.).
  • Licentiecompatibiliteit controleren.

Het synchroniseren van bestanden met de container gebeurt niet op de meest optimale manier: Skaffold maakt eenvoudigweg een archief aan met de bronnen, kopieert dit en pakt het uit in de container (tar moet geïnstalleerd zijn). Als uw hoofdtaak codesynchronisatie is, kunt u daarom beter naar een gespecialiseerde oplossing (ksync) kijken.

Tools voor ontwikkelaars van applicaties die op Kubernetes draaien
Hoofdfasen van de Skaffold-operatie

Over het algemeen kun je met de tool niet abstraheren van Kubernetes-manifesten en is er geen enkele interactiviteit, dus het lijkt misschien moeilijk onder de knie te krijgen. Maar dit is ook het voordeel ervan: grotere vrijheid van handelen.

Garden

  • Plaats; GitHub.
  • Korte GH-statistieken: 1063 sterren, 1927 commits, 17 bijdragers.
  • Taal: TypeScript (het is de bedoeling om het project in verschillende componenten op te splitsen, waarvan sommige in Go zullen zijn, en ook een SDK te maken voor het maken van add-ons in TypeScript/JavaScript en Go).
  • Licentie: Apache-licentie 2.0.

Net als Skaffold wil Garden de processen voor het leveren van applicatiecode aan het K8s-cluster automatiseren. Om dit te doen, moet u eerst de projectstructuur in een YAML-bestand beschrijven en vervolgens de opdracht uitvoeren garden dev. Ze zal alle magie doen:

  • Verzamel containers met verschillende onderdelen van het project.
  • Voert integratie- en unit-tests uit, indien die zijn beschreven.
  • Rolt alle projectcomponenten uit naar het cluster.
  • Als de broncode verandert, wordt de hele pijplijn opnieuw opgestart.

De belangrijkste focus bij het gebruik van deze tool is het delen van een extern cluster met een ontwikkelteam. Als in dit geval een aantal bouw- en teststappen al zijn uitgevoerd, zal dit het hele proces aanzienlijk versnellen, omdat Garden de in de cache opgeslagen resultaten kan gebruiken.

Een projectmodule kan een container, een Maven-container, een Helm-diagram of een manifest zijn kubectl apply of zelfs een OpenFaaS-functie. Bovendien kan elk van de modules uit een externe Git-repository worden gehaald. Een module kan al dan niet services, taken en tests definiëren. Services en taken kunnen afhankelijkheden hebben, waardoor u de implementatievolgorde van een bepaalde service kunt bepalen en de lancering van taken en tests kunt organiseren.

Garden biedt de gebruiker een prachtig dashboard (momenteel in experimentele staat), dat de projectgrafiek weergeeft: componenten, montagevolgorde, uitvoering van taken en tests, hun verbindingen en afhankelijkheden. Rechtstreeks in de browser kunt u de logbestanden van alle projectcomponenten bekijken en controleren wat een bepaalde component via HTTP uitvoert (als er uiteraard een ingangsbron voor is gedeclareerd).

Tools voor ontwikkelaars van applicaties die op Kubernetes draaien
Paneel voor tuin

Deze tool heeft ook een hot-reload-modus, die eenvoudigweg scriptwijzigingen synchroniseert met de container in het cluster, waardoor het foutopsporingsproces van applicaties aanzienlijk wordt versneld. Tuin heeft een goede documentatie en niet slecht reeks voorbeelden, zodat u er snel aan kunt wennen en het kunt gaan gebruiken. Trouwens, onlangs hebben we gepubliceerd artikel vertaling van zijn auteurs.

Conclusie

Natuurlijk is deze lijst met tools voor het ontwikkelen en debuggen van applicaties in Kubernetes niet beperkt tot. Er zijn nog veel meer zeer nuttige en praktische hulpprogramma's die, zo niet een apart artikel, dan op zijn minst een vermelding waard zijn. Vertel ons wat je gebruikt, welke problemen je tegenkwam en hoe je ze hebt opgelost!

PS

Lees ook op onze blog:

Bron: www.habr.com

Voeg een reactie