Verktyg för utvecklare av applikationer som körs i Kubernetes

Verktyg för utvecklare av applikationer som körs i Kubernetes

En modern strategi för drift löser mĂ„nga aktuella affĂ€rsproblem. Containrar och orkestratorer gör det enkelt att skala projekt av alla svĂ„righetsgrader, förenklar lanseringar av nya versioner och gör dem mer pĂ„litliga, men skapar samtidigt ytterligare problem för utvecklare. Utvecklaren Ă€r primĂ€rt intresserad av sin kod: arkitektur, kvalitet, prestanda, elegans – snarare Ă€n hur den körs i Kubernetes och hur den ska testas och felsökas efter Ă€ven de minsta Ă€ndringar. DĂ€rför Ă€r det mycket rimligt att det aktivt utvecklas verktyg för Kubernetes som hjĂ€lper till att lösa problemen Ă€ven för de mest "arkaiska" utvecklarna och lĂ„ter dem fokusera pĂ„ det vĂ€sentliga.

Denna översyn ger en kort information om vissa verktyg som förenklar livet för programmerare vars kod körs i poddar inom Kubernetes-klustret.

Enkla hjÀlpare

Kubectl-debug

  • Essensen: lĂ€gg till din container i Pod och se vad som hĂ€nder dĂ€r.
  • GitHub.
  • Kort statistik frĂ„n GH: 715 stjĂ€rnor, 54 commits, 9 bidragsgivare.
  • SprĂ„k: Go.
  • Licens: Apache License 2.0.

Denna plugin för kubectl möjliggör att skapa en extra container inuti den aktuella podden, som kommer att dela processnamnrymd med de andra containrarna. I den kan du debugga poddens funktion: kontrollera nÀtverksanslutning, övervaka nÀtverkstrafik, utföra strace pÄ en intressant process, etc.

Du kan ocksĂ„ vĂ€xla till processcontainern genom att utföra chroot /proc/PID/root – detta Ă€r mycket praktiskt nĂ€r du behöver fĂ„ root-shell i containern, för vilken det i manifestet har stĂ€llts in securityContext.runAs.

Verktyget Àr enkelt och effektivt, sÄ det kan vara till nytta för varje utvecklare. Mer om det har vi skrivit i en separat artikel.

Telepresence

  • Essensen: flytta applikationen till din dator. Utveckla och debugga lokalt.
  • Webbplats; GitHub.
  • Kort statistik frĂ„n GH: 2131 stjĂ€rnor, 2712 commits, 33 bidragsgivare.
  • SprĂ„k: Python.
  • Licens: Apache License 2.0.

Idén med denna komponent Àr att köra en container med applikationen pÄ en lokal anvÀndardator och proxy hela trafiken frÄn klustret till den och tillbaka. Denna metod gör det möjligt att utveckla lokalt genom att enkelt Àndra filer i din favorit-IDE: resultaten blir omedelbart tillgÀngliga.

Fördelarna med lokal körning Àr bekvÀmligheten vid Àndringar och omedelbara resultat, samt möjligheten att felsöka applikationen pÄ det sÀtt man Àr van vid. Nackdelarna inkluderar krav pÄ hastighet pÄ anslutningen, vilket blir sÀrskilt mÀrkbart nÀr man arbetar med en applikation med tillrÀckligt hög RPS och trafik. Dessutom har Telepresence problem med volymmonteringar i Windows, vilket kan bli en avgörande begrÀnsning för utvecklare som Àr vana vid detta operativsystem.

Vi har redan delat med oss av vÄr erfarenhet av att anvÀnda Telepresence. hÀr.

Ksync

  • Essensen: nĂ€stan omedelbar synkronisering av kod med containern i klustret..
  • GitHub.
  • Kort statistik frĂ„n GH: 555 stjĂ€rnor, 362 commits, 11 bidragsgivare.
  • SprĂ„k: Go.
  • Licens: Apache License 2.0.

Verktyget gör det möjligt att synkronisera innehÄllet i en lokal katalog med katalogen för en container som körs i klustret. Detta verktyg passar utmÀrkt för utvecklare som arbetar med skriptsprÄk, vars största problem Àr att fÄ koden in i en fungerande container. Ksync Àr avsett att lösa denna huvudvÀrk.

