{"id":37475,"date":"2019-10-31T22:17:51","date_gmt":"2019-10-31T19:17:51","guid":{"rendered":"https:\/\/prohoster.info\/blog\/instrumenty-dlya-razrabotchikov-prilozhenij-zapuskaemyh-v-kubernetes\/"},"modified":"2019-10-31T22:17:51","modified_gmt":"2019-10-31T19:17:51","slug":"instrumenty-dlya-razrabotchikov-prilozhenij-zapuskaemyh-v-kubernetes","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/instrumenty-dlya-razrabotchikov-prilozhenij-zapuskaemyh-v-kubernetes","title":{"rendered":"Verktyg f\u00f6r utvecklare av applikationer som k\u00f6rs i Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Verktyg f\u00f6r utvecklare av applikationer som k\u00f6rs i Kubernetes\" src=\"\/wp-content\/uploads\/2019\/08\/ad1f46a3562dcefacaa1722ee1ce3387.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEn modern strategi f\u00f6r drift l\u00f6ser m\u00e5nga aktuella aff\u00e4rsproblem. Containrar och orkestratorer g\u00f6r det enkelt att skala projekt av alla sv\u00e5righetsgrader, f\u00f6renklar lanseringar av nya versioner och g\u00f6r dem mer p\u00e5litliga, men skapar samtidigt ytterligare problem f\u00f6r utvecklare. Utvecklaren \u00e4r prim\u00e4rt intresserad av sin kod: arkitektur, kvalitet, prestanda, elegans \u2013 snarare \u00e4n hur den k\u00f6rs i Kubernetes och hur den ska testas och fels\u00f6kas efter \u00e4ven de minsta \u00e4ndringar. D\u00e4rf\u00f6r \u00e4r det mycket rimligt att det aktivt utvecklas verktyg f\u00f6r Kubernetes som hj\u00e4lper till att l\u00f6sa problemen \u00e4ven f\u00f6r de mest \"arkaiska\" utvecklarna och l\u00e5ter dem fokusera p\u00e5 det v\u00e4sentliga.<\/p>\n<p>Denna \u00f6versyn ger en kort information om vissa verktyg som f\u00f6renklar livet f\u00f6r programmerare vars kod k\u00f6rs i poddar inom Kubernetes-klustret.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Enkla hj\u00e4lpare<\/h2>\n<p><\/p>\n<h3>Kubectl-debug<\/h3>\n<p><\/p>\n<ul>\n<li> Essensen: <b>l\u00e4gg till din container i Pod och se vad som h\u00e4nder d\u00e4r<\/b>.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/aylei\/kubectl-debug\">GitHub<\/a><\/noindex>.<\/li>\n<li> Kort statistik fr\u00e5n GH: 715 stj\u00e4rnor, 54 commits, 9 bidragsgivare.<\/li>\n<li> Spr\u00e5k: Go.<\/li>\n<li> Licens: Apache License 2.0.<\/li>\n<\/ul>\n<p>\nDenna plugin f\u00f6r kubectl g\u00f6r det m\u00f6jligt att skapa en extra container inuti den valda pod&#8217;en, som kommer att dela processens namnrymder med de andra containrarna. Inuti kan du debugga pod&#8217;ens arbete: kontrollera n\u00e4tverksfunktionen, lyssna p\u00e5 n\u00e4tverkstrafik, g\u00f6ra strace p\u00e5 den intressanta processen osv.<\/p>\n<p>Du kan ocks\u00e5 v\u00e4xla till processcontainern genom att utf\u00f6ra <code>chroot \/proc\/PID\/root<\/code> \u2013 detta \u00e4r mycket praktiskt n\u00e4r du beh\u00f6ver f\u00e5 root-shell i containern, f\u00f6r vilken det i manifestet har st\u00e4llts in <code>securityContext.runAs<\/code>.<\/p>\n<p>Verktyget \u00e4r enkelt och effektivt, s\u00e5 det kan vara till nytta f\u00f6r varje utvecklare. Mer om det har vi skrivit i <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/436112\/\">en separat artikel<\/a><\/noindex>.<\/p>\n<h3>Telepresence<\/h3>\n<p><\/p>\n<ul>\n<li> Essensen: <b>flytta applikationen till din dator. Utveckla och debugga lokalt<\/b>.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/www.telepresence.io\/\">Webbplats<\/a><\/noindex>; <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/telepresenceio\/telepresence\">GitHub<\/a><\/noindex>.<\/li>\n<li> Kort statistik fr\u00e5n GH: 2131 stj\u00e4rnor, 2712 commits, 33 bidragsgivare.<\/li>\n<li> Spr\u00e5k: Python.<\/li>\n<li> Licens: Apache License 2.0.<\/li>\n<\/ul>\n<p>\nId\u00e9n med denna komponent \u00e4r att k\u00f6ra en container med applikationen p\u00e5 en lokal anv\u00e4ndardator och proxy hela trafiken fr\u00e5n klustret till den och tillbaka. Denna metod g\u00f6r det m\u00f6jligt att utveckla lokalt genom att enkelt \u00e4ndra filer i din favorit-IDE: resultaten blir omedelbart tillg\u00e4ngliga.<\/p>\n<p>F\u00f6rdelarna med lokal k\u00f6rning \u00e4r bekv\u00e4mligheten vid \u00e4ndringar och omedelbara resultat, samt m\u00f6jligheten att fels\u00f6ka applikationen p\u00e5 det s\u00e4tt man \u00e4r van vid. Nackdelarna inkluderar krav p\u00e5 hastighet p\u00e5 anslutningen, vilket blir s\u00e4rskilt m\u00e4rkbart n\u00e4r man arbetar med en applikation med tillr\u00e4ckligt h\u00f6g RPS och trafik. Dessutom har Telepresence problem med volymmonteringar i Windows, vilket kan bli en avg\u00f6rande begr\u00e4nsning f\u00f6r utvecklare som \u00e4r vana vid detta operativsystem.<\/p>\n<p>Vi har redan delat med oss av v\u00e5r erfarenhet av att anv\u00e4nda Telepresence. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/446788\/\">h\u00e4r<\/a><\/noindex>.<\/p>\n<h3>Ksync<\/h3>\n<p><\/p>\n<ul>\n<li> Essensen: <b>n\u00e4stan omedelbar synkronisering av kod med containern i klustret.<\/b>.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/vapor-ware\/ksync\">GitHub<\/a><\/noindex>.<\/li>\n<li> Kort statistik fr\u00e5n GH: 555 stj\u00e4rnor, 362 commits, 11 bidragsgivare.<\/li>\n<li> Spr\u00e5k: Go.<\/li>\n<li> Licens: Apache License 2.0.<\/li>\n<\/ul>\n<p>\nVerktyget g\u00f6r det m\u00f6jligt att synkronisera inneh\u00e5llet i en lokal katalog med katalogen f\u00f6r en container som k\u00f6rs i klustret. Detta verktyg passar utm\u00e4rkt f\u00f6r utvecklare som arbetar med skriptspr\u00e5k, vars st\u00f6rsta problem \u00e4r att f\u00e5 koden in i en fungerande container. Ksync \u00e4r avsett att l\u00f6sa denna huvudv\u00e4rk.<\/p>\n<p>Vid eng\u00e5ngsinitialisering med kommandot <code>ksync init<\/code> skapas en DaemonSet i klustret, som anv\u00e4nds f\u00f6r att \u00f6vervaka tillst\u00e5ndet f\u00f6r filsystemet i den valda containern. P\u00e5 sin lokala dator k\u00f6r utvecklaren kommandot <code>ksync watch<\/code>, som \u00f6vervakar konfigurationerna och startar <noindex><a rel=\"nofollow\" href=\"https:\/\/syncthing.net\/\">syncthing<\/a><\/noindex>, som utf\u00f6r den faktiska synkroniseringen av filer med klustret.<\/p>\n<p>Det \u00e5terst\u00e5r att instruera ksync om vad som ska synkroniseras med vad. Till exempel, ett s\u00e5dant kommando:<\/p>\n<pre><code class=\"plaintext\">ksync create --name=myproject --namespace=test --selector=app=backend --container=php --reload=false \/home\/user\/myproject\/ \/var\/www\/myproject\/<\/code><\/pre>\n<p>\n\u2026 kommer att skapa en watcher med namnet <code>myproject<\/code>, som kommer att leta efter en pod med etiketten <code>app=backend<\/code> och f\u00f6rs\u00f6ka synkronisera den lokala katalogen <code>\/home\/user\/myproject\/<\/code> med katalogen <code>\/var\/www\/myproject\/<\/code> i containern med namnet <code>php<\/code>.<\/p>\n<p>Problem och anteckningar om ksync utifr\u00e5n v\u00e5r erfarenhet:<\/p>\n<ul>\n<li> P\u00e5 noder i Kubernetes-klustret m\u00e5ste <code>overlay2<\/code> anv\u00e4ndas som lagringsdrivrutin f\u00f6r Docker. Ingen annan kommer att fungera med verktyget.<\/li>\n<li> N\u00e4r Windows anv\u00e4nds som klient-OS kan watcher&#8217;n f\u00f6r filsystemet fungera oegentligt. Denna bugg har observerats vid arbete med stora kataloger \u2014 med ett stort antal inb\u00e4ddade filer och mappar. Vi har skapat <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/syncthing\/syncthing\/issues\/5832\">en motsvarande issue<\/a><\/noindex> i syncthing-projektet, men det har hittills (sedan b\u00f6rjan av juli) inte skett n\u00e5gon framsteg.<\/li>\n<li> Anv\u00e4nd filen <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.syncthing.net\/users\/ignoring.html\"><code>.stignore<\/code><\/a><\/noindex> f\u00f6r att ange s\u00f6kv\u00e4gar eller filmall som inte ska synkroniseras (till exempel kataloger <code>app\/cache<\/code> och <code>.git<\/code>).<\/li>\n<li> Som standard kommer ksync att starta om containern vid varje \u00e4ndring av filer. F\u00f6r Node.js \u00e4r detta anv\u00e4ndbart, men f\u00f6r PHP \u00e4r det helt on\u00f6digt. Det \u00e4r b\u00e4ttre att st\u00e4nga av opcache och anv\u00e4nda flaggan <code>--reload=false<\/code>.<\/li>\n<li> Konfigurationen kan alltid justeras i <code>$HOME\/.ksync\/ksync.yaml<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Squash<\/h3>\n<p><\/p>\n<ul>\n<li> Essensen: <b>debuge processer direkt i klustret<\/b>.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/solo-io\/squash\">GitHub<\/a><\/noindex>.<\/li>\n<li> Kort statistik GH: 1154 stj\u00e4rnor, 279 commits, 23 bidra.<\/li>\n<li> Spr\u00e5k: Go.<\/li>\n<li> Licens: Apache License 2.0.<\/li>\n<\/ul>\n<p>\nDetta verktyg \u00e4r avsett f\u00f6r att debugga processer direkt i pod&#8217;ar. Verktyget \u00e4r enkelt och l\u00e5ter dig i interaktivt l\u00e4ge v\u00e4lja den debugger du beh\u00f6ver. <i>(se nedan)<\/i> och namespace + pod, i den process som beh\u00f6ver ingripas i. F\u00f6r n\u00e4rvarande st\u00f6ds:<\/p>\n<ul>\n<li> delve \u2014 f\u00f6r Go-appar;<\/li>\n<li> GDB \u2014 via target remote + port forwarding;<\/li>\n<li> port forwarding JDWP f\u00f6r att debugga Java-appar.<\/li>\n<\/ul>\n<p>\nFr\u00e5n IDE-sidan finns det st\u00f6d endast i VScode (med hj\u00e4lp av <noindex><a rel=\"nofollow\" href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=ilevine.squash\">till\u00e4gget<\/a><\/noindex>), men det finns planer f\u00f6r det aktuella (2019) \u00e5ret f\u00f6r Eclipse och Intellij.<\/p>\n<p>F\u00f6r att debugga processer startar Squash en privilegierad container p\u00e5 klusternoderna, s\u00e5 det \u00e4r n\u00f6dv\u00e4ndigt att f\u00f6rst bekanta sig med m\u00f6jligheterna <noindex><a rel=\"nofollow\" href=\"https:\/\/squash.solo.io\/secure_mode\/\">s\u00e4kert l\u00e4ge<\/a><\/noindex> f\u00f6r att undvika s\u00e4kerhetsproblem.<\/p>\n<h2>Komplexa l\u00f6sningar<\/h2>\n<p>\nVi g\u00e5r vidare till den tunga artilleriet \u2013 mer \u201dskala\u201d-projekt som syftar till att omedelbart t\u00e4cka m\u00e5nga utvecklares behov.<\/p>\n<p><i><b>NB<\/b>: I denna lista finns det utan tvekan plats f\u00f6r v\u00e5r Open Source-nytta <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/333682\/\"><b>werf<\/b><\/a><\/noindex> (tidigare k\u00e4nd som dapp). Vi har dock redan skrivit och ber\u00e4ttat om den flera g\u00e5nger, s\u00e5 vi har beslutat att inte inkludera den i \u00f6versikten. F\u00f6r dem som vill bekanta sig n\u00e4rmare med dess m\u00f6jligheter rekommenderar vi att l\u00e4sa\/lyssna p\u00e5 f\u00f6redraget \u201c<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/460351\/\">werf \u2014 v\u00e5rt verktyg f\u00f6r CI\/CD i Kubernetes<\/a><\/noindex>\u00bb.<\/i><\/p>\n<h3>DevSpace<\/h3>\n<p><\/p>\n<ul>\n<li> Essensen: <b>f\u00f6r dem som vill b\u00f6rja arbeta i Kubernetes men inte vill g\u00e5 djupt in i dess f\u00e4llor<\/b>.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/devspace-cloud\/devspace\">GitHub<\/a><\/noindex>.<\/li>\n<li> Kort statistik GH: 630 stj\u00e4rnor, 1912 commits, 13 bidra.<\/li>\n<li> Spr\u00e5k: Go.<\/li>\n<li> Licens: Apache License 2.0.<\/li>\n<\/ul>\n<p>\nL\u00f6sning av det namngivna f\u00f6retaget som tillhandah\u00e5ller managed-kluster med Kubernetes f\u00f6r teamutveckling. Verktyget skapades f\u00f6r kommersiella kluster, men fungerar ocks\u00e5 utm\u00e4rkt med andra.<\/p>\n<p>N\u00e4r kommandot <code>devspace init<\/code> i katalogen med projektet k\u00f6rs kommer du att erbjudas (i interaktivt l\u00e4ge):<\/p>\n<ul>\n<li> v\u00e4lja en arbets Kubernetes-kluster,<\/li>\n<li> anv\u00e4nda en befintlig <code>Dockerfile<\/code> (eller generera en ny) f\u00f6r att skapa en container baserat p\u00e5 den,<\/li>\n<li> v\u00e4lja ett repository f\u00f6r att lagra containerbilder och s\u00e5 vidare.<\/li>\n<\/ul>\n<p>\nEfter alla dessa f\u00f6rberedande \u00e5tg\u00e4rder kan man b\u00f6rja utvecklingen genom att k\u00f6ra kommandot <code>devspace dev<\/code>. Det kommer att samla containern, ladda upp den till f\u00f6rvaret, lansera deployment i klustret och starta portvidarebefordran och synkronisera containern med den lokala katalogen.<\/p>\n<p>Det kommer att erbjudas att g\u00e5 in i containern via terminalen, vilket rekommenderas, eftersom containern faktiskt startar med kommandot sleep, och f\u00f6r verklig testning kr\u00e4vs att applikationen startas manuellt.<\/p>\n<p>Till slut kommer kommandot <code>devspace deploy<\/code> att lansera applikationen och dess relaterade infrastruktur i klustret, efter vilket allt b\u00f6rjar fungera i produktionsl\u00e4ge.<\/p>\n<p>All projektkonfiguration lagras i filen <code>devspace.yaml<\/code>. F\u00f6rutom utvecklingsmilj\u00f6inst\u00e4llningar kan man ocks\u00e5 hitta en beskrivning av infrastrukturen h\u00e4r, liknande standardmanifesten fr\u00e5n Kubernetes, men kraftigt f\u00f6renklade.<\/p>\n<p><img decoding=\"async\" alt=\"Verktyg f\u00f6r utvecklare av applikationer som k\u00f6rs i Kubernetes\" src=\"\/wp-content\/uploads\/2019\/08\/7abbba3806facfb69ba4e3f9e0f18938.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Arkitektur och huvudsteg med DevSpace<\/i><\/p>\n<p>Dessutom \u00e4r det enkelt att l\u00e4gga till en f\u00f6rdefinierad komponent i projektet (till exempel databashanteraren MySQL) eller Helm-chart. L\u00e4s mer i <noindex><a rel=\"nofollow\" href=\"https:\/\/devspace.cloud\/docs\/\">dokumentationen<\/a><\/noindex> \u2014 den \u00e4r inte komplicerad.<\/p>\n<h3>Skaffold<\/h3>\n<p><\/p>\n<ul>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/skaffold.dev\/\">Webbplats<\/a><\/noindex>; <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/GoogleContainerTools\/skaffold\">GitHub<\/a><\/noindex>.<\/li>\n<li> Kort statistik fr\u00e5n GH: 7423 stj\u00e4rnor, 4173 commits, 136 bidragsgivare.<\/li>\n<li> Spr\u00e5k: Go.<\/li>\n<li> Licens: Apache License 2.0.<\/li>\n<\/ul>\n<p>\nDetta verktyg fr\u00e5n Google str\u00e4var efter att t\u00e4cka alla behov hos utvecklaren vars kod kommer att k\u00f6ras i en Kubernetes-kluster. Att b\u00f6rja anv\u00e4nda det \u00e4r inte s\u00e5 enkelt som med devspace&#8217;en: ingen interaktivitet, spr\u00e5kdetection och automatisk skapande. <code>Dockerfile<\/code> kommer du inte att bli erbjuden h\u00e4r.<\/p>\n<p>Men om detta inte skr\u00e4mmer dig \u2014 h\u00e4r \u00e4r vad Skaffold m\u00f6jligg\u00f6r:<\/p>\n<ul>\n<li> Att \u00f6vervaka \u00e4ndringar i k\u00e4llkoden.<\/li>\n<li> Synkronisera det med pod&#8217;ens container, om det inte kr\u00e4ver byggande.<\/li>\n<li> Bygga containrar med koden, om programmeringsspr\u00e5ket \u00e4r tolkat, eller kompilera artefakter och paketera dem i containrar.<\/li>\n<li> De resulterande bilderna kontrolleras automatiskt med hj\u00e4lp av <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/GoogleContainerTools\/container-structure-test\">container-structure-test<\/a><\/noindex>.<\/li>\n<li> Tagga och ladda upp bilder till Docker Registry.<\/li>\n<li> Distribuera applikationen i klustret med hj\u00e4lp av kubectl, Helm eller kustomize.<\/li>\n<li> G\u00f6ra portvidarebefordran.<\/li>\n<li> Fels\u00f6ka applikationer skrivna i Java, Node.js, Python.<\/li>\n<\/ul>\n<p>\nArbetsfl\u00f6det i olika variationer beskrivs deklarativt i filen <code>skaffold.yaml<\/code>. F\u00f6r projektet kan man \u00e4ven definiera flera profiler d\u00e4r man delvis eller helt \u00e4ndrar bygg- och deploy-stegen. Till exempel kan man f\u00f6r utveckling ange en grundbild som \u00e4r bekv\u00e4m f\u00f6r utvecklaren, och f\u00f6r staging och produktion \u2013 en minimal (+ anv\u00e4nda <code>securityContext<\/code> eller \u00e5sidos\u00e4tta klustret d\u00e4r applikationen kommer att drifts\u00e4ttas).<\/p>\n<p>Byggning av Docker-containrar kan utf\u00f6ras lokalt eller p\u00e5 distans: i <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/cloud-build\/\">Google Cloud Build<\/a><\/noindex> eller i klustret med hj\u00e4lp av <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/GoogleContainerTools\/kaniko\">Kaniko<\/a><\/noindex>. Dessutom st\u00f6ds Bazel och Jib Maven\/Gradle. F\u00f6r taggning st\u00f6der Skaffold m\u00e5nga strategier: utifr\u00e5n git commit hash, datum\/tid, sha256-summa av k\u00e4llkoden osv.<\/p>\n<p>Det \u00e4r ocks\u00e5 v\u00e4rt att n\u00e4mna m\u00f6jligheten att testa containrar. Det redan n\u00e4mnda ramverket container-structure-test erbjuder f\u00f6ljande metoder f\u00f6r kontroll:<\/p>\n<ul>\n<li> Utf\u00f6ra kommandon i containerns kontext med sp\u00e5rning av exit-statusar och kontroll av den textuella 'utg\u00e5ngen' av kommandot.<\/li>\n<li> Kontroll av filernas existens i containern och \u00f6verensst\u00e4mmelse av attribut mot angivna.<\/li>\n<li> Kontroll av filinneh\u00e5ll enligt regulj\u00e4ra uttryck.<\/li>\n<li> J\u00e4mf\u00f6relse av imagenas metadata (<code>ENV<\/code>, <code>ENTRYPOINT<\/code>, <code>VOLUMES<\/code> och liknande).<\/li>\n<li> Kontroll av licenskompatibilitet.<\/li>\n<\/ul>\n<p>\nFil synkronisering med containern genomf\u00f6rs p\u00e5 ett mindre optimalt s\u00e4tt: Skaffold skapar helt enkelt ett arkiv med k\u00e4llkoden, kopierar det och packar upp det i containern (tar m\u00e5ste vara installerat). D\u00e4rf\u00f6r, om din huvudsakliga uppgift \u00e4r kodsynkronisering, \u00e4r det b\u00e4ttre att titta \u00e5t ett specialiserat verktyg (ksync).<\/p>\n<p><img decoding=\"async\" alt=\"Verktyg f\u00f6r utvecklare av applikationer som k\u00f6rs i Kubernetes\" src=\"\/wp-content\/uploads\/2019\/08\/a53647e9d3bf002c292dcae7a774e561.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Huvudstegen i Skaffold<\/i><\/p>\n<p>I allm\u00e4nhet till\u00e5ter verktyget inte att man abstraherar fr\u00e5n Kubernetes-manifest och har ingen interaktivitet, s\u00e5 det kan verka sv\u00e5rt att l\u00e4ra sig. Men just detta \u00e4r ocks\u00e5 dess f\u00f6rdel \u2013 stor frihet i handlandet.<\/p>\n<h3>Garden<\/h3>\n<p><\/p>\n<ul>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/garden.io\/\">Webbplats<\/a><\/noindex>; <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/garden-io\/garden\">GitHub<\/a><\/noindex>.<\/li>\n<li> Kort statistik p\u00e5 GH: 1063 stj\u00e4rnor, 1927 commits, 17 bidragsgivare.<\/li>\n<li> Spr\u00e5k: TypeScript <i>(det planeras att dela projektet i flera komponenter, varav vissa kommer vara p\u00e5 Go, samt att skapa SDK f\u00f6r till\u00e4gg p\u00e5 TypeScript\/JavaScript och Go)<\/i>.<\/li>\n<li> Licens: Apache License 2.0.<\/li>\n<\/ul>\n<p>\nPrecis som Skaffold syftar Garden till att automatisera processerna f\u00f6r kodleverans av applikationen till K8s-klustret. F\u00f6r detta m\u00e5ste man f\u00f6rst beskriva projektstrukturen i en YAML-fil och sedan k\u00f6ra kommandot <code>garden dev<\/code>. Det kommer att utf\u00f6ra all magi:<\/p>\n<ul>\n<li> Samla containrar med olika delar av projektet.<\/li>\n<li> Genomf\u00f6ra integrations- och enhetstester, om s\u00e5dana har beskrivits.<\/li>\n<li> Det kommer att rulla ut alla projektkomponenter till klustret.<\/li>\n<li> Vid \u00e4ndring av k\u00e4llkoden kommer hela pipelinen att startas om.<\/li>\n<\/ul>\n<p>\nFokus vid anv\u00e4ndning av detta verktyg ligger p\u00e5 gemensamt bruk av det fj\u00e4rrstyrda klustret av utvecklarteamet. Om vissa bygg- och teststeg redan har genomf\u00f6rts kommer detta avsev\u00e4rt att snabba upp hela processen, eftersom Garden kan anv\u00e4nda cachelagrade resultat.<\/p>\n<p>Projektmodulen kan vara en container, en Maven-container, ett Helm-diagram, ett manifest f\u00f6r <code>kubectl apply<\/code> eller till och med en OpenFaaS-funktion. Dessutom kan vilken modul som helst h\u00e4mtas fr\u00e5n ett fj\u00e4rr-Git-repo. Modulen kan definiera (eller inte) tj\u00e4nster, uppgifter och tester. Tj\u00e4nster och uppgifter kan ha beroenden, vilket g\u00f6r att man kan definiera i vilken ordning olika tj\u00e4nster ska distribueras och ordna startordningen f\u00f6r uppgifter och tester.<\/p>\n<p>Garden erbjuder anv\u00e4ndaren en vacker dashboard (fortfarande i <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/garden-io\/garden\/tree\/master\/dashboard\">experimentellt tillst\u00e5nd<\/a><\/noindex>), d\u00e4r projektgrafen visas: komponenter, byggsekvens, utf\u00f6rande av uppgifter och tester, deras relationer och beroenden. Direkt i webbl\u00e4saren kan man se loggar f\u00f6r alla projektkomponenter, kontrollera vad varje komponent returnerar via HTTP (om en ingress-resurs \u00e4r deklarerad f\u00f6r den, f\u00f6rst\u00e5s).<\/p>\n<p><img decoding=\"async\" alt=\"Verktyg f\u00f6r utvecklare av applikationer som k\u00f6rs i Kubernetes\" src=\"\/wp-content\/uploads\/2019\/08\/931b48a306fcce025e4dd8aa51d01552.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Panel f\u00f6r Garden<\/i><\/p>\n<p>Detta verktyg har ocks\u00e5 ett hot-reload-l\u00e4ge, som helt enkelt synkroniserar \u00e4ndringar i skripten med containern i klustret, vilket avsev\u00e4rt p\u00e5skyndar felavk\u00e4nning av applikationen. Garden har en bra <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.garden.io\/\">dokumentation<\/a><\/noindex> och inte d\u00e5lig <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/garden-io\/garden\/tree\/master\/examples\">upps\u00e4ttning exempel<\/a><\/noindex>, som g\u00f6r att man snabbt kan s\u00e4tta sig in i det och b\u00f6rja anv\u00e4nda det. F\u00f6rresten, nyligen publicerade vi <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/459586\/\">\u00f6vers\u00e4ttningen av artikeln<\/a><\/noindex> fr\u00e5n dess f\u00f6rfattare.<\/p>\n<h2>Slutsats<\/h2>\n<p>\nSj\u00e4lvklart begr\u00e4nsar denna lista inte verktygen f\u00f6r utveckling och fels\u00f6kning av applikationer i Kubernetes. Det finns fortfarande m\u00e5nga mycket anv\u00e4ndbara och praktiska verktyg som f\u00f6rtj\u00e4nar, om inte en separat artikel, s\u00e5 \u00e5tminstone ett omn\u00e4mnande. Ber\u00e4tta vad du anv\u00e4nder, vilka problem du har st\u00f6tt p\u00e5 och hur du har l\u00f6st dem!<\/p>\n<h2>P.S.<\/h2>\n<p>\nL\u00e4s \u00e4ven i v\u00e5r blogg:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/460351\/\">werf \u2014 v\u00e5rt verktyg f\u00f6r CI\/CD i Kubernetes (\u00f6versikt och videof\u00f6rel\u00e4sning)<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/459586\/\">Garden v0.10.0: Din b\u00e4rbara dator beh\u00f6ver inte Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/446788\/\">Kubernetes tips &amp; tricks: om lokal utveckling och Telepresence<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/436112\/\">Pluginen kubectl-debug f\u00f6r debugga i Kubernetes-pod&#8217;ar.<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>K\u00e4lla: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/462707\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u0440\u0435\u0448\u0430\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043d\u0430\u0441\u0443\u0449\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0431\u0438\u0437\u043d\u0435\u0441\u0430. \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0438 \u043e\u0440\u043a\u0435\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043b\u0435\u0433\u043a\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u043b\u044e\u0431\u043e\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u0443\u043f\u0440\u043e\u0449\u0430\u044e\u0442 \u0440\u0435\u043b\u0438\u0437\u044b \u043d\u043e\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439, \u0434\u0435\u043b\u0430\u044e\u0442 \u0438\u0445 \u0431\u043e\u043b\u0435\u0435 \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u043c\u0438, \u043d\u043e \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0442\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432. \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430, \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0437\u0430\u0431\u043e\u0442\u0438\u0442 \u0435\u0433\u043e \u043a\u043e\u0434: \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430, \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u044d\u043b\u0435\u0433\u0430\u043d\u0442\u043d\u043e\u0441\u0442\u044c, \u2014 \u0430 \u043d\u0435 \u0442\u043e, \u043a\u0430\u043a \u043e\u043d \u043f\u043e\u0435\u0434\u0435\u0442 \u0432 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":28120,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-37475","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/instrumenty-dlya-razrabotchikov-prilozhenij-zapuskaemyh-v-kubernetes\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u044b\u0445 \u0432 Kubernetes | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/instrumenty-dlya-razrabotchikov-prilozhenij-zapuskaemyh-v-kubernetes\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:17:51+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:17:51+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47 Verktyg f\u00f6r applikationsutvecklare som k\u00f6rs i Kubernetes | ProHoster","description":"Den moderna ansatsen till.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/instrumenty-dlya-razrabotchikov-prilozhenij-zapuskaemyh-v-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u044b\u0445 \u0432 Kubernetes | ProHoster","og:description":"\u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a.","og:url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/instrumenty-dlya-razrabotchikov-prilozhenij-zapuskaemyh-v-kubernetes","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:17:51+00:00","article:modified_time":"2019-10-31T19:17:51+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"37475","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 18:00:22","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:26:27","updated":"2026-01-23 18:00:22","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/37475","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=37475"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/37475\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/28120"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=37475"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=37475"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=37475"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}