Strumenti per sviluppatori di applicazioni in esecuzione in Kubernetes

Strumenti per sviluppatori di applicazioni in esecuzione in Kubernetes

Un approcciu mudernu à l'operazioni risolve parechji prublemi di cummerciale pressanti. I cuntenituri è l'orchestratori facenu fàciule à scala di prughjetti di ogni cumplessità, simplificà a liberazione di novi versioni, facenu più affidabili, ma à u stessu tempu creanu prublemi supplementari per i sviluppatori. U programatore, prima di tuttu, cura di u so codice: architettura, qualità, prestazione, eleganza - è micca cumu travaglià in Kubernetes è cumu per pruvà è debug dopu avè fattu ancu cambiamenti minimi. Per quessa, hè ancu abbastanza naturale chì l'arnesi per Kubernetes sò attivamente sviluppati, aiutendu à risolve i prublemi ancu di i sviluppatori più "arcaici" è permettenu di fucalizza nantu à a cosa principale.

Questa rivista furnisce brevi infurmazioni nantu à alcune di e strumenti chì facenu a vita più faciule per un programatore chì u codice corre in u pod'ax di un cluster Kubernetes.

Semplici aiutanti

Kubectl-debug

  • L'essenza: aghjunghje u vostru cuntinuu à un Pod è vede ciò chì succede in questu.
  • GitHub.
  • Brevi statistiche GH: 715 stelle, 54 commits, 9 cuntributori.
  • Lingua: vai.
  • Licenza: Apache License 2.0.

Stu plugin per kubectl vi permette di creà un cuntainer supplementu in u podu d'interessu, chì sparte u spaziu di nomi di prucessu cù altri cuntenituri. In questu pudete debug u funziunamentu di u pod: verificate a reta, ascolta u trafficu di a rete, fate una traccia di u prucessu d'interessu, etc.

Pudete ancu cambià à u containeru di prucessu in esecuzione chroot /proc/PID/root - questu pò esse assai còmuda quandu avete bisognu di ottene una cunchiglia radicali in un cuntinuu per quale hè stallatu in u manifestu securityContext.runAs.

U strumentu hè simplice è efficace, cusì pò esse utile à ogni sviluppatore. Avemu scrittu più nantu à questu in articulu separatu.

Telepresenza

  • L'essenza: trasfiriri l 'applicazzioni à u vostru urdinatore. Sviluppà è debug in u locu.
  • situ; GitHub.
  • Brevi statistiche GH: 2131 stelle, 2712 commits, 33 contributors.
  • Lingua: Python.
  • Licenza: Apache License 2.0.

L'idea di stu snap-in hè di lancià un containeru cù l'applicazione nantu à l'urdinatore di l'utilizatori lucali è proxy tuttu u trafficu da u cluster à ellu è torna. Stu approcciu vi permette di sviluppà in u locu solu editendu i schedari in u vostru IDE preferitu: i risultati seranu dispunibuli immediatamente.

I vantaghji di eseguisce in u locu sò a cunvenzione di l'edizioni è i risultati istantanei, a capacità di debug l'applicazione in u modu di solitu. U svantaghju hè chì hè esigenti nantu à a velocità di cunnessione, chì hè soprattuttu notevule quandu avete da travaglià cù una applicazione cù RPS è trafficu abbastanza altu. Inoltre, a Telepresence hà prublemi cù i monti di volumi in Windows, chì pò esse una limitazione decisiva per i sviluppatori abituati à questu OS.

Avemu digià spartutu a nostra sperienza di usu Telepresence ccà.

Ksync

  • L'essenza: sincronizazione quasi istantanea di codice cù u cuntinuu in u cluster.
  • GitHub.
  • Brevi statistiche GH: 555 stelle, 362 commits, 11 cuntributori.
  • Lingua: vai.
  • Licenza: Apache License 2.0.

L'utilità permette di sincronizà u cuntenutu di un repertoriu lucale cù u repertoriu di un containeru chì curre in u cluster. Un tali strumentu hè perfettu per i sviluppatori in linguaggi di prugrammazione di scrittura, chì u prublema principali hè di furnisce codice à un containeru in esecuzione. Ksync hè pensatu per allevà stu mal di testa.