Vid engÄngsinitialisering med kommandot ksync init skapas en DaemonSet i klustret, som anvÀnds för att övervaka tillstÄndet för filsystemet i den valda containern. PÄ sin lokala dator kör utvecklaren kommandot ksync watch, som övervakar konfigurationerna och startar syncthing, som utför den faktiska synkroniseringen av filer med klustret.

Det ÄterstÄr att instruera ksync om vad som ska synkroniseras med vad. Till exempel, ett sÄdant kommando:

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


 kommer att skapa en watcher med namnet myproject, som kommer att leta efter en pod med etiketten app=backend och försöka synkronisera den lokala katalogen /home/user/myproject/ med katalogen /var/www/myproject/ i containern med namnet php.

Problem och anteckningar om ksync utifrÄn vÄr erfarenhet:

  • PĂ„ noder i Kubernetes-klustret mĂ„ste overlay2 anvĂ€ndas som lagringsdrivrutin för Docker. Ingen annan kommer att fungera med verktyget.
  • Vid anvĂ€ndning av Windows som klient-OS kan det förekomma felaktigt beteende hos filsystemets watcher. Denna bugg har observerats vid arbete med stora kataloger — med mĂ„nga inbĂ€ddade filer och kataloger. Vi har skapat en motsvarande issue i syncthing-projektet, men det har hittills (sedan början av juli) inte skett nĂ„gon framsteg.
  • AnvĂ€nd filen .stignore för att ange sökvĂ€gar eller filmall som inte ska synkroniseras (till exempel kataloger app/cache och .git).
  • Som standard kommer ksync att starta om containern vid varje Ă€ndring av filer. För Node.js Ă€r detta anvĂ€ndbart, men för PHP Ă€r det helt onödigt. Det Ă€r bĂ€ttre att stĂ€nga av opcache och anvĂ€nda flaggan --reload=false.
  • Konfigurationen kan alltid justeras i $HOME/.ksync/ksync.yaml.

Squash

  • Essensen: debuge processer direkt i klustret.
  • GitHub.
  • Kort statistik GH: 1154 stjĂ€rnor, 279 commits, 23 bidra.
  • SprĂ„k: Go.
  • Licens: Apache License 2.0.

Detta verktyg Àr avsett för att debuga processer direkt i poddar. Verktyget Àr enkelt och tillÄter i interaktivt lÀge att vÀlja den önskade debuggern (se nedan) och namespace + pod, i den process som behöver ingripas i. För nÀrvarande stöds:

  • delve — för Go-appar;
  • GDB — via target remote + port forwarding;
  • port forwarding JDWP för att debugga Java-appar.

FrÄn IDE-sidan finns det stöd endast i VScode (med hjÀlp av tillÀgget), men det finns planer för det aktuella (2019) Äret för Eclipse och Intellij.

För att debugga processer startar Squash en privilegierad container pÄ klusternoderna, sÄ det Àr nödvÀndigt att först bekanta sig med möjligheterna sÀkert lÀge för att undvika sÀkerhetsproblem.

Komplexa lösningar

Vi gĂ„r vidare till den tunga artilleriet – mer ”skala”-projekt som syftar till att omedelbart tĂ€cka mĂ„nga utvecklares behov.

NB: I denna lista finns det utan tvekan plats för vĂ„r Open Source-nytta werf (tidigare kĂ€nd som dapp). Vi har dock redan skrivit och berĂ€ttat om den flera gĂ„nger, sĂ„ vi har beslutat att inte inkludera den i översikten. För dem som vill bekanta sig nĂ€rmare med dess möjligheter rekommenderar vi att lĂ€sa/lyssna pĂ„ föredraget “werf — vĂ„rt verktyg för CI/CD i Kubernetes».

DevSpace

  • Essensen: för dem som vill börja arbeta i Kubernetes men inte vill gĂ„ djupt in i dess fĂ€llor.
  • GitHub.
  • Kort statistik GH: 630 stjĂ€rnor, 1912 commits, 13 bidra.
  • SprĂ„k: Go.
  • Licens: Apache License 2.0.

Lösning av det namngivna företaget som tillhandahÄller managed-kluster med Kubernetes för teamutveckling. Verktyget skapades för kommersiella kluster, men fungerar ocksÄ utmÀrkt med andra.

