
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.
- .
- 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 .
Telepresence
- Essensen: flytta applikationen till din dator. Utveckla och debugga lokalt.
- ; .
- 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. .
Ksync
- Essensen: nÀstan omedelbar synkronisering av kod med containern i klustret..
- .
- 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 , 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
overlay2anvĂ€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 i syncthing-projektet, men det har hittills (sedan början av juli) inte skett nĂ„gon framsteg.
- AnvÀnd filen för att ange sökvÀgar eller filmall som inte ska synkroniseras (till exempel kataloger
app/cacheoch.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.
- .
- 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 ), 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 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 (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 â».
DevSpace
- Essensen: för dem som vill börja arbeta i Kubernetes men inte vill gÄ djupt in i dess fÀllor.
- .
- 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.

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 â den Ă€r inte komplicerad.
Skaffold
- ; .
- 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 .
- 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 eller i klustret med hjÀlp av . 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,VOLUMESoch 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).

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
- ; .
- 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 ), 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).

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 och inte dÄlig , som gör att man snabbt kan sÀtta sig in i det och börja anvÀnda det. Förresten, nyligen publicerade vi 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