Quandu inizializatu una volta da u cumandamentu ksync init un DaemonSet hè creatu in u cluster, chì hè utilizatu per monitorizà u statu di u sistema di schedari di u cuntinuu sceltu. In u so urdinatore lucale, u sviluppatore corre u cumandamentu ksync watch, chì monitorizza e cunfigurazioni è corse sintesi, chì sincronizza direttamente i schedari cù u cluster.

Tuttu ciò chì resta hè di struisce à ksync ciò chì sincronizà cù ciò chì. Per esempiu, stu cumandamentu:

ksync create --name=myproject --namespace=test --selector=app=backend --container=php --reload=false /home/user/myproject/ /var/www/myproject/

... creà un watcher chjamatu myprojectchì cercarà un pod cù una etichetta app=backend è pruvate à sincronizà u cartulare locale /home/user/myproject/ cù catalogu /var/www/myproject/ à u containeru chjamatu php.

Problemi è note nantu à ksync da a nostra sperienza:

  • Deve esse usatu in i nodi di cluster Kubernetes overlay2 cum'è un driver di almacenamiento per Docker. L'utilità ùn funziona micca cù l'altri.
  • Quandu si usa Windows cum'è un sistema operativu di u cliente, l'osservatore di u sistema di fugliale ùn pò micca funzionà bè. Stu bug hè statu nutatu quandu u travagliu cù cartulari grandi - cù un gran numaru di schedari è cartulari annidati. Avemu creatu questione pertinente in u prughjettu di syncthing, ma ùn ci hè ancu un prugressu annantu à questu (dapoi u principiu di lugliu).
  • Utilizà u schedariu .stignore per specificà percorsi o mudelli di fugliale chì ùn anu micca bisognu di sincronizà (per esempiu, cartulari app/cache и .git).
  • Per automaticamente, ksync riavviarà u cuntinuu ogni volta chì i schedari cambianu. Per Node.js questu hè cunvenutu, ma per PHP ùn hè micca necessariu. Hè megliu disattivà l'opcache è aduprà a bandiera --reload=false.
  • A cunfigurazione pò esse sempre corretta $HOME/.ksync/ksync.yaml.

Squash

  • L'essenza: debug prucessi direttamente in u cluster.
  • GitHub.
  • Brevi statistiche GH: 1154 stelle, 279 commits, 23 contributors.
  • Lingua: vai.
  • Licenza: Apache License 2.0.

Stu strumentu hè pensatu per i prucessi di debugging direttamente in pods. L'utilità hè simplice è interattiva permette di selezziunà u debugger desideratu (vede sottu) è namespace + pod, in u prucessu di quale avete bisognu di intervene. Attualmente supportatu:

  • delve - per l'applicazioni Go;
  • GDB - via remota target + port forwarding;
  • Trasferimentu di portu JDWP per debugging applicazioni Java.

Da u latu IDE, u supportu hè dispunibule solu in VScode (usendu ingrandamentu), però, i piani per l'annu currentu (2019) includenu Eclipse è Intellij.

Per debug i prucessi, Squash esegue un containeru privilegiatu nantu à i nodi di cluster, cusì deve prima familiarizàvi cù e capacità. modu sicuru per evità prublemi di sicurità.

Soluzioni integrate

Passemu à l'artiglieria pesante - più prughjetti di "grande scala" pensati per risponde immediatamente à parechji bisogni di i sviluppatori.

NB: In questa lista, sicuru, ci hè un locu per a nostra utilità Open Source werf (anciennement connu sous le nom dapp). In ogni casu, avemu digià scrittu è parlatu più di una volta, è dunque decisu di ùn include micca in a rivista. Per quelli chì vulianu familiarizà cù e so capacità, ricumandemu di leghje / sente u rapportu "werf hè u nostru strumentu per CI/CD in Kubernetes».

DevSpace

  • L'essenza: per quelli chì volenu principià à travaglià in Kubernetes, ma ùn volenu micca sfondate in a so jungla.
  • GitHub.
  • Brevi statistiche GH: 630 stelle, 1912 commits, 13 contributori.
  • Lingua: vai.
  • Licenza: Apache License 2.0.

Una suluzione da a cumpagnia di u listessu nome, chì furnisce clusters gestiti cù Kubernetes per u sviluppu di a squadra. L'utilità hè stata creata per clusters cummirciali, ma funziona bè cù qualsiasi altri.

