{"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\/nl\/blog\/administrirovanie\/instrumenty-dlya-razrabotchikov-prilozhenij-zapuskaemyh-v-kubernetes","title":{"rendered":"Tools voor ontwikkelaars van applicaties die in Kubernetes draaien","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Tools voor ontwikkelaars van applicaties die in Kubernetes draaien\" src=\"\/wp-content\/uploads\/2019\/08\/ad1f46a3562dcefacaa1722ee1ce3387.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEen moderne aanpak van exploitatie lost veel dringende zakelijke problemen op. Containers en orkestratoren maken het gemakkelijk om projecten van elke complexiteit op te schalen, vereenvoudigen de release van nieuwe versies en maken deze betrouwbaarder, maar cre\u00ebren tegelijkertijd ook extra problemen voor ontwikkelaars. Een programmeur maakt zich in de eerste plaats zorgen over zijn code: architectuur, kwaliteit, prestaties, elegantie - en niet hoe het in Kubernetes draait en hoe het getest en gedebugd moet worden na zelfs de kleinste wijzigingen. Daarom is het volkomen logisch dat er steeds meer tools voor Kubernetes worden ontwikkeld die helpen de problemen van zelfs de meest \"archa\u00efsche\" ontwikkelaars op te lossen, zodat zij zich op het belangrijkste kunnen concentreren.<\/p>\n<p>In deze review vind je beknopte informatie over enkele tools die het leven van programmeurs eenvoudiger maken, wiens code draait in de pods van een Kubernetes-cluster.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Eenvoudige helpers<\/h2>\n<p><\/p>\n<h3>Kubectl-debug<\/h3>\n<p><\/p>\n<ul>\n<li> Essentie: <b>voeg je container toe aan de Pod en kijk wat erin gebeurt<\/b>.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/aylei\/kubectl-debug\">GitHub<\/a><\/noindex>.<\/li>\n<li> Korte statistieken GH: 715 sterren, 54 commits, 9 bijdragers.<\/li>\n<li> Programmeertaal: Go.<\/li>\n<li> Licentie: Apache License 2.0.<\/li>\n<\/ul>\n<p>\nMet deze kubectl-plug-in kun je een extra container aanmaken binnen de gewenste pod, die de procesnamespace deelt met de andere containers. Hiermee kun je de werking van de pod debuggen: netwerkinstellingen controleren, netverkeer monitoren, een strace van een specifiek proces maken, enzovoort.<\/p>\n<p>Je kunt ook overschakelen naar de procescontainer met <code>chroot \/proc\/PID\/root<\/code> \u2014 dit is erg handig als je een root shell in de container nodig hebt, waarvoor in het manifest is ingesteld <code>securityContext.runAs<\/code>.<\/p>\n<p>De tool is eenvoudig en effectief, zodat elk ontwikkelaar het kan gebruiken. Meer hierover hebben we geschreven in <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/436112\/\">een apart artikel<\/a><\/noindex>.<\/p>\n<h3>Telepresence<\/h3>\n<p><\/p>\n<ul>\n<li> Essentie: <b>verplaats de applicatie naar je computer. Ontwikkel en debug lokaal<\/b>.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/www.telepresence.io\/\">Website<\/a><\/noindex>; <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/telepresenceio\/telepresence\">GitHub<\/a><\/noindex>.<\/li>\n<li> Korte statistieken GH: 2131 sterren, 2712 commits, 33 bijdragers.<\/li>\n<li> Programmeertaal: Python.<\/li>\n<li> Licentie: Apache License 2.0.<\/li>\n<\/ul>\n<p>\nHet idee van deze tool is om een container met de applicatie op de lokale gebruikerscomputer te starten en al het verkeer van de cluster naar deze container en terug te proxyen. Deze aanpak maakt lokaal ontwikkelen mogelijk, simpelweg door bestanden in je favoriete IDE te wijzigen: de resultaten zijn onmiddellijk beschikbaar.<\/p>\n<p>Voordelen van lokale uitvoering zijn het gemak van aanpassingen en directe resultaten, evenals de mogelijkheid om de applicatie op de gebruikelijke manier te debuggen. Nadelen zijn de vereisten aan snelheid van de verbinding, wat vooral merkbaar is wanneer je werkt met een applicatie met aanzienlijke RPS en verkeer. Bovendien heeft Telepresence problemen met volume-mounts in Windows, wat een beperkende factor kan zijn voor ontwikkelaars die aan dit OS gewend zijn.<\/p>\n<p>We hebben al onze ervaringen met Telepresence gedeeld. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/446788\/\">hier<\/a><\/noindex>.<\/p>\n<h3>Ksync<\/h3>\n<p><\/p>\n<ul>\n<li> Essentie: <b>bijna onmiddellijke synchronisatie van code met de container in het cluster.<\/b>.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/vapor-ware\/ksync\">GitHub<\/a><\/noindex>.<\/li>\n<li> Korte statistieken van GH: 555 sterren, 362 commits, 11 bijdragers.<\/li>\n<li> Programmeertaal: Go.<\/li>\n<li> Licentie: Apache License 2.0.<\/li>\n<\/ul>\n<p>\nDe tool maakt het mogelijk om de inhoud van een lokale directory te synchroniseren met de map van een container die in het cluster draait. Dit soort gereedschap is uitstekend geschikt voor ontwikkelaars van scriptingtalen, voor wie het grootste probleem is om code in een werkende container te krijgen. Ksync is ontworpen om deze hoofdpijn te verlichten.<\/p>\n<p>Bij een eenmalige initialisatie met het commando <code>ksync init<\/code> wordt er in het cluster een DaemonSet aangemaakt, dat gebruikt wordt om de status van het bestandssysteem van de geselecteerde container te volgen. Op zijn lokale computer voert de ontwikkelaar het commando uit <code>ksync watch<\/code>, dat de configuraties in de gaten houdt en <noindex><a rel=\"nofollow\" href=\"https:\/\/syncthing.net\/\">syncthing<\/a><\/noindex>, dat de directe synchronisatie van bestanden met het cluster uitvoert.<\/p>\n<p>Het blijft over om ksync instructies te geven over wat met wat gesynchroniseerd moet worden. Bijvoorbeeld, zo'n commando:<\/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 cre\u00ebert een watcher met de naam <code>myproject<\/code>, die zal zoeken naar een pod met het label <code>app=backend<\/code> en probeert de lokale directory <code>\/home\/user\/myproject\/<\/code> met de map <code>\/var\/www\/myproject\/<\/code> van de container met de naam <code>php<\/code>.<\/p>\n<p>Problemen en opmerkingen over ksync uit onze ervaring:<\/p>\n<ul>\n<li> Op de knooppunten van het Kubernetes-cluster moet <code>overlay2<\/code> worden gebruikt als opslagdriver voor Docker. Geen enkele andere tool zal werken.<\/li>\n<li> Bij het gebruik van Windows als client-OS kan het zijn dat de file watcher niet goed werkt. Deze bug is opgemerkt bij het werken met grote mappen \u2014 met veel geneste bestanden en directories. We hebben een oplossing gecre\u00eberd. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/syncthing\/syncthing\/issues\/5832\">vergelijkbaar issue<\/a><\/noindex> gemaakt in het syncthing-project, maar er is tot nu toe (sinds begin juli) geen voortgang geboekt.<\/li>\n<li> Gebruik het bestand <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.syncthing.net\/users\/ignoring.html\"><code>.stignore<\/code><\/a><\/noindex> om paden of bestandsjablonen aan te geven die niet gesynchroniseerd hoeven te worden (bijvoorbeeld mappen <code>app\/cache<\/code> en <code>.git<\/code>).<\/li>\n<li> Standaard zal ksync de container opnieuw opstarten bij elke wijziging van bestanden. Dit is handig voor Node.js, maar volkomen overbodig voor PHP. Het is beter om opcache uit te schakelen en de vlag <code>--reload=false<\/code>.<\/li>\n<li> De configuratie kan altijd worden aangepast in <code>$HOME\/.ksync\/ksync.yaml<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Squash<\/h3>\n<p><\/p>\n<ul>\n<li> Essentie: <b>debug je processen direct in de cluster<\/b>.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/solo-io\/squash\">GitHub<\/a><\/noindex>.<\/li>\n<li> Korte GH-statistieken: 1154 sterren, 279 commits, 23 bijdragers.<\/li>\n<li> Programmeertaal: Go.<\/li>\n<li> Licentie: Apache License 2.0.<\/li>\n<\/ul>\n<p>\nDit hulpmiddel is bedoeld voor het debuggen van processen rechtstreeks in pods. De tool is eenvoudig en stelt je, in interactieve modus, in staat om de benodigde debugger te selecteren. <i>(zie hieronder)<\/i> en namespace + pod waarin je wilt ingrijpen. Momenteel worden de volgende ondersteund:<\/p>\n<ul>\n<li> delve - voor Go-applicaties;<\/li>\n<li> GDB - via target remote + poortdoorverwijzing;<\/li>\n<li> poorten doorverwijzen voor JDWP voor het debuggen van Java-applicaties.<\/li>\n<\/ul>\n<p>\nVanuit de IDE is er ondersteuning alleen in VScode (met behulp van <noindex><a rel=\"nofollow\" href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=ilevine.squash\">de extensie<\/a><\/noindex>), maar voor het lopende (2019) jaar zijn Eclipse en Intellij in planning.<\/p>\n<p>Voor het debuggen van processen start Squash een geprivilegieerde container op de knooppunten van de cluster, dus het is noodzakelijk om eerst kennis te nemen van de mogelijkheden van <noindex><a rel=\"nofollow\" href=\"https:\/\/squash.solo.io\/secure_mode\/\">de veilige modus<\/a><\/noindex> om veiligheidsproblemen te voorkomen.<\/p>\n<h2>Geavanceerde oplossingen<\/h2>\n<p>\nWe gaan over op de zware artillerie - meer 'schalbare' projecten die zijn ontworpen om in \u00e9\u00e9n keer veel behoeften van ontwikkelaars te dekken.<\/p>\n<p><i><b>NB<\/b>: In deze lijst is er ongetwijfeld ook plaats voor onze Open Source-tool <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/333682\/\"><b>werf<\/b><\/a><\/noindex> (vroeger bekend als dapp). We hebben al vaak over haar geschreven en verteld, daarom hebben we besloten om deze niet in de review op te nemen. Voor diegenen die haar mogelijkheden beter willen leren kennen, raden we aan de presentatie '<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/460351\/\">werf - onze tool voor CI\/CD in Kubernetes<\/a><\/noindex>\u00bb.<\/i><\/p>\n<h3>DevSpace<\/h3>\n<p><\/p>\n<ul>\n<li> Essentie: <b>voor degenen die willen beginnen met werken in Kubernetes, maar niet diep wil graven in de details<\/b>.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/devspace-cloud\/devspace\">GitHub<\/a><\/noindex>.<\/li>\n<li> Korte GH-statistieken: 630 sterren, 1912 commits, 13 bijdragers.<\/li>\n<li> Programmeertaal: Go.<\/li>\n<li> Licentie: Apache License 2.0.<\/li>\n<\/ul>\n<p>\nOplossing van het gelijknamige bedrijf dat beheerde clusters met Kubernetes aanbiedt voor teamontwikkeling. Het hulpprogramma is gemaakt voor commerci\u00eble clusters, maar werkt ook uitstekend met andere.<\/p>\n<p>Bij het uitvoeren van het commando <code>devspace init<\/code> in de directory met het project wordt je gevraagd (in interactieve modus):<\/p>\n<ul>\n<li> je werk Kubernetes-cluster te kiezen,<\/li>\n<li> gebruik de bestaande <code>Dockerfile<\/code> (of genereer een nieuwe) om een container op te bouwen.<\/li>\n<li> selecteer de repository voor het opslaan van container images, enz.<\/li>\n<\/ul>\n<p>\nNa alle voorbereidende stappen kan de ontwikkeling beginnen door het uitvoeren van het commando <code>devspace dev<\/code>. Dit zal de container bouwen, deze naar de repository uploaden, de deployment naar het cluster uitrollen en de poortforwarding en synchronisatie van de container met de lokale map starten.<\/p>\n<p>Optioneel zal het aangeboden worden om via de terminal in de container te gaan. Dit zou je niet moeten vermijden, want in werkelijkheid start de container met het commando sleep, en voor echte tests moet de applicatie handmatig worden gestart.<\/p>\n<p>Ten slotte rolt het commando <code>devspace deploy<\/code> de applicatie en de daarbij behorende infrastructuur uit naar het cluster, waarna alles in de productie modus begint te functioneren.<\/p>\n<p>De hele projectconfiguratie wordt opgeslagen in het bestand <code>devspace.yaml<\/code>. Naast de omgevingsinstellingen voor ontwikkeling kan hierin ook een beschrijving van de infrastructuur worden gevonden, die lijkt op de standaard Kubernetes-manifesten, maar veel eenvoudiger is.<\/p>\n<p><img decoding=\"async\" alt=\"Tools voor ontwikkelaars van applicaties die in Kubernetes draaien\" src=\"\/wp-content\/uploads\/2019\/08\/7abbba3806facfb69ba4e3f9e0f18938.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>De architectuur en de belangrijkste stappen voor het werken met DevSpace<\/i><\/p>\n<p>Bovendien is het gemakkelijk om een vooraf gedefinieerd component (bijvoorbeeld een MySQL-database) of een Helm-chart aan het project toe te voegen. Meer hierover lees je in <noindex><a rel=\"nofollow\" href=\"https:\/\/devspace.cloud\/docs\/\">de documentatie<\/a><\/noindex> \u2014 het is niet moeilijk.<\/p>\n<h3>Skaffold<\/h3>\n<p><\/p>\n<ul>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/skaffold.dev\/\">Website<\/a><\/noindex>; <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/GoogleContainerTools\/skaffold\">GitHub<\/a><\/noindex>.<\/li>\n<li> Korte statistieken van GH: 7423 sterren, 4173 commits, 136 bijdragers.<\/li>\n<li> Programmeertaal: Go.<\/li>\n<li> Licentie: Apache License 2.0.<\/li>\n<\/ul>\n<p>\nDeze tool van Google beoogt alle behoeften van ontwikkelaars te dekken wiens code op een of andere manier in een Kubernetes-cluster zal draaien. Het is niet zo eenvoudig om ermee aan de slag te gaan als met devspace: er is geen interactie, taaldetectie of automatische creatie. <code>Dockerfile<\/code> hier wordt je niet aangeboden.<\/p>\n<p>Maar als dit je niet afschrikt, hier is wat Skaffold kan doen:<\/p>\n<ul>\n<li> Wijs veranderingen in de broncode aan.<\/li>\n<li> Synchroniseer het met de container van de pod, als er geen build nodig is.<\/li>\n<li> Bouw containers met de code, als de programmeertaal interpretatief is, of compileer artefacten en verpakt deze in containers.<\/li>\n<li> De resulterende beelden automatisch controleren met behulp van <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/GoogleContainerTools\/container-structure-test\">container-structure-test<\/a><\/noindex>.<\/li>\n<li> Label en upload beelden naar de Docker Registry.<\/li>\n<li> Rol de applicatie uit naar het cluster met behulp van kubectl, Helm of kustomize.<\/li>\n<li> Voer poortforwarding uit.<\/li>\n<li> Foutopsporing van applicaties geschreven in Java, Node.js, Python.<\/li>\n<\/ul>\n<p>\nWorkflow in verschillende variaties wordt declaratief beschreven in het bestand <code>skaffold.yaml<\/code>. Voor het project kunnen ook meerdere profielen worden gedefinieerd, waarin de build- en deploymentstappen gedeeltelijk of volledig kunnen worden veranderd. Bijvoorbeeld, voor ontwikkeling een handige basisafbeelding voor de ontwikkelaar opgeven, en voor staging en productie de minimumversie (+ gebruik <code>securityContext<\/code> in containers or redefine the cluster in which the application will be deployed).<\/p>\n<p>Docker container builds can take place 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 various strategies: by git commit hash, date\/time, sha256 checksum of the sources, etc.<\/p>\n<p>It is also worth mentioning 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 textual output.<\/li>\n<li> Checking for the presence of files in the container and their attributes against specified ones.<\/li>\n<li> Checking the contents of files using regular expressions.<\/li>\n<li> Comparing image metadata (<code>ENV<\/code>, <code>ENTRYPOINT<\/code>, <code>VOLUMES<\/code> etc.).<\/li>\n<li> Checking license compatibility.<\/li>\n<\/ul>\n<p>\nSynchronizing files with the container is done in a suboptimal 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's better to look towards specialized solutions (ksync).<\/p>\n<p><img decoding=\"async\" alt=\"Tools voor ontwikkelaars van applicaties die in Kubernetes draaien\" src=\"\/wp-content\/uploads\/2019\/08\/a53647e9d3bf002c292dcae7a774e561.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Main stages of Skaffold's operation<\/i><\/p>\n<p>Overall, the tool does not allow abstraction from Kubernetes manifests and lacks any interactivity, which may make it seem complex to learn. 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\/\">Website<\/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>(there are plans to split the project into several components, some of which will be in Go, and also create an SDK for building plugins in TypeScript\/JavaScript and Go)<\/i>.<\/li>\n<li> Licentie: Apache License 2.0.<\/li>\n<\/ul>\n<p>\nLike Skaffold, Garden aims to automate the processes 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 you run 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 they have been described.<\/li>\n<li> Deploy all components of the project to the cluster.<\/li>\n<li> In case of changes in the source code \u2014 it will restart the entire pipeline.<\/li>\n<\/ul>\n<p>\nDe focus bij het gebruik van dit hulpmiddel ligt op de samenwerking binnen een externe cluster door een team van ontwikkelaars. In dit geval, als bepaalde fasen van de bouw en testen al zijn uitgevoerd, versnelt dit het hele proces aanzienlijk, aangezien Garden gebruik kan maken van gecachte resultaten.<\/p>\n<p>Een module van het project kan een container, Maven-container, Helm-chart of manifest zijn voor <code>kubectl apply<\/code> of zelfs een OpenFaaS-functie. Elke module kan vanuit een externe Git-repository worden opgehaald. Een module kan (maar hoeft niet) services, taken en tests defini\u00ebren. Services en taken kunnen afhankelijkheden hebben, waardoor de volgorde van het deployen van een bepaalde service kan worden bepaald, evenals de volgorde van het uitvoeren van taken en tests.<\/p>\n<p>Garden biedt de gebruiker een mooi dashboard (momenteel in <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/garden-io\/garden\/tree\/master\/dashboard\">experimentale staat<\/a><\/noindex>), waar het projectdiagram wordt weergegeven: componenten, volgorde van bouwen, uitvoeren van taken en tests, hun verbindingen en afhankelijkheden. In de browser kunnen ook de logs van alle projectcomponenten worden bekeken en kan worden gecontroleerd wat elke component via HTTP uitlevert (tenzij er natuurlijk een ingress-resource voor is gedeclareerd).<\/p>\n<p><img decoding=\"async\" alt=\"Tools voor ontwikkelaars van applicaties die in Kubernetes draaien\" src=\"\/wp-content\/uploads\/2019\/08\/931b48a306fcce025e4dd8aa51d01552.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Het paneel voor Garden<\/i><\/p>\n<p>Dit hulpmiddel heeft ook een hot-reload-modus, die eenvoudig de wijzigingen in scripts synchroniseert met de container in de cluster, waardoor het debuggen van de applicatie aanzienlijk wordt versneld. Garden heeft een goed <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.garden.io\/\">documentatie<\/a><\/noindex> en redelijk <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/garden-io\/garden\/tree\/master\/examples\">voorbeeldpakket<\/a><\/noindex>, dat helpt om snel vertrouwd te raken en aan de slag te gaan. Trouwens, we hebben onlangs <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/459586\/\">een vertaling van een artikel<\/a><\/noindex> van de auteurs gepubliceerd.<\/p>\n<h2>Conclusie<\/h2>\n<p>\nNatuurlijk beperkt deze lijst met tools voor het ontwikkelen en debuggen van applicaties in Kubernetes zich niet. Er zijn nog veel andere zeer nuttige en praktische hulpmiddelen die het vermelden waard zijn, zelfs als ze niet in een apart artikel worden behandeld. Vertel ons met welke tools jij werkt, tegen welke problemen je bent aangelopen en hoe je deze hebt opgelost!<\/p>\n<h2>P.S.<\/h2>\n<p>\nLees ook op onze blog:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/460351\/\">werf \u2014 onze tool voor CI\/CD in Kubernetes (overzicht en video van de presentatie)<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/459586\/\">Garden v0.10.0: Je laptop heeft geen Kubernetes nodig<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/446788\/\">Kubernetes tips &amp; tricks: over lokaal ontwikkelen en Telepresence<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/436112\/\">De kubectl-debug plug-in voor debugging in Kubernetes-pods.<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Bron: <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\/nl\/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=\"nl_NL\" \/>\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\/nl\/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\udd47Tools voor ontwikkelaars van applicaties die in Kubernetes draaien | ProHoster","description":"Een moderne benadering van.","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/instrumenty-dlya-razrabotchikov-prilozhenij-zapuskaemyh-v-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","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\/nl\/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\/nl\/wp-json\/wp\/v2\/posts\/37475","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=37475"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/37475\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media\/28120"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=37475"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=37475"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=37475"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}