NÀr kommandot devspace init i katalogen med projektet körs kommer du att erbjudas (i interaktivt lÀge):

  • vĂ€lja en arbets Kubernetes-kluster,
  • anvĂ€nda en befintlig Dockerfile (eller generera en ny) för att skapa en container baserat pĂ„ den,
  • vĂ€lja ett repository för att lagra containerbilder och sĂ„ vidare.

Efter alla dessa förberedande ÄtgÀrder kan man börja utvecklingen genom att köra kommandot devspace dev. Det kommer att samla containern, ladda upp den till förvaret, lansera deployment i klustret och starta portvidarebefordran och synkronisera containern med den lokala katalogen.

Det kommer att erbjudas att gÄ in i containern via terminalen, vilket rekommenderas, eftersom containern faktiskt startar med kommandot sleep, och för verklig testning krÀvs att applikationen startas manuellt.

Till slut kommer kommandot devspace deploy att lansera applikationen och dess relaterade infrastruktur i klustret, efter vilket allt börjar fungera i produktionslÀge.

All projektkonfiguration lagras i filen devspace.yaml. Förutom utvecklingsmiljöinstÀllningar kan man ocksÄ hitta en beskrivning av infrastrukturen hÀr, liknande standardmanifesten frÄn Kubernetes, men kraftigt förenklade.

Verktyg för utvecklare av applikationer som körs i Kubernetes
Arkitektur och huvudsteg med DevSpace

Dessutom Ă€r det enkelt att lĂ€gga till en fördefinierad komponent i projektet (till exempel databashanteraren MySQL) eller Helm-chart. LĂ€s mer i dokumentationen — den Ă€r inte komplicerad.

Skaffold

  • Webbplats; GitHub.
  • Kort statistik frĂ„n GH: 7423 stjĂ€rnor, 4173 commits, 136 bidragsgivare.
  • SprĂ„k: Go.
  • Licens: Apache License 2.0.

Detta verktyg frÄn Google syftar till att tÀcka alla behov för en utvecklare vars kod pÄ nÄgot sÀtt kommer att köras i ett Kubernetes-kluster. Att börja anvÀnda det Àr inte sÄ enkelt som med devspace: ingen interaktivitet, sprÄkinstÀllningar och automatisk skapande Dockerfile kommer du inte att bli erbjuden hÀr.

Men om detta inte skrĂ€mmer dig — hĂ€r Ă€r vad Skaffold möjliggör:

  • Att övervaka Ă€ndringar i kĂ€llkoden.
  • Synchronisera det med podens container, om det inte krĂ€ver byggande.
  • Bygga containrar med koden, om programmeringssprĂ„ket Ă€r tolkat, eller kompilera artefakter och paketera dem i containrar.
  • De resulterande bilderna kontrolleras automatiskt med hjĂ€lp av container-structure-test.
  • Tagga och ladda upp bilder till Docker Registry.
  • Distribuera applikationen i klustret med hjĂ€lp av kubectl, Helm eller kustomize.
  • Göra portvidarebefordran.
  • Felsöka applikationer skrivna i Java, Node.js, Python.

Arbetsflödet i olika variationer beskrivs deklarativt i filen skaffold.yaml. För projektet kan man Ă€ven definiera flera profiler dĂ€r man delvis eller helt Ă€ndrar bygg- och deploy-stegen. Till exempel kan man för utveckling ange en grundbild som Ă€r bekvĂ€m för utvecklaren, och för staging och produktion – en minimal (+ anvĂ€nda securityContext eller Ă„sidosĂ€tta klustret dĂ€r applikationen kommer att driftsĂ€ttas).

Byggning av Docker-containrar kan utföras lokalt eller pÄ distans: i Google Cloud Build eller i klustret med hjÀlp av Kaniko. Dessutom stöds Bazel och Jib Maven/Gradle. För taggning stöder Skaffold mÄnga strategier: utifrÄn git commit hash, datum/tid, sha256-summa av kÀllkoden osv.

Det Àr ocksÄ vÀrt att nÀmna möjligheten att testa containrar. Det redan nÀmnda ramverket container-structure-test erbjuder följande metoder för kontroll:

  • Utföra kommandon i containerns kontext med spĂ„rning av exit-statusar och kontroll av den textuella 'utgĂ„ngen' av kommandot.
  • Kontroll av filernas existens i containern och överensstĂ€mmelse av attribut mot angivna.
  • Kontroll av filinnehĂ„ll enligt reguljĂ€ra uttryck.
  • JĂ€mförelse av imagenas metadata (ENV, ENTRYPOINT, VOLUMES och liknande).
  • Kontroll av licenskompatibilitet.