Quandu eseguisce u cumandamentu devspace init in u catalogu di u prugettu vi sarà offrittu (interattivamente):

  • sceglite un cluster Kubernetes chì funziona,
  • aduprà esistenti Dockerfile (o generà un novu) per creà un containeru basatu annantu à questu,
  • sceglite un repository per almacenà l'imaghjini di u containeru, etc.

Dopu à tutti sti passi preparatori, vi ponu principiatu u sviluppu da eseguisce u cumandamentu devspace dev. Custruirà u cuntinuu, caricherà à u repository, sparghjerà a implementazione à u cluster è inizià u portu forwarding è a sincronizazione di u cuntinuu cù u repertoriu lucale.

Opcionalmente, vi sarà dumandatu à spustà u terminal à u cuntinuu. Ùn deve micca ricusà, perchè in a realtà u cuntinuu principia cù u cumandamentu di u sonnu, è per a prova vera l'applicazione deve esse lanciata manualmente.

Infine, a squadra devspace deploy rolls out l'applicazione è l'infrastruttura assuciata à u cluster, dopu chì tuttu principia à funziunà in modu di cummattimentu.

Tutta a cunfigurazione di u prughjettu hè guardatu in un schedariu devspace.yaml. In più di i paràmetri di l'ambienti di sviluppu, pudete ancu truvà una descrizzione di l'infrastruttura in questu, simili à i manifesti standard di Kubernetes, solu simplificatu assai.

Strumenti per sviluppatori di applicazioni in esecuzione in Kubernetes
Architettura è fasi principali di travaglià cù DevSpace

Inoltre, hè faciule d'aghjunghje un cumpunente predefinitu (per esempiu, un DBMS MySQL) o un graficu Helm à u prugettu. Leghjite più in ducumentazione - ùn hè micca cumplicatu.

Scaffold

  • situ; GitHub.
  • Brevi statistiche GH: 7423 stelle, 4173 commits, 136 contributors.
  • Lingua: vai.
  • Licenza: Apache License 2.0.

Questa utilità da Google dice chì copre tutte e bisogni di un sviluppatore chì u codice si correrà in qualchì modu in un cluster Kubernetes. Cumincià à aduprà ùn hè micca cusì faciule cum'è devspace: senza interattività, rilevazione di lingua è creazione automatica Dockerfile ùn vi pruponenu micca quì.

Tuttavia, se questu ùn ti spaventa micca, eccu ciò chì Skaffold vi permette di fà:

  • Segui i cambiamenti di u codice fonte.
  • Sincronizza cù u containeru di pod si ùn hè micca bisognu di assemblea.
  • Cullate cuntenituri cù codice, se a lingua hè interpretata, o cumpilà artefatti è imballate in cuntenituri.
  • L'imaghjini resultanti sò verificati automaticamente usendu prova-struttura-contenitore.
  • Tagging and uploading images to the Docker Registry.
  • Implementa una applicazione in un cluster utilizendu kubectl, Helm o kustomize.
  • Eseguite u portu forwarding.
  • Debug applicazioni scritte in Java, Node.js, Python.

