{"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\/it\/blog\/administrirovanie\/instrumenty-dlya-razrabotchikov-prilozhenij-zapuskaemyh-v-kubernetes","title":{"rendered":"Strumenti per sviluppatori di applicazioni eseguite in Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Strumenti per sviluppatori di applicazioni eseguite in Kubernetes\" src=\"\/wp-content\/uploads\/2019\/08\/ad1f46a3562dcefacaa1722ee1ce3387.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nL'approccio moderno all'operativit\u00e0 risolve molte problematiche urgenti per le aziende. I container e gli orchestratori consentono di scalare facilmente progetti di qualsiasi complessit\u00e0, semplificano i rilasci di nuove versioni rendendoli pi\u00f9 affidabili, ma allo stesso tempo creano anche problemi aggiuntivi per gli sviluppatori. Ci\u00f2 che preoccupa principalmente un programmatore \u00e8 il suo codice: architettura, qualit\u00e0, prestazioni, eleganza, e non come verr\u00e0 eseguito in Kubernetes e come sar\u00e0 testato e debugato dopo anche le pi\u00f9 piccole modifiche. Pertanto, \u00e8 naturale che si sviluppino strumenti per Kubernetes che aiutano a risolvere i problemi anche dei programmatori pi\u00f9 \u201carcaici\u201d, consentendo loro di concentrarsi sull'essenziale.<\/p>\n<p>In questa panoramica \u00e8 presentata una breve informazione su alcuni strumenti che semplificano la vita del programmatore il cui codice gira nei pod di un cluster Kubernetes.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Semplici assistenti<\/h2>\n<p><\/p>\n<h3>Kubectl-debug<\/h3>\n<p><\/p>\n<ul>\n<li> Nucleo: <b>aggiungi il tuo container al Pod e osserva cosa accade al suo interno<\/b>.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/aylei\/kubectl-debug\">GitHub<\/a><\/noindex>.<\/li>\n<li> Breve statistica su GH: 715 stelle, 54 commit, 9 collaboratori.<\/li>\n<li> Linguaggio: Go.<\/li>\n<li> Licenza: Apache License 2.0.<\/li>\n<\/ul>\n<p>\nQuesto plugin per kubectl consente di creare all'interno di un pod di interesse un contenitore aggiuntivo, che condivider\u00e0 lo spazio dei nomi dei processi con gli altri contenitori. In esso \u00e8 possibile eseguire il debug del funzionamento del pod: controllare la rete, ascoltare il traffico di rete, eseguire strace su un processo di interesse, ecc.<\/p>\n<p>Inoltre, \u00e8 possibile passare al container del processo eseguendo <code>chroot \/proc\/PID\/root<\/code> \u2014 questo \u00e8 molto utile quando \u00e8 necessario ottenere una shell root nel container per il quale nel manifesto \u00e8 stato impostato <code>securityContext.runAs<\/code>.<\/p>\n<p>Lo strumento \u00e8 semplice ed efficace, quindi pu\u00f2 essere utile a ogni sviluppatore. Abbiamo parlato di esso in <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/436112\/\">un articolo separato<\/a><\/noindex>.<\/p>\n<h3>Telepresence<\/h3>\n<p><\/p>\n<ul>\n<li> Nucleo: <b>trasferisci l'applicazione sul tuo computer. Sviluppa e fai il debug localmente<\/b>.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/www.telepresence.io\/\">Sito<\/a><\/noindex>; <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/telepresenceio\/telepresence\">GitHub<\/a><\/noindex>.<\/li>\n<li> Breve statistica su GH: 2131 stelle, 2712 commit, 33 collaboratori.<\/li>\n<li> Linguaggio: Python.<\/li>\n<li> Licenza: Apache License 2.0.<\/li>\n<\/ul>\n<p>\nL'idea di questo strumento \u00e8 quella di eseguire un container con l'applicazione sul computer utente locale e fare il proxy di tutto il traffico dal cluster a esso e viceversa. Questo approccio consente di sviluppare localmente, semplicemente modificando i file nel proprio IDE preferito: i risultati saranno immediatamente disponibili.<\/p>\n<p>I vantaggi dell'esecuzione locale sono la facilit\u00e0 di apportare modifiche e il risultato immediato, oltre alla possibilit\u00e0 di eseguire il debug dell'applicazione in modo familiare. Tra gli svantaggi, invece, c'\u00e8 l'esigenza di una connessione veloce, che si fa particolarmente sentire quando si lavora con applicazioni che hanno un RPS e un traffico piuttosto elevati. Inoltre, Telepresence presenta problemi con i volume mounts su Windows, il che pu\u00f2 diventare un limite decisivo per gli sviluppatori abituati a questo sistema operativo.<\/p>\n<p>Abbiamo gi\u00e0 condiviso la nostra esperienza con l'uso di Telepresence <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/446788\/\">qui<\/a><\/noindex>.<\/p>\n<h3>Ksync<\/h3>\n<p><\/p>\n<ul>\n<li> Nucleo: <b>sincronizzazione quasi istantanea del codice con il container nel cluster<\/b>.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/vapor-ware\/ksync\">GitHub<\/a><\/noindex>.<\/li>\n<li> Breve statistica di GH: 555 stelle, 362 commit, 11 contributori.<\/li>\n<li> Linguaggio: Go.<\/li>\n<li> Licenza: Apache License 2.0.<\/li>\n<\/ul>\n<p>\nLo strumento consente di sincronizzare il contenuto di una directory locale con una directory del container in esecuzione nel cluster. Questo strumento \u00e8 particolarmente utile per gli sviluppatori che lavorano con linguaggi di programmazione di scripting, la cui principale difficolt\u00e0 \u00e8 quella di portare il codice in un container attivo. Ksync \u00e8 progettato per alleviare questo problema.<\/p>\n<p>Con una sola inizializzazione del comando <code>ksync init<\/code> nel cluster viene creato un DaemonSet, utilizzato per monitorare lo stato del file system del container selezionato. Sul proprio computer locale, lo sviluppatore esegue il comando <code>ksync watch<\/code>, che monitora le configurazioni e avvia <noindex><a rel=\"nofollow\" href=\"https:\/\/syncthing.net\/\">syncthing<\/a><\/noindex>, che si occupa della sincronizzazione diretta dei file con il cluster.<\/p>\n<p>Rimane da istruire ksync su cosa e come sincronizzare. Ad esempio, un comando del genere:<\/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 creer\u00e0 un watcher con nome <code>myproject<\/code>, che cercher\u00e0 pod con etichetta <code>app=backend<\/code> e cercher\u00e0 di sincronizzare la directory locale <code>\/home\/user\/myproject\/<\/code> con la directory <code>\/var\/www\/myproject\/<\/code> del container di nome <code>php<\/code>.<\/p>\n<p>Problemi e note su ksync dalla nostra esperienza:<\/p>\n<ul>\n<li> Sui nodi del cluster Kubernetes deve essere utilizzato <code>overlay2<\/code> come storage driver per Docker. Non funzioner\u00e0 con nessun altro.<\/li>\n<li> Quando si utilizza Windows come sistema operativo client, potrebbe verificarsi un funzionamento errato del watcher del file system. Questo bug \u00e8 stato osservato durante l'uso di grandi directory \u2014 con un gran numero di file e cartelle annidate. Abbiamo creato <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/syncthing\/syncthing\/issues\/5832\">un issue corrispondente<\/a><\/noindex> nel progetto syncthing, ma non ci sono stati progressi finora (dall'inizio di luglio).<\/li>\n<li> Utilizzare il file <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.syncthing.net\/users\/ignoring.html\"><code>.stignore<\/code><\/a><\/noindex> per specificare i percorsi o i modelli di file che non devono essere sincronizzati (ad esempio, le directory <code>app\/cache<\/code> e <code>.git<\/code>).<\/li>\n<li> Per impostazione predefinita, ksync riavvier\u00e0 il contenitore a ogni modifica dei file. Questo \u00e8 comodo per Node.js, ma del tutto superfluo per PHP. \u00c8 meglio disattivare opcache e utilizzare il flag <code>--reload=false<\/code>.<\/li>\n<li> La configurazione pu\u00f2 sempre essere corretta in <code>$HOME\/.ksync\/ksync.yaml<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Squash<\/h3>\n<p><\/p>\n<ul>\n<li> Nucleo: <b>esegui il debug dei processi direttamente nel cluster<\/b>.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/solo-io\/squash\">GitHub<\/a><\/noindex>.<\/li>\n<li> Statistiche brevi di GH: 1154 stelle, 279 commit, 23 contributor.<\/li>\n<li> Linguaggio: Go.<\/li>\n<li> Licenza: Apache License 2.0.<\/li>\n<\/ul>\n<p>\nQuesto strumento \u00e8 destinato al debug dei processi direttamente nei pod. L'utilit\u00e0 \u00e8 semplice e in modalit\u00e0 interattiva consente di selezionare il debugger desiderato. <i>(vedi sotto)<\/i> e namespace + pod, nel processo del quale \u00e8 necessario intervenire. Attualmente sono supportati:<\/p>\n<ul>\n<li> delve - per le applicazioni in Go;<\/li>\n<li> GDB - tramite target remote + port forwarding;<\/li>\n<li> port forwarding JDWP per il debug delle applicazioni Java.<\/li>\n<\/ul>\n<p>\nDalla parte dell'IDE, il supporto esiste solo in VScode (con l'aiuto di <noindex><a rel=\"nofollow\" href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=ilevine.squash\">estensione<\/a><\/noindex>), tuttavia nei piani per l'anno corrente (2019) ci sono Eclipse e Intellij.<\/p>\n<p>Per il debug dei processi, Squash avvia un contenitore privilegiato sui nodi del cluster, quindi \u00e8 necessario prima familiarizzare con le capacit\u00e0 <noindex><a rel=\"nofollow\" href=\"https:\/\/squash.solo.io\/secure_mode\/\">di modalit\u00e0 sicura<\/a><\/noindex> per evitare problemi di sicurezza.<\/p>\n<h2>Soluzioni complesse<\/h2>\n<p>\nPassiamo all'artiglieria pesante: progetti pi\u00f9 \"scalabili\" che mirano a soddisfare subito molte delle esigenze degli sviluppatori.<\/p>\n<p><i><b>NB<\/b>: In questo elenco, certamente, c'\u00e8 posto anche per il nostro strumento Open Source <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/333682\/\"><b>werf<\/b><\/a><\/noindex> (precedentemente noto come dapp). Tuttavia, abbiamo gi\u00e0 scritto e parlato di essa molte volte, quindi abbiamo deciso di non includerla nella panoramica. Per chi desidera conoscerne meglio le funzionalit\u00e0, consigliamo di leggere\/ascoltare la relazione \"<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/460351\/\">werf \u2014 il nostro strumento per CI\/CD in Kubernetes<\/a><\/noindex>\u00bb.<\/i><\/p>\n<h3>DevSpace<\/h3>\n<p><\/p>\n<ul>\n<li> Nucleo: <b>per chi vuole iniziare a lavorare in Kubernetes, ma non vuole addentrarsi troppo nelle sue complessit\u00e0<\/b>.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/devspace-cloud\/devspace\">GitHub<\/a><\/noindex>.<\/li>\n<li> Statistiche brevi di GH: 630 stelle, 1912 commit, 13 contributor.<\/li>\n<li> Linguaggio: Go.<\/li>\n<li> Licenza: Apache License 2.0.<\/li>\n<\/ul>\n<p>\nSoluzione della societ\u00e0 omonima, che fornisce cluster gestiti con Kubernetes per lo sviluppo di team. L'utilit\u00e0 \u00e8 stata creata per cluster commerciali, ma funziona ottimamente anche con qualsiasi altro.<\/p>\n<p>Quando si esegue il comando <code>devspace init<\/code> nella directory del progetto, vi verr\u00e0 chiesto (in modalit\u00e0 interattiva):<\/p>\n<ul>\n<li> di scegliere un cluster Kubernetes attivo,<\/li>\n<li> di utilizzare quello esistente <code>Dockerfile<\/code> (o di generarne uno nuovo) per creare un contenitore basato su di esso,<\/li>\n<li> di scegliere un repository per memorizzare le immagini dei contenitori e cos\u00ec via.<\/li>\n<\/ul>\n<p>\nDopo tutte queste azioni di preparazione, puoi iniziare lo sviluppo eseguendo il comando <code>devspace dev<\/code>. Questo raccoglier\u00e0 il contenitore, lo caricher\u00e0 nel repository, effettuer\u00e0 il deployment nel cluster e avvier\u00e0 il forwarding delle porte e la sincronizzazione del contenitore con la directory locale.<\/p>\n<p>Facoltativamente verr\u00e0 proposto di accedere al contenitore tramite terminale. Non \u00e8 consigliabile rifiutare, poich\u00e9 in realt\u00e0 il contenitore si avvia con il comando sleep, e per il test reale \u00e8 necessario avviare manualmente l'applicazione.<\/p>\n<p>Infine, il comando <code>devspace deploy<\/code> effettua il deployment dell'applicazione e delle relative infrastrutture nel cluster, dopodich\u00e9 tutto inizia a funzionare in modalit\u00e0 operativa.<\/p>\n<p>Tutta la configurazione del progetto \u00e8 conservata nel file <code>devspace.yaml<\/code>. Oltre alle impostazioni dell'ambiente di sviluppo, in esso puoi trovare anche la descrizione dell'infrastruttura, simile ai manifest standard di Kubernetes, ma molto semplificata.<\/p>\n<p><img decoding=\"async\" alt=\"Strumenti per sviluppatori di applicazioni eseguite in Kubernetes\" src=\"\/wp-content\/uploads\/2019\/08\/7abbba3806facfb69ba4e3f9e0f18938.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Architettura e principali passaggi di lavoro con DevSpace<\/i><\/p>\n<p>Inoltre, \u00e8 facile aggiungere un componente predefinito al progetto (ad esempio, un DBMS MySQL) o un Helm chart. Leggi di pi\u00f9 in <noindex><a rel=\"nofollow\" href=\"https:\/\/devspace.cloud\/docs\/\">documentazione<\/a><\/noindex> \u2014 non \u00e8 complesso.<\/p>\n<h3>Skaffold<\/h3>\n<p><\/p>\n<ul>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/skaffold.dev\/\">Sito<\/a><\/noindex>; <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/GoogleContainerTools\/skaffold\">GitHub<\/a><\/noindex>.<\/li>\n<li> Statistiche brevi di GH: 7423 stelle, 4173 commit, 136 collaboratori.<\/li>\n<li> Linguaggio: Go.<\/li>\n<li> Licenza: Apache License 2.0.<\/li>\n<\/ul>\n<p>\nQuesta utilit\u00e0 di Google mira a coprire tutte le esigenze degli sviluppatori il cui codice verr\u00e0 comunque eseguito in un cluster Kubernetes. Iniziare a usarla non \u00e8 cos\u00ec semplice come con devspace: nessuna interattivit\u00e0, definizione della lingua e autogenerazione. <code>Dockerfile<\/code> non ti verr\u00e0 proposta.<\/p>\n<p>Tuttavia, se questo non ti spaventa, ecco cosa permette di fare Skaffold:<\/p>\n<ul>\n<li> Monitorare le modifiche al codice sorgente.<\/li>\n<li> Sincronizzarlo con il contenitore del pod, se non richiede compilazione.<\/li>\n<li> Compilare i contenitori con il codice, se il linguaggio di programmazione \u00e8 interpretato, oppure compilare gli artefatti e impacchettarli nei contenitori.<\/li>\n<li> Controllare automaticamente le immagini risultanti con <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/GoogleContainerTools\/container-structure-test\">container-structure-test<\/a><\/noindex>.<\/li>\n<li> Taggare e caricare le immagini nel Docker Registry.<\/li>\n<li> Distribuire l'applicazione nel cluster utilizzando kubectl, Helm o kustomize.<\/li>\n<li> Effettuare il forwarding delle porte.<\/li>\n<li> Debuggare applicazioni scritte in Java, Node.js, Python.<\/li>\n<\/ul>\n<p>\nIl workflow in varie varianti \u00e8 descritto in modo dichiarativo nel file <code>skaffold.yaml<\/code>. \u00c8 possibile anche definire diversi profili per il progetto, nei quali modificare parzialmente o completamente le fasi di costruzione e distribuzione. Ad esempio, per lo sviluppo \u00e8 possibile specificare un'immagine di base conveniente per gli sviluppatori, mentre per staging e produzione - la minimale (+ utilizzare <code>securityContext<\/code> per i container oppure ridefinire il cluster in cui l'applicazione verr\u00e0 distribuita).<\/p>\n<p>La costruzione dei container Docker pu\u00f2 avvenire localmente o da remoto: in <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/cloud-build\/\">Google Cloud Build<\/a><\/noindex> o nel cluster utilizzando <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/GoogleContainerTools\/kaniko\">Kaniko<\/a><\/noindex>. Sono supportati anche Bazel e Jib Maven\/Gradle. Per il tagging, Skaffold supporta numerose strategie: per hash del commit git, data\/ora, somma sha256 dei sorgenti, ecc.<\/p>\n<p>\u00c8 importante notare la possibilit\u00e0 di testare i container. Il framework gi\u00e0 menzionato container-structure-test offre i seguenti metodi di verifica:<\/p>\n<ul>\n<li> Esecuzione di comandi nel contesto del container con tracciamento degli stati di uscita e controllo dell'output testuale del comando.<\/li>\n<li> Verifica della presenza di file nel container e corrispondenza degli attributi a quelli specificati.<\/li>\n<li> Controllo del contenuto dei file attraverso espressioni regolari.<\/li>\n<li> Verifica dei metadati dell'immagine (<code>ENV<\/code>, <code>ENTRYPOINT<\/code>, <code>VOLUMES<\/code> ecc.).<\/li>\n<li> Verifica della compatibilit\u00e0 delle licenze.<\/li>\n<\/ul>\n<p>\nLa sincronizzazione dei file con il container non avviene nel modo pi\u00f9 ottimale: Skaffold crea semplicemente un archivio con i sorgenti, lo copia e lo estrae nel container (deve essere installato tar). Pertanto, se il tuo obiettivo principale \u00e8 la sincronizzazione del codice, \u00e8 meglio considerare una soluzione specializzata (ksync).<\/p>\n<p><img decoding=\"async\" alt=\"Strumenti per sviluppatori di applicazioni eseguite in Kubernetes\" src=\"\/wp-content\/uploads\/2019\/08\/a53647e9d3bf002c292dcae7a774e561.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Fasi principali del lavoro di Skaffold<\/i><\/p>\n<p>In generale, lo strumento non permette di astrarsi dai manifest Kubernetes e non ha alcuna interattivit\u00e0, quindi potrebbe sembrare complesso da apprendere. Ma \u00e8 proprio in questo che risiede il suo vantaggio: una maggiore libert\u00e0 di azione.<\/p>\n<h3>Garden<\/h3>\n<p><\/p>\n<ul>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/garden.io\/\">Sito<\/a><\/noindex>; <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/garden-io\/garden\">GitHub<\/a><\/noindex>.<\/li>\n<li> Statistiche brevi di GH: 1063 stelle, 1927 commit, 17 contributori.<\/li>\n<li> Lingua: TypeScript <i>(si prevede di suddividere il progetto in diversi componenti, alcuni dei quali saranno in Go, e realizzare un SDK per sviluppare estensioni in TypeScript\/JavaScript e Go)<\/i>.<\/li>\n<li> Licenza: Apache License 2.0.<\/li>\n<\/ul>\n<p>\nCome Skaffold, Garden \u00e8 mirato all'automazione dei processi di consegna del codice delle applicazioni nel cluster K8s. Per farlo, \u00e8 prima necessario descrivere la struttura del progetto in un file YAML, dopodich\u00e9 eseguire il comando <code>garden dev<\/code>. Questo eseguir\u00e0 tutta la magia:<\/p>\n<ul>\n<li> Compilare i container con le varie parti del progetto.<\/li>\n<li> Effettuare test di integrazione e unitari, se stati descritti.<\/li>\n<li> Estrapoler\u00e0 tutti i componenti del progetto nel cluster.<\/li>\n<li> In caso di modifica del codice sorgente, riavvier\u00e0 l'intero pipeline.<\/li>\n<\/ul>\n<p>\nQuesto strumento si concentra principalmente sulla condivisione di un cluster remoto da parte del team di sviluppo. In questo caso, se alcune fasi di costruzione e test sono gi\u00e0 state completate, ci\u00f2 accelera notevolmente l'intero processo, poich\u00e9 Garden potr\u00e0 utilizzare i risultati memorizzati nella cache.<\/p>\n<p>Un modulo del progetto pu\u00f2 essere un container, un container Maven, un chart Helm, un manifesto per <code>kubectl apply<\/code> o persino una funzione OpenFaaS. Inoltre, ciascuno di questi moduli pu\u00f2 essere estratto da un repository Git remoto. Un modulo pu\u00f2 definire (o meno) servizi, compiti e test. I servizi e i compiti possono avere dipendenze, permettendo di definire l'ordine di distribuzione di un certo servizio e di organizzare l\u2019esecuzione di compiti e test.<\/p>\n<p>Garden offre all'utente un bel dashboard (attualmente in <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/garden-io\/garden\/tree\/master\/dashboard\">fase sperimentale<\/a><\/noindex>), che mostra un grafico del progetto: componenti, sequenza di costruzione, esecuzione di compiti e test, le loro connessioni e dipendenze. \u00c8 possibile visualizzare direttamente nel browser anche i log di tutti i componenti del progetto e verificare cosa restituisce ciascun componente via HTTP (se ovviamente \u00e8 stato dichiarato una risorsa ingress per esso).<\/p>\n<p><img decoding=\"async\" alt=\"Strumenti per sviluppatori di applicazioni eseguite in Kubernetes\" src=\"\/wp-content\/uploads\/2019\/08\/931b48a306fcce025e4dd8aa51d01552.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Pannello di Garden<\/i><\/p>\n<p>Questo strumento ha anche una modalit\u00e0 di hot-reload, che sincronizza semplicemente le modifiche agli script con il container nel cluster, accelerando notevolmente il processo di debug dell'applicazione. Garden ha un buon <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.garden.io\/\">documentazione<\/a><\/noindex> e un discreto <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/garden-io\/garden\/tree\/master\/examples\">set di esempi<\/a><\/noindex>, che consentono di orientarsi rapidamente e di iniziare a utilizzare. Tra l'altro, di recente abbiamo pubblicato <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/459586\/\">la traduzione di un articolo<\/a><\/noindex> dei suoi autori.<\/p>\n<h2>Conclusione<\/h2>\n<p>\nNaturalmente, questo elenco non esaurisce gli strumenti per lo sviluppo e il debug delle applicazioni in Kubernetes. Ci sono molte altre utilit\u00e0 molto utili e pratiche, meritevoli di una menzione se non di un articolo a s\u00e9 stante. Raccontaci quali strumenti utilizzi, con quali problemi hai dovuto confrontarti e come li hai risolti!<\/p>\n<h2>P.S.<\/h2>\n<p>\nLeggi anche nel nostro blog:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/460351\/\">werf \u2014 il nostro strumento per CI\/CD in Kubernetes (panoramica e video della presentazione)<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/459586\/\">Garden v0.10.0: Il tuo laptop non ha bisogno di 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: sullo sviluppo locale e Telepresence<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/436112\/\">Il plugin kubectl-debug per il debug nei pod Kubernetes<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Fonte: <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.1.1 - 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\/it\/blog\/administrirovanie\/instrumenty-dlya-razrabotchikov-prilozhenij-zapuskaemyh-v-kubernetes\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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\/it\/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\udd47Strumenti per gli sviluppatori di applicazioni in esecuzione su Kubernetes | ProHoster","description":"Un approccio moderno a.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/instrumenty-dlya-razrabotchikov-prilozhenij-zapuskaemyh-v-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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\/it\/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\/it\/wp-json\/wp\/v2\/posts\/37475","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=37475"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/37475\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/28120"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=37475"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=37475"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=37475"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}