{"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 in esecuzione su Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Strumenti per sviluppatori di applicazioni in esecuzione su Kubernetes\" src=\"\/wp-content\/uploads\/2019\/08\/ad1f46a3562dcefacaa1722ee1ce3387.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nUn approccio moderno alla gestione delle operazioni risolve molte delle questioni urgenti per le aziende. I container e gli orchestratori consentono una facile scalabilit\u00e0 di progetti di qualsiasi complessit\u00e0, semplificano il rilascio di nuove versioni e ne aumentano l'affidabilit\u00e0, ma allo stesso tempo creano ulteriori problemi per gli sviluppatori. L'attenzione di un programmatore \u00e8 prima di tutto rivolta al suo codice: architettura, qualit\u00e0, prestazioni, eleganza, piuttosto che a come verr\u00e0 eseguito in Kubernetes e come testarlo e debuggare anche le pi\u00f9 piccole modifiche. \u00c8 quindi del tutto naturale che ci sia una crescente evoluzione degli strumenti per Kubernetes, che aiutano a risolvere i problemi anche dei programmatori pi\u00f9 \"arcaici\" e consentono loro di concentrarsi sulle cose importanti.<\/p>\n<p>Questa panoramica offre una breve introduzione a alcuni strumenti che semplificano la vita ai programmatori il cui codice gira nei pod del cluster Kubernetes.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Strumenti utili<\/h2>\n<p><\/p>\n<h3>Kubectl-debug<\/h3>\n<p><\/p>\n<ul>\n<li> Essenza: <b>aggiungi il tuo container al Pod e osserva cosa succede al suo interno<\/b>.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/aylei\/kubectl-debug\">GitHub<\/a><\/noindex>.<\/li>\n<li> Statistiche brevi di 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>\n\u042d\u0442\u043e\u0442 \u043f\u043b\u0430\u0433\u0438\u043d \u0434\u043b\u044f kubectl \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0435\u0433\u043e pod&#8217;a \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u043b\u0438\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438\u043c\u0435\u043d \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0441 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u043c\u0438. \u0412 \u043d\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u043e\u0442\u043b\u0430\u0434\u043a\u0443 \u0440\u0430\u0431\u043e\u0442\u044b pod&#8217;\u0430: \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441\u0435\u0442\u0438, \u043f\u043e\u0441\u043b\u0443\u0448\u0430\u0442\u044c \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0442\u0440\u0430\u0444\u0438\u043a, \u0441\u0434\u0435\u043b\u0430\u0442\u044c strace \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0438 \u0442.\u043f.<\/p>\n<p>Puoi anche passare al contenitore del processo eseguendo <code>chroot \/proc\/PID\/root<\/code> \u2014 questo \u00e8 molto utile quando \u00e8 necessario ottenere una shell root nel contenitore, per il quale nel manifesto \u00e8 impostato <code>securityContext.runAs<\/code>.<\/p>\n<p>Questo strumento \u00e8 semplice ed efficace, quindi pu\u00f2 risultare utile a ogni sviluppatore. Abbiamo scritto di pi\u00f9 su 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> Essenza: <b>trasferisci l'applicazione sul tuo computer. Sviluppa e fai debugging 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> Statistiche brevi di 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 avviare un contenitore con l'applicazione sul computer dell'utente locale e di proxyare tutto il traffico dal cluster a esso e viceversa. Questo approccio consente di sviluppare localmente, modificando semplicemente i file nella propria IDE preferita: i risultati saranno immediatamente disponibili.<\/p>\n<p>I vantaggi del lancio locale includono la facilit\u00e0 di modifica e risultati immediati, con la possibilit\u00e0 di debuggare l'applicazione nel modo consueto. Gli svantaggi riguardano le elevate richieste di velocit\u00e0 di connessione, particolarmente evidenti quando si lavora con applicazioni con un RPS e un traffico considerevoli. Inoltre, Telepresence presenta problemi con i mount dei volumi in Windows, che possono diventare un limite decisivo per gli sviluppatori abituati a questo sistema operativo.<\/p>\n<p>Abbiamo gi\u00e0 condiviso la nostra esperienza con l'utilizzo 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> Essenza: <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> Statistiche brevi 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>\nL'utilit\u00e0 consente di sincronizzare il contenuto di una directory locale con la cartella di un container in esecuzione nel cluster. Questo strumento \u00e8 ideale per gli sviluppatori di linguaggi di scripting, la cui principale preoccupazione \u00e8 trasferire il codice in un container funzionante. Ksync \u00e8 progettato per risolvere questo problema.<\/p>\n<p>Con un'inizializzazione singola tramite il comando <code>ksync init<\/code> Nel cluster viene creato un DaemonSet, utilizzato per monitorare lo stato del filesystem del contenitore selezionato. Sul proprio computer locale, lo sviluppatore esegue il comando <code>ksync watch<\/code>, che controlla le configurazioni e avvia <noindex><a rel=\"nofollow\" href=\"https:\/\/syncthing.net\/\">syncthing<\/a><\/noindex>, che esegue la sincronizzazione diretta dei file con il cluster.<\/p>\n<p>\u00c8 necessario istruire ksync su cosa sincronizzare e con cosa. 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 di nome <code>myproject<\/code>, che cercher\u00e0 un pod con l'etichetta <code>app=backend<\/code> e tenter\u00e0 di sincronizzare la directory locale <code>\/home\/user\/myproject\/<\/code> con la directory <code>\/var\/www\/myproject\/<\/code> del contenitore chiamato <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 driver di archiviazione per Docker. Nessun altro strumento funzioner\u00e0.<\/li>\n<li> \u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 Windows \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u041e\u0421 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430 \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 watcher&#8217;\u0430 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u0414\u0430\u043d\u043d\u044b\u0439 \u0431\u0430\u0433 \u0437\u0430\u043c\u0435\u0447\u0435\u043d \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043a\u0440\u0443\u043f\u043d\u044b\u043c\u0438 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430\u043c\u0438 \u2014 \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439. \u041c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/syncthing\/syncthing\/issues\/5832\">un problema corrispondente<\/a><\/noindex> nel progetto syncthing, ma finora non ci sono stati progressi (dall'inizio di luglio).<\/li>\n<li> Utilizza 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 ogni volta che ci sono modifiche ai file. Questo \u00e8 comodo per Node.js, ma assolutamente superfluo per PHP. \u00c8 meglio disattivare opcache e usare 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> Essenza: <b>debugga i 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 collaboratori.<\/li>\n<li> Linguaggio: Go.<\/li>\n<li> Licenza: Apache License 2.0.<\/li>\n<\/ul>\n<p>\n\u0414\u0430\u043d\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 pod&#8217;\u0430\u0445. \u0423\u0442\u0438\u043b\u0438\u0442\u0430 \u043f\u0440\u043e\u0441\u0442\u0430 \u0438 \u0432 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0439 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a <i>(vedi sotto)<\/i> e namespace + pod in cui intervenire. Attualmente sono supportati:<\/p>\n<ul>\n<li> delve \u2014 per applicazioni Go;<\/li>\n<li> GDB \u2014 tramite target remote + port forwarding;<\/li>\n<li> port forwarding JDWP per il debugging delle applicazioni Java.<\/li>\n<\/ul>\n<p>\nDal lato IDE, il supporto \u00e8 disponibile solo in VScode (con <noindex><a rel=\"nofollow\" href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=ilevine.squash\">estensione<\/a><\/noindex>), ma sono previsti supporto per Eclipse e Intellij nel piano corrente (2019).<\/p>\n<p>Per il debug dei processi, Squash avvia un contenitore privilegiato sui nodi del cluster, quindi \u00e8 necessario iniziare familiarizzando con le funzionalit\u00e0 <noindex><a rel=\"nofollow\" href=\"https:\/\/squash.solo.io\/secure_mode\/\">del modo sicuro<\/a><\/noindex> per evitare problemi di sicurezza.<\/p>\n<h2>Soluzioni complete<\/h2>\n<p>\nPassiamo ora all'artiglieria pesante: progetti pi\u00f9 'su larga scala' progettati per soddisfare immediatamente molte esigenze dei programmatori.<\/p>\n<p><i><b>NB<\/b>: In questo elenco c'\u00e8 sicuramente spazio 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, quindi abbiamo deciso di non includerla nella rassegna. Per chi desidera esplorare le sue funzionalit\u00e0 pi\u00f9 da vicino, consigliamo di leggere\/ascoltare la presentazione \"<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> Essenza: <b>per chi vuole iniziare a lavorare con Kubernetes, ma non vuole addentrarsi troppo nei suoi meandri.<\/b>.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/devspace-cloud\/devspace\">GitHub<\/a><\/noindex>.<\/li>\n<li> Brevi statistiche di GH: 630 stelle, 1912 commit, 13 contributori.<\/li>\n<li> Linguaggio: Go.<\/li>\n<li> Licenza: Apache License 2.0.<\/li>\n<\/ul>\n<p>\nSoluzione dell'omonima azienda che fornisce cluster managed con Kubernetes per lo sviluppo di team. L'utilit\u00e0 \u00e8 stata creata per cluster commerciali, ma funziona perfettamente anche con qualsiasi altro.<\/p>\n<p>Eseguendo il comando <code>devspace init<\/code> nella cartella del progetto, ti verr\u00e0 proposto (in modalit\u00e0 interattiva):<\/p>\n<ul>\n<li> di scegliere il cluster Kubernetes attivo,<\/li>\n<li> utilizzare quello esistente <code>Dockerfile<\/code> (o generarne uno nuovo) per creare un contenitore basato su di esso,<\/li>\n<li> scegliere il repository per memorizzare le immagini dei contenitori, ecc.<\/li>\n<\/ul>\n<p>\nDopo tutti questi passaggi preparatori, \u00e8 possibile iniziare lo sviluppo eseguendo il comando <code>devspace dev<\/code>. Questo raccoglier\u00e0 il contenitore, lo caricher\u00e0 nel repository, distribuer\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 proposta la possibilit\u00e0 di collegarsi al contenitore tramite terminale. Non \u00e8 consigliabile rifiutare, poich\u00e9 in realt\u00e0 il contenitore si avvia con il comando sleep e per testare realmente l'app \u00e8 necessario avviarla manualmente.<\/p>\n<p>Infine, il comando <code>devspace deploy<\/code> distribuisce l'applicazione e l'infrastruttura associata nel cluster, dopo di che tutto inizia a funzionare in modalit\u00e0 operativa.<\/p>\n<p>L'intera configurazione del progetto \u00e8 memorizzata nel file <code>devspace.yaml<\/code>. Oltre alle impostazioni ambientali per lo sviluppo, in questo file si pu\u00f2 trovare anche la descrizione dell'infrastruttura, simile ai manifesti standard di Kubernetes, ma notevolmente semplificata.<\/p>\n<p><img decoding=\"async\" alt=\"Strumenti per sviluppatori di applicazioni in esecuzione su Kubernetes\" src=\"\/wp-content\/uploads\/2019\/08\/7abbba3806facfb69ba4e3f9e0f18938.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Architettura e principali passaggi per lavorare con DevSpace<\/i><\/p>\n<p>Inoltre, \u00e8 facile aggiungere un componente predefinito al progetto (ad esempio, un database MySQL) o un chart Helm. Maggiori dettagli si trovano in <noindex><a rel=\"nofollow\" href=\"https:\/\/devspace.cloud\/docs\/\">documentazione<\/a><\/noindex> \u2014 \u00e8 semplice.<\/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>\n\u042d\u0442\u0430 \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u043e\u0442 Google \u043f\u0440\u0435\u0442\u0435\u043d\u0434\u0443\u0435\u0442 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043a\u0440\u044b\u0442\u044c \u0432\u0441\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430, \u0447\u0435\u0439 \u043a\u043e\u0434 \u0442\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 Kubernetes. \u041d\u0430\u0447\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u043c \u043d\u0435 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e, \u043a\u0430\u043a devspace&#8217;\u043e\u043c: \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u044f\u0437\u044b\u043a\u0430 \u0438 \u0430\u0432\u0442\u043e\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f <code>Dockerfile<\/code> non vi verr\u00e0 offerto qui.<\/p>\n<p>Tuttavia, se questo non vi spaventa, ecco cosa permette di fare Skaffold:<\/p>\n<ul>\n<li> Monitorare le modifiche nel codice sorgente.<\/li>\n<li> \u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0441 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u043c pod&#8217;\u0430, \u0435\u0441\u043b\u0438 \u043e\u043d \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u0431\u043e\u0440\u043a\u0438.<\/li>\n<li> Compilare i container con il codice, se il linguaggio di programmazione \u00e8 interpretato, oppure compilare gli artefatti e impacchettarli in container.<\/li>\n<li> Verificare 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> Etichettare e caricare le immagini nel Docker Registry.<\/li>\n<li> Distribuire l'applicazione nel cluster utilizzando kubectl, Helm o kustomize.<\/li>\n<li> Trasferire le porte.<\/li>\n<li> Debuggare applicazioni scritte in Java, Node.js, Python.<\/li>\n<\/ul>\n<p>\nIl workflow, in varie versioni, \u00e8 descritto in modo dichiarativo nel file <code>skaffold.yaml<\/code>. \u00c8 possibile definire pi\u00f9 profili per il progetto, in cui modificare parzialmente o completamente le fasi di build e deployment. Ad esempio, si pu\u00f2 specificare un'immagine di base comoda per gli sviluppatori per la sviluppo, mentre per staging e production si pu\u00f2 utilizzare una versione minimale (+ utilizzare <code>securityContext<\/code> per i container o ridefinire il cluster in cui l'applicazione sar\u00e0 distribuita).<\/p>\n<p>La build dei container Docker pu\u00f2 avvenire localmente o in 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 molte strategie: per git commit hash, data\/ora, somma sha256 del codice sorgente, ecc.<\/p>\n<p>Vale la pena 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 tracciando gli exit status e controllando l'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 tramite espressioni regolari.<\/li>\n<li> Confronto dei metadati dell'immagine (<code>ENV<\/code>, <code>ENTRYPOINT<\/code>, <code>VOLUMES<\/code> e simili).<\/li>\n<li> Verifica della compatibilit\u00e0 delle licenze.<\/li>\n<\/ul>\n<p>\nLa sincronizzazione dei file con il contenitore non avviene nel modo pi\u00f9 ottimale: Skaffold crea semplicemente un archivio con il codice sorgente, lo copia e lo decomprime nel contenitore (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 in esecuzione su 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 consente di astrarsi dai manifest di Kubernetes e non ha alcuna interattivit\u00e0, quindi potrebbe sembrare difficile da apprendere. Ma \u00e8 proprio questo il suo punto forte: offre una maggiore libert\u00e0 d'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> Linguaggio: TypeScript <i>(Si prevede di suddividere il progetto in pi\u00f9 componenti, alcuni dei quali saranno in Go, e di creare un SDK per lo sviluppo di estensioni in TypeScript\/JavaScript e Go)<\/i>.<\/li>\n<li> Licenza: Apache License 2.0.<\/li>\n<\/ul>\n<p>\nCome Skaffold, Garden \u00e8 progettato per automatizzare i processi di distribuzione del codice dell'applicazione nel cluster K8s. Per fare ci\u00f2, \u00e8 necessario prima descrivere la struttura del progetto in un file YAML e poi eseguire il comando <code>garden dev<\/code>. Questo far\u00e0 tutta la magia:<\/p>\n<ul>\n<li> Costruir\u00e0 i contenitori con le varie parti del progetto.<\/li>\n<li> Eseguir\u00e0 test di integrazione e unitari, se previsti.<\/li>\n<li> Distribuir\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>\nL'uso di questo strumento si concentra sulla condivisione collaborativa del cluster remoto da parte del team di sviluppo. In questo caso, se alcune fasi di build e test sono gi\u00e0 state completate, questo accelerer\u00e0 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 manifest per <code>kubectl apply<\/code> o anche una funzione OpenFaaS. Qualsiasi modulo pu\u00f2 essere estratto da un repository Git remoto. Il modulo pu\u00f2 definire (o meno) servizi, attivit\u00e0 e test. I servizi e le attivit\u00e0 possono avere dipendenze, consentendo di definire la sequenza di distribuzione dei vari servizi, ordinare l'esecuzione delle attivit\u00e0 e dei test.<\/p>\n<p>Garden fornisce all'utente un bellissimo dashboard (attualmente in <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/garden-io\/garden\/tree\/master\/dashboard\">stato sperimentale)<\/a><\/noindex>), che mostra il diagramma del progetto: componenti, sequenza di compilazione, esecuzione di attivit\u00e0 e test, le loro relazioni e dipendenze. \u00c8 possibile visualizzare direttamente nel browser anche i log di tutti i componenti del progetto, controllare cosa restituisce un determinato componente via HTTP (se, naturalmente, \u00e8 stato dichiarato una risorsa ingress).<\/p>\n<p><img decoding=\"async\" alt=\"Strumenti per sviluppatori di applicazioni in esecuzione su Kubernetes\" src=\"\/wp-content\/uploads\/2019\/08\/931b48a306fcce025e4dd8aa51d01552.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Pannello per Garden<\/i><\/p>\n<p>Questo strumento ha anche una modalit\u00e0 hot-reload, che sincronizza semplicemente le modifiche degli script con il contenitore nel cluster, accelerando notevolmente il processo di debug dell'applicazione. Garden offre un buon <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.garden.io\/\">documentazione<\/a><\/noindex> e soddisfacente <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/garden-io\/garden\/tree\/master\/examples\">insieme di esempi<\/a><\/noindex>, che permettono di orientarsi rapidamente e iniziare ad utilizzarlo. A proposito, 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 ancora molte utilit\u00e0 utili e pratiche, meritevoli, se non di un articolo a parte, almeno di una menzione. Raccontateci quali strumenti utilizzate, quali problemi avete riscontrato e come li avete risolti!<\/p>\n<h2>P.S.<\/h2>\n<p>\nLeggete 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\/\">\u041f\u043b\u0430\u0433\u0438\u043d kubectl-debug \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0432 pod&#8217;\u0430\u0445 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 4.9.10 - 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 \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\" \/>\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) 4.9.10\" \/>\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 \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\" \/>\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 sviluppatori di applicazioni eseguite in Kubernetes | ProHoster","description":"Un approccio moderno alla gestione affronta molte delle sfide attuali del business. I container e gli orchestratori permettono di scalare facilmente progetti di qualsiasi complessit\u00e0, semplificano il rilascio di nuove versioni, rendendolo pi\u00f9 affidabile, ma creano anche ulteriori problemi per gli sviluppatori. Ci\u00f2 che preoccupa prima di tutto un programmatore \u00e8 il proprio codice: architettura, qualit\u00e0, prestazioni, eleganza, e non come andr\u00e0 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 \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","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"},"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}]}}