U flussu di travagliu in diverse variazioni hè descritta in modu dichjarazione in u schedariu skaffold.yaml. Per un prughjettu, pudete ancu definisce parechji profili in quale pudete cambià parzialmente o cumpletamente e fasi di assemblea è implementazione. Per esempiu, per u sviluppu, specificate una maghjina di basa cunvene per u sviluppatore, è per a messa in scena è a produzzione - una minima (+ usu securityContext contenitori o ridefinisce u cluster in quale l'applicazione serà implementata).

I cuntenituri Docker ponu esse custruitu in u locu o à distanza: in Google Cloud Build o in un cluster usendu Kaniko. Bazel è Jib Maven / Gradle sò ancu supportati. Per tagging, Skaffold sustene parechje strategie: per git commit hash, data / ora, sha256-sum di fonti, etc.

Separatamente, vale a pena nutà a pussibilità di pruvà cuntenituri. U framework di test di struttura di containeru digià citatu offre i seguenti metudi di verificazione:

  • Eseguisce cumandamenti in u cuntestu di un containeru cù u seguimentu di i stati di uscita è cuntrollà a pruduzzioni di testu di u cumandamentu.
  • Verificate a prisenza di i schedari in u cuntinuu è currisponde à l'attributi specificati.
  • Cuntrolla di u cuntenutu di u schedariu utilizendu espressioni regulari.
  • Verificazione di metadati di l'imaghjini (ENV, ENTRYPOINT, VOLUMES etc.).
  • Verificate a cumpatibilità di a licenza.

A sincronizazione di i fugliali cù u cuntinuu ùn hè micca realizatu in u modu più ottimali: Skaffold simpricimenti crea un archiviu cù e fonti, u copia è unpacks in u cuntinuu (tar deve esse installatu). Dunque, se u vostru compitu principalu hè a sincronizazione di codice, hè megliu à circà una suluzione specializata (ksync).

Strumenti per sviluppatori di applicazioni in esecuzione in Kubernetes
Fasi principali di l'operazione Skaffold

In generale, l'uttellu ùn permette micca di astrazione da i manifesti di Kubernetes è ùn hà micca interattività, perchè pò esse difficiule di maestru. Ma questu hè ancu u so vantaghju - una più grande libertà d'azzione.

Garden

  • situ; GitHub.
  • Brevi statistiche GH: 1063 stelle, 1927 commits, 17 contributori.
  • Lingua: TypeScript (Hè previstu di sparte u prugettu in parechji cumpunenti, alcuni di i quali seranu in Go, è ancu fà un SDK per creà add-ons in TypeScript / JavaScript è Go).
  • Licenza: Apache License 2.0.

Cum'è Skaffold, Garden hà u scopu di automatizà i prucessi di furnisce u codice di l'applicazione à u cluster K8s. Per fà questu, avete prima bisognu di discrìviri a struttura di u prugettu in un schedariu YAML, è poi eseguite u cumandamentu garden dev. Ella farà tutta a magia:

  • Cullate cuntenituri cù diverse parti di u prugettu.
  • Conduce teste di integrazione è unità, se ne sò stati descritti.
  • Stende tutti i cumpunenti di u prugettu à u cluster.
  • Se u codice fonte cambia, riavviarà u pipeline tutale.

U focu principalu di l'usu di sta strumentu hè di sparte un cluster remotu cù un squadra di sviluppu. In questu casu, se alcuni di i passi di custruzzione è di prova sò digià fattu, questu accelerà significativamente u prucessu tutale, postu chì Garden puderà utilizà i risultati in cache.

Un modulu di prughjettu pò esse un containeru, un containeru Maven, un graficu Helm, un manifestu per kubectl apply o ancu una funzione OpenFaaS. Inoltre, qualsiasi moduli pò esse tiratu da un repository Git remoto. Un modulu pò definisce o micca servizii, compiti è testi. I servizii è i travaglii ponu avè dipendenze, grazie à quale pudete determinà a sequenza di implementazione di un serviziu particulari è urganizà u lanciamentu di i travaglii è e teste.

Garden furnisce à l'utilizatori un bellu dashboard (attualmente in statu spirimintali), chì mostra u gràficu di u prugettu: cumpunenti, sequenza di assemblea, esecuzione di tarei è teste, e so cunnessione è dipendenze. Giustu in u navigatore, pudete vede i logs di tutti i cumpunenti di u prughjettu è verificate ciò chì un cumpunente particulari outputs via HTTP (se, sicuru, una risorsa di ingressu hè dichjarata per questu).

Strumenti per sviluppatori di applicazioni in esecuzione in Kubernetes
Panel per u giardinu

Stu strumentu hà ancu un modu di ricaricamentu caldu, chì simpricimenti sincronizza i cambiamenti di script cù u cuntinuu in u cluster, accelerà assai u prucessu di debugging di l'applicazione. Garden hà una bona documentazione è micca male serie di esempi, chì vi permette di abituà rapidamente è cumincià à aduprà. A propositu, appena recentemente avemu publicatu traduzzione di l'articulu da i so autori.

cunchiusioni

Di sicuru, sta lista di strumenti per sviluppà è debugging applicazioni in Kubernetes ùn hè micca limitata à. Ci sò assai più utili assai utili è pratichi chì sò degni, se micca un articulu separatu, almenu una menzione. Diteci ciò chì aduprate, chì prublemi avete scontru è cumu si risolve!

PS

Leghjite puru nant'à u nostru blog:

Source: www.habr.com

Add a comment