Fil synkronisering med containern genomförs pÄ ett mindre optimalt sÀtt: Skaffold skapar helt enkelt ett arkiv med kÀllkoden, kopierar det och packar upp det i containern (tar mÄste vara installerat). DÀrför, om din huvudsakliga uppgift Àr kodsynkronisering, Àr det bÀttre att titta Ät ett specialiserat verktyg (ksync).

Verktyg för utvecklare av applikationer som körs i Kubernetes
Huvudstegen i Skaffold

I allmĂ€nhet tillĂ„ter verktyget inte att man abstraherar frĂ„n Kubernetes-manifest och har ingen interaktivitet, sĂ„ det kan verka svĂ„rt att lĂ€ra sig. Men just detta Ă€r ocksĂ„ dess fördel – stor frihet i handlandet.

Garden

  • Webbplats; GitHub.
  • Kort statistik pĂ„ GH: 1063 stjĂ€rnor, 1927 commits, 17 bidragsgivare.
  • SprĂ„k: TypeScript (det planeras att dela projektet i flera komponenter, varav vissa kommer vara pĂ„ Go, samt att skapa SDK för tillĂ€gg pĂ„ TypeScript/JavaScript och Go).
  • Licens: Apache License 2.0.

Precis som Skaffold syftar Garden till att automatisera processerna för kodleverans av applikationen till K8s-klustret. För detta mÄste man först beskriva projektstrukturen i en YAML-fil och sedan köra kommandot garden dev. Det kommer att utföra all magi:

  • Samla containrar med olika delar av projektet.
  • Genomföra integrations- och enhetstester, om sĂ„dana har beskrivits.
  • Det kommer att rulla ut alla projektkomponenter till klustret.
  • Vid Ă€ndring av kĂ€llkoden kommer hela pipelinen att startas om.

Fokus vid anvÀndning av detta verktyg ligger pÄ gemensamt bruk av det fjÀrrstyrda klustret av utvecklarteamet. Om vissa bygg- och teststeg redan har genomförts kommer detta avsevÀrt att snabba upp hela processen, eftersom Garden kan anvÀnda cachelagrade resultat.

Projektmodulen kan vara en container, en Maven-container, ett Helm-diagram, ett manifest för kubectl apply eller till och med en OpenFaaS-funktion. Dessutom kan vilken modul som helst hÀmtas frÄn ett fjÀrr-Git-repo. Modulen kan definiera (eller inte) tjÀnster, uppgifter och tester. TjÀnster och uppgifter kan ha beroenden, vilket gör att man kan definiera i vilken ordning olika tjÀnster ska distribueras och ordna startordningen för uppgifter och tester.

Garden erbjuder anvÀndaren en vacker dashboard (fortfarande i experimentellt tillstÄnd), dÀr projektgrafen visas: komponenter, byggsekvens, utförande av uppgifter och tester, deras relationer och beroenden. Direkt i webblÀsaren kan man se loggar för alla projektkomponenter, kontrollera vad varje komponent returnerar via HTTP (om en ingress-resurs Àr deklarerad för den, förstÄs).

Verktyg för utvecklare av applikationer som körs i Kubernetes
Panel för Garden

Detta verktyg har ocksÄ ett hot-reload-lÀge, som helt enkelt synkroniserar Àndringar i skripten med containern i klustret, vilket avsevÀrt pÄskyndar felavkÀnning av applikationen. Garden har en bra dokumentation och inte dÄlig uppsÀttning exempel, som gör att man snabbt kan sÀtta sig in i det och börja anvÀnda det. Förresten, nyligen publicerade vi översÀttningen av artikeln frÄn dess författare.

Slutsats

SjÀlvklart begrÀnsar denna lista inte verktygen för utveckling och felsökning av applikationer i Kubernetes. Det finns fortfarande mÄnga mycket anvÀndbara och praktiska verktyg som förtjÀnar, om inte en separat artikel, sÄ Ätminstone ett omnÀmnande. BerÀtta vad du anvÀnder, vilka problem du har stött pÄ och hur du har löst dem!

P.S.

LÀs Àven i vÄr blogg:

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster