{"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\/da\/blog\/administrirovanie\/instrumenty-dlya-razrabotchikov-prilozhenij-zapuskaemyh-v-kubernetes","title":{"rendered":"V\u00e6rkt\u00f8jer til udviklere af applikationer, der k\u00f8res i Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"V\u00e6rkt\u00f8jer til udviklere af applikationer, der k\u00f8res i Kubernetes\" src=\"\/wp-content\/uploads\/2019\/08\/ad1f46a3562dcefacaa1722ee1ce3387.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nModerne tilgange til drift l\u00f8ser mange af virksomhedens presserende problemer. Containere og orkestratorer g\u00f8r det nemt at skalere projekter af enhver kompleksitet, forenkler udgivelser af nye versioner, g\u00f8r dem mere p\u00e5lidelige, men skaber samtidig ogs\u00e5 yderligere problemer for udviklere. Programm\u00f8rer fokuserer f\u00f8rst og fremmest p\u00e5 deres kode: arkitektur, kvalitet, ydeevne, elegance \u2014 og ikke p\u00e5, hvordan den skal k\u00f8res i Kubernetes, samt hvordan den skal testes og fejlrettes efter selv de mindste \u00e6ndringer. Det er derfor helt naturligt, at v\u00e6rkt\u00f8jer til Kubernetes, der hj\u00e6lper med at l\u00f8se problemer, selv for de mest 'arkaiske' udviklere, aktivt udvikles og giver dem mulighed for at fokusere p\u00e5 det v\u00e6sentlige.<\/p>\n<p>Denne oversigt indeholder kort information om nogle v\u00e6rkt\u00f8jer, der g\u00f8r livet nemmere for programm\u00f8rer, hvis kode k\u00f8rer i pod\u2019ere i Kubernetes-klyngen.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Enkle hj\u00e6lpere<\/h2>\n<p><\/p>\n<h3>Kubectl-debug<\/h3>\n<p><\/p>\n<ul>\n<li> Essens: <b>tilf\u00f8j din container til pod\u2019en og se, hvad der sker i den<\/b>.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/aylei\/kubectl-debug\">GitHub<\/a><\/noindex>.<\/li>\n<li> Kort statistik fra GH: 715 stjerner, 54 commits, 9 bidragsydere.<\/li>\n<li> Sprog: Go.<\/li>\n<li> Licens: Apache License 2.0.<\/li>\n<\/ul>\n<p>\nDenne kubectl-plugin giver mulighed for at oprette en ekstra container inde i den \u00f8nskede pod, som vil dele procesnavnerummet med de andre containere. I denne container kan man debugge pod'ens funktion: tjekke netv\u00e6rksdriften, overv\u00e5ge netv\u00e6rkstrafik, udf\u00f8re strace p\u00e5 den \u00f8nskede proces osv.<\/p>\n<p>Man kan ogs\u00e5 skifte til procescontaineren ved at udf\u00f8re <code>chroot \/proc\/PID\/root<\/code> \u2014 dette er s\u00e6rligt nyttigt, n\u00e5r man har brug for at f\u00e5 root shell i en container, hvor \"securityContext.runAs\" er angivet i manifestet. <code>V\u00e6rkt\u00f8jet er enkelt og effektivt, s\u00e5 det kan v\u00e6re nyttigt for enhver udvikler. L\u00e6s mere om det i<\/code>.<\/p>\n<p>en separat artikel <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/436112\/\">Telepresence<\/a><\/noindex>.<\/p>\n<h3>flyt applikationen til din computer. Udvikl og debug lokalt<\/h3>\n<p><\/p>\n<ul>\n<li> Essens: <b>Kort statistik fra GH: 2131 stjerne, 2712 commits, 33 bidragsydere.<\/b>.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/www.telepresence.io\/\">Webstedet<\/a><\/noindex>; <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/telepresenceio\/telepresence\">GitHub<\/a><\/noindex>.<\/li>\n<li> Sprog: Python.<\/li>\n<li> Ideen med dette v\u00e6rkt\u00f8j er at k\u00f8re en container med applikationen p\u00e5 den lokale brugercomputer og proxy al trafik fra klyngen til den og tilbage. Denne tilgang g\u00f8r det muligt at udvikle lokalt ved blot at \u00e6ndre filer i din yndlings-IDE: resultaterne vil v\u00e6re tilg\u00e6ngelige med det samme.<\/li>\n<li> Licens: Apache License 2.0.<\/li>\n<\/ul>\n<p>\nIdeen med dette v\u00e6rkt\u00f8j er at k\u00f8re en container med applikationen p\u00e5 den lokale brugercomputer og proxy al trafik fra klyngen til den og tilbage. Denne tilgang g\u00f8r det muligt at udvikle lokalt ved blot at \u00e6ndre filer i din yndlings-IDE: resultaterne vil v\u00e6re tilg\u00e6ngelige med det samme.<\/p>\n<p>Fordele ved lokal k\u00f8rsel \u2014 bekvemmeligheden ved redigeringer og \u00f8jeblikkelig feedback, muligheden for at debugge applikationen p\u00e5 den s\u00e6dvanlige m\u00e5de. Ulemperne inkluderer et krav til hastigheden af forbindelsen, som is\u00e6r er m\u00e6rkbart, n\u00e5r man arbejder med applikationer med en relativt h\u00f8j RPS og trafik. Desuden har Telepresence problemer med volume mounts i Windows, hvilket kan v\u00e6re en afg\u00f8rende begr\u00e6nsning for udviklere, der er vant til dette OS.<\/p>\n<p>Vi har allerede delt vores erfaring med at bruge Telepresence <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/446788\/\">her<\/a><\/noindex>.<\/p>\n<h3>Ksync<\/h3>\n<p><\/p>\n<ul>\n<li> Essens: <b>n\u00e6sten \u00f8jeblikkelig synkronisering af kode med containeren i klyngen<\/b>.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/vapor-ware\/ksync\">GitHub<\/a><\/noindex>.<\/li>\n<li> Kort statistik fra GH: 555 stjerner, 362 commits, 11 bidragsydere.<\/li>\n<li> Sprog: Go.<\/li>\n<li> Licens: Apache License 2.0.<\/li>\n<\/ul>\n<p>\nV\u00e6rkt\u00f8jet g\u00f8r det muligt at synkronisere indholdet af en lokal mappe med biblioteket i en container, der k\u00f8rer i klyngen. Et s\u00e5dant v\u00e6rkt\u00f8j er perfekt til udviklere, der arbejder med scriptsprog, hvor hovedproblemet er at f\u00e5 koden ind i den k\u00f8rende container. Ksync er designet til at fjerne denne hovedpine.<\/p>\n<p>Ved \u00e9n enkelt initialisering med kommandoen <code>ksync init<\/code> oprettes der en DaemonSet i klyngen, som bruges til at overv\u00e5ge tilstanden af filsystemet i den valgte container. P\u00e5 sin lokale computer k\u00f8rer udvikleren kommandoen <code>ksync watch<\/code>, som holder \u00f8je med konfigurationerne og starter <noindex><a rel=\"nofollow\" href=\"https:\/\/syncthing.net\/\">syncthing<\/a><\/noindex>, som udf\u00f8rer den direkte synkronisering af filer med klyngen.<\/p>\n<p>Det er nu n\u00f8dvendigt at instruere ksync om, hvad der skal synkroniseres med hvad. For eksempel kan en s\u00e5dan kommando bruges:<\/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 vil oprette en watcher med navnet <code>myproject<\/code>, som vil s\u00f8ge efter en pod med etiketten <code>app=backend<\/code> og fors\u00f8ge at synkronisere den lokale mappe <code>\/home\/user\/myproject\/<\/code> med biblioteket <code>\/var\/www\/myproject\/<\/code> i containeren med navnet <code>php<\/code>.<\/p>\n<p>Problemer og bem\u00e6rkninger om ksync baseret p\u00e5 vores erfaring:<\/p>\n<ul>\n<li> P\u00e5 Kubernetes-klynge noderne skal der anvendes <code>overlay2<\/code> som storage driver for Docker. Ingen andre v\u00e6rkt\u00f8jer vil fungere med det.<\/li>\n<li> N\u00e5r man bruger Windows som klient OS, kan der opst\u00e5 problemer med filsystemwatcheren. Denne fejl er observeret ved arbejde med store mapper \u2014 med mange underordnede filer og kataloger. Vi har skabt <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/syncthing\/syncthing\/issues\/5832\">en tilsvarende issue<\/a><\/noindex> i syncthing-projektet, men der er stadig ikke sket nogen fremskridt siden starten af juli.<\/li>\n<li> Brug filen <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.syncthing.net\/users\/ignoring.html\"><code>.stignore<\/code><\/a><\/noindex> for at angive stier eller filskabeloner, der ikke skal synkroniseres (for eksempel kataloger <code>app\/cache<\/code> og <code>.git<\/code>).<\/li>\n<li> Som standard genstarter ksync containeren ved hver \u00e6ndring af filer. For Node.js er det praktisk, men for PHP er det helt un\u00f8dvendigt. Det er bedre at deaktivere opcache og bruge flaget <code>--reload=false<\/code>.<\/li>\n<li> Konfigurationen kan altid rettes i <code>$HOME\/.ksync\/ksync.yaml<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Squash<\/h3>\n<p><\/p>\n<ul>\n<li> Essens: <b>debugge processer direkte i klyngen<\/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 stjerner, 279 commits, 23 bidragsydere.<\/li>\n<li> Sprog: Go.<\/li>\n<li> Licens: Apache License 2.0.<\/li>\n<\/ul>\n<p>\nDette v\u00e6rkt\u00f8j er designet til at debugge processer direkte i pods. V\u00e6rkt\u00f8jet er enkelt og lader en i interaktiv tilstand v\u00e6lge den \u00f8nskede debugger. <i>(se nedenfor)<\/i> og namespace + pod, hvor der skal intervenere. I \u00f8jeblikket underst\u00f8ttes:<\/p>\n<ul>\n<li> delve \u2014 til applikationer p\u00e5 Go;<\/li>\n<li> GDB \u2014 via target remote + port forwarding;<\/li>\n<li> port forwarding JDWP til debugging af Java-applikationer.<\/li>\n<\/ul>\n<p>\nFra IDE-siden er der kun support i VScode (ved hj\u00e6lp af <noindex><a rel=\"nofollow\" href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=ilevine.squash\">udvidelsen<\/a><\/noindex>), men der er planer for det nuv\u00e6rende (2019) \u00e5r for Eclipse og Intellij.<\/p>\n<p>Til debugging k\u00f8rer Squash en privilegeret container p\u00e5 cluster nodene, s\u00e5 det er n\u00f8dvendigt f\u00f8rst at g\u00f8re sig bekendt med mulighederne for <noindex><a rel=\"nofollow\" href=\"https:\/\/squash.solo.io\/secure_mode\/\">sikkerhedsmodus<\/a><\/noindex> for at undg\u00e5 sikkerhedsproblemer.<\/p>\n<h2>Komplekse l\u00f8sninger<\/h2>\n<p>\nLad os g\u00e5 videre til den tunge artilleri \u2014 mere 'skala' projekter, der skal d\u00e6kke mange behov for udviklere.<\/p>\n<p><i><b>NB<\/b>: I denne liste er der uden tvivl ogs\u00e5 plads til vores Open Source-v\u00e6rkt\u00f8j <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/333682\/\"><b>werf<\/b><\/a><\/noindex> (tidligere kendt som dapp). Men vi har allerede skrevet og talt om det mange gange, s\u00e5 vi har besluttet ikke at inkludere det i oversigten. For dem, der \u00f8nsker at l\u00e6re mere om dets muligheder, anbefaler vi at l\u00e6se\/lytte til rapporten '<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/460351\/\">werf \u2014 vores v\u00e6rkt\u00f8j til CI\/CD i Kubernetes<\/a><\/noindex>\u00bb.<\/i><\/p>\n<h3>DevSpace<\/h3>\n<p><\/p>\n<ul>\n<li> Essens: <b>for dem, der \u00f8nsker at begynde at arbejde med Kubernetes, men ikke vil dykke dybt ned i dets kompleksiteter<\/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 stjerner, 1912 commits, 13 bidragsydere.<\/li>\n<li> Sprog: Go.<\/li>\n<li> Licens: Apache License 2.0.<\/li>\n<\/ul>\n<p>\nL\u00f8sningen fra det samme selskab, der tilbyder managed-klynger med Kubernetes til teamwork. V\u00e6rkt\u00f8jet blev skabt til kommercielle klynger, men fungerer ogs\u00e5 fantastisk med andre.<\/p>\n<p>N\u00e5r du k\u00f8rer kommandoen <code>devspace init<\/code> i mappen med projektet vil du blive bedt om (i interaktiv tilstand):<\/p>\n<ul>\n<li> at v\u00e6lge en arbejds Kubernetes-klynge,<\/li>\n<li> at bruge en eksisterende <code>Dockerfile<\/code> (eller generere en ny) til at oprette en container p\u00e5 dens basis,<\/li>\n<li> at v\u00e6lge et repository til opbevaring af containerbilleder osv.<\/li>\n<\/ul>\n<p>\nEfter alle disse forberedende handlinger kan udviklingen begynde med at k\u00f8re kommandoen <code>devspace dev<\/code>. Den vil samle containeren, uploade den til depotet, implementere deployment i klyngen og starte port forwarding og synkronisering af containeren med det lokale bibliotek.<\/p>\n<p>Valgfrit vil du blive bedt om at g\u00e5 ind i containeren via terminalen. Det b\u00f8r ikke afvises, for i virkeligheden starter containeren med kommandoen sleep, og til reel testning skal applikationen startes manuelt.<\/p>\n<p>Endelig k\u00f8rer kommandoen <code>devspace deploy<\/code> applikationen og den tilknyttede infrastruktur i klyngen, hvorefter alt begynder at fungere i produktionsmilj\u00f8et.<\/p>\n<p>Al konfiguration af projektet opbevares i filen <code>devspace.yaml<\/code>. Udover indstillinger for udviklingsmilj\u00f8et kan man ogs\u00e5 finde en beskrivelse af infrastrukturen, der ligner standard Kubernetes-manifester, kun st\u00e6rkt forenklet.<\/p>\n<p><img decoding=\"async\" alt=\"V\u00e6rkt\u00f8jer til udviklere af applikationer, der k\u00f8res i Kubernetes\" src=\"\/wp-content\/uploads\/2019\/08\/7abbba3806facfb69ba4e3f9e0f18938.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Arkitektur og hovedtrin i arbejdet med DevSpace<\/i><\/p>\n<p>Desuden er det let at tilf\u00f8je en foruddefineret komponent (f.eks. DBMS MySQL) eller Helm-chart til projektet. L\u00e6s mere i <noindex><a rel=\"nofollow\" href=\"https:\/\/devspace.cloud\/docs\/\">dokumentationen<\/a><\/noindex> \u2014 den er ikke kompliceret.<\/p>\n<h3>Skaffold<\/h3>\n<p><\/p>\n<ul>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/skaffold.dev\/\">Webstedet<\/a><\/noindex>; <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/GoogleContainerTools\/skaffold\">GitHub<\/a><\/noindex>.<\/li>\n<li> Kort statistik fra GH: 7423 stjerner, 4173 commits, 136 bidragsydere.<\/li>\n<li> Sprog: Go.<\/li>\n<li> Licens: Apache License 2.0.<\/li>\n<\/ul>\n<p>\nDette v\u00e6rkt\u00f8j fra Google str\u00e6ber efter at d\u00e6kke alle behov for udviklere, hvis kode p\u00e5 en eller anden m\u00e5de vil blive k\u00f8rt i et Kubernetes-kluster. Det er ikke s\u00e5 let at bruge som devspace: ingen interaktivitet, sprogidentifikation og automatisk oprettelse. <code>Dockerfile<\/code> her vil du ikke blive tilbudt.<\/p>\n<p>N\u00e5r det er sagt, hvis det ikke skr\u00e6mmer dig \u2014 her er, hvad Skaffold g\u00f8r:<\/p>\n<ul>\n<li> Overv\u00e5ge \u00e6ndringer i kildekoden.<\/li>\n<li> Synkroniser den med pod-containeren, hvis den ikke kr\u00e6ver bygning.<\/li>\n<li> Bygge containere med koden, hvis programmeringssproget er fortolket, eller kompilere artefakter og pakke dem i containere.<\/li>\n<li> De resulterende billeder testes automatisk med hj\u00e6lp fra <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/GoogleContainerTools\/container-structure-test\">container-structure-test<\/a><\/noindex>.<\/li>\n<li> Tagge og uploade billeder til Docker Registry.<\/li>\n<li> Implementere applikationen i klyngen ved hj\u00e6lp af kubectl, Helm eller kustomize.<\/li>\n<li> Foretage port-forwarding.<\/li>\n<li> Fejls\u00f8ge applikationer skrevet i Java, Node.js, Python.<\/li>\n<\/ul>\n<p>\nWorkflow i forskellige variationer beskrives deklarativt i filen <code>skaffold.yaml<\/code>. For the project, you can also define several profiles, which can partially or completely alter the build and deployment stages. For example, for development, specify a base image that is convenient for the developer, while for staging and production \u2014 a minimal one (+ use <code>securityContext<\/code> for containers or override the cluster in which the application will be deployed).<\/p>\n<p>Building Docker containers can be done locally or remotely: in <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/cloud-build\/\">Google Cloud Build<\/a><\/noindex> or in the cluster using <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/GoogleContainerTools\/kaniko\">Kaniko<\/a><\/noindex>. Bazel and Jib Maven\/Gradle are also supported. For tagging, Skaffold supports multiple strategies: by git commit hash, date\/time, sha256 checksum of the sources, etc.<\/p>\n<p>It is also worth noting the ability to test containers. The previously mentioned framework container-structure-test offers the following verification methods:<\/p>\n<ul>\n<li> Executing commands in the context of the container while tracking exit statuses and checking the command's output.<\/li>\n<li> Checking the presence of files in the container and whether their attributes match specified ones.<\/li>\n<li> Controlling file content by regular expressions.<\/li>\n<li> Verifying image metadata (<code>ENV<\/code>, <code>ENTRYPOINT<\/code>, <code>VOLUMES<\/code> og lignende).<\/li>\n<li> Checking license compatibility.<\/li>\n<\/ul>\n<p>\nFile synchronization with the container is not performed in the most optimal way: Skaffold simply creates an archive with the sources, copies it, and unpacks it in the container (tar must be installed). Therefore, if your main task is code synchronization, it is better to look for a specialized solution (ksync).<\/p>\n<p><img decoding=\"async\" alt=\"V\u00e6rkt\u00f8jer til udviklere af applikationer, der k\u00f8res i Kubernetes\" src=\"\/wp-content\/uploads\/2019\/08\/a53647e9d3bf002c292dcae7a774e561.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Main stages of Skaffold work<\/i><\/p>\n<p>In general, the tool does not allow abstraction from Kubernetes manifests and lacks any interactivity, so it may seem complex to master. But this is also its advantage \u2014 greater freedom of action.<\/p>\n<h3>Garden<\/h3>\n<p><\/p>\n<ul>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/garden.io\/\">Webstedet<\/a><\/noindex>; <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/garden-io\/garden\">GitHub<\/a><\/noindex>.<\/li>\n<li> Brief GH statistics: 1063 stars, 1927 commits, 17 contributors.<\/li>\n<li> Language: TypeScript <i>(it is planned to split the project into several components, some of which will be in Go, and also create an SDK for building extensions in TypeScript\/JavaScript and Go)<\/i>.<\/li>\n<li> Licens: Apache License 2.0.<\/li>\n<\/ul>\n<p>\nLike Skaffold, Garden aims to automate the process of delivering application code to the K8s cluster. To do this, you first need to describe the project structure in a YAML file, after which launch the command <code>garden dev<\/code>. It will do all the magic:<\/p>\n<ul>\n<li> Build containers with various parts of the project.<\/li>\n<li> Run integration and unit tests, if such have been described.<\/li>\n<li> Deploy all project components to the cluster.<\/li>\n<li> Hvis den oprindelige kode \u00e6ndres, startes hele pipeline'en forfra.<\/li>\n<\/ul>\n<p>\nFokusset ved brug af dette v\u00e6rkt\u00f8j ligger p\u00e5 samarbejdet omkring en fjernklynge af udviklerteamet. I dette tilf\u00e6lde, hvis nogle faser af bygning og test allerede er udf\u00f8rt, vil det betydeligt fremskynde hele processen, da Garden kan bruge cachelagrede resultater.<\/p>\n<p>Projektmodulet kan v\u00e6re en beholder, et Maven-beholder, et Helm-chart, en manifest for <code>kubectl apply<\/code> eller endda en OpenFaaS-funktion. Og enhver af modulerne kan hentes fra et eksternt Git-repositorium. Et modul kan definere (eller ikke definere) tjenester, opgaver og tests. Tjenester og opgaver kan have afh\u00e6ngigheder, hvilket g\u00f8r det muligt at definere r\u00e6kkef\u00f8lgen af deployment af en given tjeneste samt organisere udf\u00f8relsen af opgaver og tests.<\/p>\n<p>Garden giver brugeren et flot dashboard (stadig i <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/garden-io\/garden\/tree\/master\/dashboard\">eksperimentel tilstand<\/a><\/noindex>), hvor projektets grafik vises: komponenter, r\u00e6kkef\u00f8lge af bygning, udf\u00f8relse af opgaver og tests, deres relationer og afh\u00e6ngigheder. Direkte i browseren kan man ogs\u00e5 se loggene fra alle projektets komponenter og kontrollere, hvad en given komponent returnerer over HTTP (hvis der selvf\u00f8lgelig er erkl\u00e6ret en ingress-ressource til den).<\/p>\n<p><img decoding=\"async\" alt=\"V\u00e6rkt\u00f8jer til udviklere af applikationer, der k\u00f8res i Kubernetes\" src=\"\/wp-content\/uploads\/2019\/08\/931b48a306fcce025e4dd8aa51d01552.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Panelet for Garden<\/i><\/p>\n<p>Dette v\u00e6rkt\u00f8j tilbyder ogs\u00e5 en hot-reload-funktion, der blot synkroniserer \u00e6ndringer i scripts med beholderen i klyngen, hvilket markant fremskynder debuggingprocessen for applikationen. Garden har et godt <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.garden.io\/\">dokumentation<\/a><\/noindex> og et anst\u00e6ndigt <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/garden-io\/garden\/tree\/master\/examples\">udvalg af eksempler<\/a><\/noindex>, som g\u00f8r det muligt hurtigt at komme i gang og begynde at bruge det. Ved \u00f8vrigt har vi for nylig offentliggjort <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/459586\/\">overs\u00e6ttelsen af artiklen<\/a><\/noindex> fra dens forfattere.<\/p>\n<h2>Konklusion<\/h2>\n<p>\nSelvf\u00f8lgelig er denne liste over v\u00e6rkt\u00f8jer ikke udt\u00f8mmende for udvikling og debugging af applikationer i Kubernetes. Der findes mange andre nyttige og praktiske v\u00e6rkt\u00f8jer, der fortjener, hvis ikke en separat artikel, s\u00e5 i det mindste en omtale. Fort\u00e6l om hvad du bruger, hvilke problemer du har st\u00f8dt p\u00e5, og hvordan du har l\u00f8st dem!<\/p>\n<h2>P.S.<\/h2>\n<p>\nL\u00e6s ogs\u00e5 p\u00e5 vores blog:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/460351\/\">werf \u2014 vores v\u00e6rkt\u00f8j til CI\/CD i Kubernetes (oversigt og video af pr\u00e6sentationen)<\/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\u00e6rbare computer har ikke brug for 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 udvikling og Telepresence<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/436112\/\">Kubectl-debug-plugin til debugging i Kubernetes-pods<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Kilde: <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.3 - 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\/da\/blog\/administrirovanie\/instrumenty-dlya-razrabotchikov-prilozhenij-zapuskaemyh-v-kubernetes\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\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\/da\/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\udd47V\u00e6rkt\u00f8jer til udviklere af applikationer, der k\u00f8rer i Kubernetes | ProHoster","description":"Moderne tilgang til.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/instrumenty-dlya-razrabotchikov-prilozhenij-zapuskaemyh-v-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/37475","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=37475"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/37475\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/28120"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=37475"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=37475"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=37475"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}