{"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\/et\/blog\/administrirovanie\/instrumenty-dlya-razrabotchikov-prilozhenij-zapuskaemyh-v-kubernetes","title":{"rendered":"Rakenduste arendamise t\u00f6\u00f6riistad, mis k\u00e4ivitatakse Kuberneteses","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Rakenduste arendamise t\u00f6\u00f6riistad, mis k\u00e4ivitatakse Kuberneteses\" src=\"\/wp-content\/uploads\/2019\/08\/ad1f46a3562dcefacaa1722ee1ce3387.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKaasaegne l\u00e4henemine haldamisele lahendab palju ettev\u00f5tete h\u00e4davajalikke probleeme. Konteinerid ja orkestratsioonit\u00f6\u00f6riistad v\u00f5imaldavad h\u00f5lpsasti skaleerida projekti \u00fcksk\u00f5ik millise keerukuse tasemele, lihtsustades uute versioonide v\u00e4ljalaskmist, muutes need usaldusv\u00e4\u00e4rsemaks, kuid samas loovad lisaprobleeme arendajatele. Arendajat huvitab eelk\u00f5ige tema kood: arhitektuur, kvaliteet, j\u00f5udlus, elegants \u2014 mitte see, kuidas see Kuberneteses t\u00f6\u00f6tama panna ja kuidas seda testida ja siluda isegi k\u00f5ige v\u00e4iksemate muudatuste korral. Seet\u00f5ttu on t\u00e4iesti loogiline, et aktiivselt arendatakse t\u00f6\u00f6riistu Kuberneteses, mis aitavad lahendada isegi k\u00f5ige \u201earhiilisemate\u201c arendajate probleeme ja v\u00f5imaldavad neil keskenduda peamisele.<\/p>\n<p>Selles \u00fclevaates on l\u00fchike teave m\u00f5nede t\u00f6\u00f6riistade kohta, mis lihtsustavad arendaja elu, kelle kood t\u00f6\u00f6tab Kubernetes klastris pod'ides.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Lihtsad abimehed<\/h2>\n<p><\/p>\n<h3>Kubectl-debug<\/h3>\n<p><\/p>\n<ul>\n<li> P\u00f5him\u00f5te: <b>lisage oma konteiner pod'i ja vaadake, mis seal toimub<\/b>.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/aylei\/kubectl-debug\">GitHub<\/a><\/noindex>.<\/li>\n<li> L\u00fchike statistika GH: 715 t\u00e4hte, 54 commit'i, 9 kaasautor.<\/li>\n<li> Keeled: Go.<\/li>\n<li> Litsents: Apache License 2.0.<\/li>\n<\/ul>\n<p>\nSee plugin for kubectl allows creating an additional container inside the desired pod that will share the process namespace with other containers. You can debug the pod's operation: check network performance, listen to network traffic, perform strace on the desired process, etc.<\/p>\n<p>Samuti saab siseneda protsessikonteinerisse, t\u00e4ites <code>chroot \/proc\/PID\/root<\/code> \u2014 see on v\u00e4ga mugav, kui on vaja saada root shell konteinerisse, mille m\u00e4lestises on seatud <code>securityContext.runAs<\/code>.<\/p>\n<p>T\u00f6\u00f6riist on lihtne ja t\u00f5hus, nii et see v\u00f5ib olla kasulik igale arendajale. Rohkem teavet selle kohta oleme kirjutanud <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/436112\/\">a separate article<\/a><\/noindex>.<\/p>\n<h3>Telepresence<\/h3>\n<p><\/p>\n<ul>\n<li> P\u00f5him\u00f5te: <b>pane rakendus oma arvutisse. Arenda ja silu kohapeal<\/b>.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/www.telepresence.io\/\">Veebisait<\/a><\/noindex>; <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/telepresenceio\/telepresence\">GitHub<\/a><\/noindex>.<\/li>\n<li> L\u00fchike statistika GH: 2131 t\u00e4hte, 2712 commit'i, 33 kaasautor.<\/li>\n<li> Keeled: Python.<\/li>\n<li> Litsents: Apache License 2.0.<\/li>\n<\/ul>\n<p>\nSelle t\u00f6\u00f6riista idee seisneb rakenduse konteineri k\u00e4ivitamises kohaliku kasutaja arvutis ning kogu liikluse prox\u00fcesimises klastri ja tagasi. See l\u00e4henemine v\u00f5imaldab arendada kohapeal, muutes lihtsalt faile oma lemmik-IDE's: tulemused on kohe kergesti saadaval.<\/p>\n<p>Kohalikul k\u00e4ivitamisel on plussideks mugav redigeerimine ja kohene tulemus, samuti v\u00f5imalus rakendust harjumusp\u00e4rasel viisil siluda. Miinusteks on n\u00f5udlikkus \u00fchenduse kiirusest, mis on eriti m\u00e4rgatav siis, kui tuleb t\u00f6\u00f6tada rakendusega, millel on piisavalt k\u00f5rge RPS ja liiklus. Lisaks on Telepresence'il Windowsis probleeme mahum\u00e4gedega, mis v\u00f5ib osutuda piiravaks teguriks arendajatele, kes on harjunud selle ops\u00fcsteemiga.<\/p>\n<p>Oleme juba jaganud oma kogemusi Telepresence'i kasutamisest. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/446788\/\">siin<\/a><\/noindex>.<\/p>\n<h3>Ksync<\/h3>\n<p><\/p>\n<ul>\n<li> P\u00f5him\u00f5te: <b>peaaegu kohene koodi s\u00fcnkroonimine konteineriga klastris.<\/b>.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/vapor-ware\/ksync\">GitHub<\/a><\/noindex>.<\/li>\n<li> L\u00fchistatistika GH: 555 t\u00e4hte, 362 commit'i, 11 kaasautorist.<\/li>\n<li> Keeled: Go.<\/li>\n<li> Litsents: Apache License 2.0.<\/li>\n<\/ul>\n<p>\nT\u00f6\u00f6riist v\u00f5imaldab s\u00fcnkroonida kohaliku katalooge sisu klastri konteineris. Selline t\u00f6\u00f6riist sobib suurep\u00e4raselt skriptikeeltes arendajatele, kelle peamine probleem on koodi j\u00f5udmine t\u00f6\u00f6tavasse konteinerisse. Ksync on loodud selle peavalu leevendamiseks.<\/p>\n<p>\u00dche korra initsialiseerimise k\u00e4sklusega <code>ksync init<\/code> loob klastri DaemonSet'i, mida kasutatakse valitud konteineri failis\u00fcsteemi oleku j\u00e4lgimiseks. Oma lokaalses arvutis k\u00e4ivitab arendaja k\u00e4su <code>ksync watch<\/code>, mis j\u00e4lgib konfiguratsioonide olekut ja k\u00e4ivitab <noindex><a rel=\"nofollow\" href=\"https:\/\/syncthing.net\/\">syncthing<\/a><\/noindex>, mis teostab otsese s\u00fcnkroonimise failidega klastris.<\/p>\n<p>J\u00e4\u00e4b instructida ksync, mida ja millega s\u00fcnkroonida. N\u00e4iteks selline k\u00e4sk:<\/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 loob watcher'i nimega <code>myproject<\/code>, mis otsib pod'i, millel on silt <code>app=backend<\/code> ja p\u00fc\u00fcab s\u00fcnkroonida kohaliku katalooge <code>\/home\/user\/myproject\/<\/code> katalooge <code>\/var\/www\/myproject\/<\/code> konteineri nimega <code>php<\/code>.<\/p>\n<p>Probleemid ja m\u00e4rkused ksync'i kohta meie kogemustest:<\/p>\n<ul>\n<li> Kubernetes klastrite s\u00f5lmedes peab olema kasutusel <code>overlay2<\/code> Docker'i salvestustehnoloogiana. \u00dchegi teise utiliidiga see ei toimi.<\/li>\n<li> When using Windows as a client OS, incorrect operation of the filesystem watcher may occur. This bug has been noted when working with large directories that have many nested files and directories. We created <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/syncthing\/syncthing\/issues\/5832\">vastava probleemi<\/a><\/noindex> projekti syncthing'is, kuid edusamme pole veel (juuli algusest) toimunud.<\/li>\n<li> Kasutage faili <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.syncthing.net\/users\/ignoring.html\"><code>.stignore<\/code><\/a><\/noindex> et, et m\u00e4\u00e4rata teed v\u00f5i failimallid, mida ei pea s\u00fcnkroonima (n\u00e4iteks kataloogid <code>app\/cache<\/code> ja <code>12 factor app<\/code>).<\/li>\n<li> Vaikimisi taask\u00e4ivitab ksync konteineri iga kord, kui failides toimub muudatus. Node.js puhul on see mugav, aga PHP puhul t\u00e4iesti tarbetu. Parim on v\u00e4lja l\u00fclitada opcache ja kasutada lippu <code>--reload=false<\/code>.<\/li>\n<li> Konfiguratsiooni saab alati muuta failis <code>$HOME\/.ksync\/ksync.yaml<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Squash<\/h3>\n<p><\/p>\n<ul>\n<li> P\u00f5him\u00f5te: <b>debugeeri protsessid otse klastris<\/b>.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/solo-io\/squash\">GitHub<\/a><\/noindex>.<\/li>\n<li> L\u00fchikokkuv\u00f5te GH: 1154 t\u00e4hte, 279 commit'i, 23 kaasautoritatud.<\/li>\n<li> Keeled: Go.<\/li>\n<li> Litsents: Apache License 2.0.<\/li>\n<\/ul>\n<p>\nThis tool is designed for debugging processes directly in pods. The utility is simple and allows you to select the necessary debugger in interactive mode. <i>(vt allpool)<\/i> ja namespace + pod, kuhu tuleb sekkuda. Praegu toetatakse:<\/p>\n<ul>\n<li> delve \u2014 Go rakenduste jaoks;<\/li>\n<li> GDB \u2014 l\u00e4bi remote target + pordi edastamise;<\/li>\n<li> pordi edastamine JDWP Java rakenduste debugeerimiseks.<\/li>\n<\/ul>\n<p>\nIDE poolt on tugi olemas vaid VScode'is (kasutades <noindex><a rel=\"nofollow\" href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=ilevine.squash\">laiendused<\/a><\/noindex>), kuid k\u00e4esoleva (2019) aasta plaanides on Eclipse ja Intellij.<\/p>\n<p>Protsesside debugeerimiseks k\u00e4ivitab Squash klastrinodele privileege sisaldava konteineri, seega on enne v\u00f5imalikest rikkumistest teadlikuks saamine vajalik <noindex><a rel=\"nofollow\" href=\"https:\/\/squash.solo.io\/secure_mode\/\">turvare\u017eiimiga<\/a><\/noindex> turvak\u00fcsimuste v\u00e4ltimiseks.<\/p>\n<h2>Komplekslahendused<\/h2>\n<p>\nLiigume raskema relvastuse juurde \u2014 suurematele projektidele, mis on loodud arendajate mitmete vajaduste rahuldamiseks.<\/p>\n<p><i><b>NB<\/b>: Selles nimekirjas on kindlasti koht ka meie Open Source t\u00f6\u00f6riistale <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/333682\/\"><b>werf<\/b><\/a><\/noindex> (varem tuntud kui dapp). Siiski oleme sellest juba korduvalt kirjutanud ja r\u00e4\u00e4kinud, seega otsustasime selle \u00fclevaatesse mitte lisada. Soovijatele tutvuda selle v\u00f5imalustega soovitame lugeda\/kuulata ettekannet \u201c<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/460351\/\">werf \u2014 meie CI\/CD t\u00f6\u00f6riist Kuberneteses<\/a><\/noindex>\u00bb.<\/i><\/p>\n<h3>DevSpace<\/h3>\n<p><\/p>\n<ul>\n<li> P\u00f5him\u00f5te: <b>neile, kes soovivad alustada Kubernetesega t\u00f6\u00f6tamist, kuid ei taha s\u00fcgavale selle keerukustes siseneda<\/b>.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/devspace-cloud\/devspace\">GitHub<\/a><\/noindex>.<\/li>\n<li> L\u00fchikokkuv\u00f5te GH: 630 t\u00e4hte, 1912 commit'i, 13 kaasautoritatud.<\/li>\n<li> Keeled: Go.<\/li>\n<li> Litsents: Apache License 2.0.<\/li>\n<\/ul>\n<p>\nLahendus sama nimel peab meeles pidama, pakkudes manageeritud Kubernetes klastreid meeskondade arendamiseks. T\u00f6\u00f6riist loodi kommertsklastrite jaoks, kuid t\u00f6\u00f6tab suurep\u00e4raselt ka teistega.<\/p>\n<p>K\u00e4ivitades k\u00e4su <code>devspace init<\/code> projekti kataloogis pakuvad teile (interaktiivses re\u017eiimis):<\/p>\n<ul>\n<li> valida t\u00f6\u00f6 Kubernetes klaster,<\/li>\n<li> kasutada olemasolevat <code>Dockerfile<\/code> (v\u00f5i genereerida uus) konteineri loomiseks selle alusel,<\/li>\n<li> valida konteineripiltide hoidmiseks repository jne.<\/li>\n<\/ul>\n<p>\nK\u00f5ikide nende ettevalmistuste j\u00e4rel saab alustada arendust, tippides k\u00e4su <code>devspace dev<\/code>. See kogub konteineri, laadib selle registrisse, v\u00e4ljastab klastrisse deploymente ning k\u00e4ivitab portide suunamise ja konteineri s\u00fcnkroniseerimise kohaliku kaustaga.<\/p>\n<p>Valikuliselt pakutakse terminalis liikumist konteinerisse. Seda ei tasu keelduda, kuna tegelikult k\u00e4ivitub konteiner k\u00e4suga sleep ning reaalseks testimiseks on vaja rakendust k\u00e4ivitada k\u00e4sitsi.<\/p>\n<p>L\u00f5puks k\u00e4ivitab k\u00e4sk <code>devspace deploy<\/code> rakenduse ja sellega seotud infrastruktuuri klastris, p\u00e4rast mida hakkab k\u00f5ik t\u00f6\u00f6le tootmisre\u017eiimis.<\/p>\n<p>Kogu projekti konfigureerimine salvestatakse faili <code>devspace.yaml<\/code>. Peale arenduskohtade seadistamise leiate seal ka infrastruktuuri kirjelduse, mis sarnaneb tavalistele Kubernetes'i manifestidele, vaid oluliselt lihtsustatud.<\/p>\n<p><img decoding=\"async\" alt=\"Rakenduste arendamise t\u00f6\u00f6riistad, mis k\u00e4ivitatakse Kuberneteses\" src=\"\/wp-content\/uploads\/2019\/08\/7abbba3806facfb69ba4e3f9e0f18938.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>DevSpace'i arhitektuur ja peamised t\u00f6\u00f6etapid<\/i><\/p>\n<p>Lisaks on projekti lihtne lisada eelm\u00e4\u00e4ratud komponent (n\u00e4iteks andmebaas MySQL) v\u00f5i Helm-chart. Lisainfot lugege <noindex><a rel=\"nofollow\" href=\"https:\/\/devspace.cloud\/docs\/\">dokumentatsioon<\/a><\/noindex> \u2014 see ei ole keeruline.<\/p>\n<h3>Skaffold<\/h3>\n<p><\/p>\n<ul>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/skaffold.dev\/\">Veebisait<\/a><\/noindex>; <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/GoogleContainerTools\/skaffold\">GitHub<\/a><\/noindex>.<\/li>\n<li> Kohene statistika GH: 7423 t\u00e4rni, 4173 commit'i, 136 panustajat.<\/li>\n<li> Keeled: Go.<\/li>\n<li> Litsents: Apache License 2.0.<\/li>\n<\/ul>\n<p>\nThis tool from Google aims to cover all the needs of developers whose code will somehow run in a Kubernetes cluster. It is not as easy to start using as devspace: there is no interactivity, language detection, or auto-creation. <code>Dockerfile<\/code> siin teile ei pakuta.<\/p>\n<p>Kuid kui see ei hirmuta \u2014 siin on, mida Skaffold teha lubab:<\/p>\n<ul>\n<li> J\u00e4lgida l\u00e4htekoodi muudatusi.<\/li>\n<li> Synchronize it with the pod container if it does not require compilation.<\/li>\n<li> Koguda konteinerid koodiga, kui programmeerimiskeel on t\u00f5lgitav, v\u00f5i kompileerida artefakte ja pakkida need konteineritesse.<\/li>\n<li> Saadud pilte kontrollida automaatselt <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/GoogleContainerTools\/container-structure-test\">container-structure-test<\/a><\/noindex>.<\/li>\n<li> M\u00e4rgistada ja laadida pilte Docker Registry'sse.<\/li>\n<li> Rakendust klastris \u00fcles ehitada, kasutades kubectl, Helm v\u00f5i kustomize.<\/li>\n<li> Portide suunamine.<\/li>\n<li> Vigade otsimine Java, Node.js, Pythonis kirjutatud rakendustes.<\/li>\n<\/ul>\n<p>\nT\u00f6\u00f6k\u00e4ik erinevates variatsioonides on deklaratiivselt kirja pandud failis <code>skaffold.yaml<\/code>. Projekti jaoks saab m\u00e4\u00e4rata ka mitu profiili, kus etappide koostamine ja juurutamine muudetakse osaliselt v\u00f5i t\u00e4ielikult. N\u00e4iteks saab arenduseks m\u00e4\u00e4rata arendajale sobiva baaspildi ja staging'utamiseks ning tootmiseks - minimaalne (+ kasutamine <code>securityContext<\/code> konteinerite v\u00f5i \u00fcle kirjutada klastri, milles rakendus juurutatakse).<\/p>\n<p>Docker-konteinerite koostamine saab toimuda kohapeal v\u00f5i kaugelt: <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/cloud-build\/\">Google Cloud Build<\/a><\/noindex> v\u00f5i klastri abil, kasutades <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/GoogleContainerTools\/kaniko\">Kaniko<\/a><\/noindex>. Samuti toetatakse Bazeli ja Jib Maven\/Gradle'i. Skaffold toetab mitmesuguseid strateegiaid sildistamiseks: git commit hash, kuup\u00e4ev\/aeg, sha256 algfailide summa jne.<\/p>\n<p>Erakordselt tuleb m\u00e4rkida konteinerite testimise v\u00f5imalust. Eelmises punktis mainitud container-structure-test raamistik pakub j\u00e4rgmisi kontrollimismeetodeid:<\/p>\n<ul>\n<li> K\u00e4skude t\u00e4itmine konteineri kontekstis v\u00e4ljundstaatuste j\u00e4lgimise ja k\u00e4su tekstilise \u2018v\u00e4ljundi\u2019 kontrollimisega.<\/li>\n<li> Failide olemasolu konteineris ja atribuutide vastavus m\u00e4\u00e4ratletud tingimustele.<\/li>\n<li> Failide sisu kontrollimine regulaaravaldiste j\u00e4rgi.<\/li>\n<li> Pildi metainformatsiooni v\u00f5rdlemine (<code>ENV<\/code>, <code>ENTRYPOINT<\/code>, <code>VOLUMES<\/code> jne.).<\/li>\n<li> Litsentsi \u00fchilduvuse kontroll.<\/li>\n<\/ul>\n<p>\nFailide s\u00fcnkroonimine konteineriga toimub mitte k\u00f5ige optimaalsemal viisil: Skaffold loob lihtsalt algfailidest arhiivi, kopeerib selle ja arhiveerib konteinis (peab olema installitud tar). Seet\u00f5ttu, kui teie peamine \u00fclesanne on koodi s\u00fcnkroniseerimine, siis on parem vaadata spetsialiseeritud lahenduse (ksync) poole.<\/p>\n<p><img decoding=\"async\" alt=\"Rakenduste arendamise t\u00f6\u00f6riistad, mis k\u00e4ivitatakse Kuberneteses\" src=\"\/wp-content\/uploads\/2019\/08\/a53647e9d3bf002c292dcae7a774e561.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Skaffoldi t\u00f6\u00f6 peamised etapid<\/i><\/p>\n<p>\u00dcldiselt ei v\u00f5imalda see t\u00f6\u00f6riist Kubernetes'i manifestidest abstrakteeruda ja tal puudub mingisugune interaktiivsus, mist\u00f5ttu v\u00f5ib see tunduda keeruline omandada. Kuid see on ka tema eelis - suurem vabadus.<\/p>\n<h3>Garden<\/h3>\n<p><\/p>\n<ul>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/garden.io\/\">Veebisait<\/a><\/noindex>; <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/garden-io\/garden\">GitHub<\/a><\/noindex>.<\/li>\n<li> L\u00fchike statistika GH: 1063 t\u00e4hte, 1927 commitit, 17 panustajat.<\/li>\n<li> Keel: TypeScript <i>(plaanis jagada projekt mitmeks komponendiks, millest m\u00f5ned on Go's ja luua SDK lisade loomiseks TypeScript\/JavaScript'i ja Go jaoks)<\/i>.<\/li>\n<li> Litsents: Apache License 2.0.<\/li>\n<\/ul>\n<p>\nNagu Skaffold, on Garden suunatud rakenduse koodi kohaletoimetamise protsesside automatiseerimisele K8s-klastrisse. Selleks tuleb esmalt projekti struktuur YML-failis kirja panna, mille j\u00e4rel k\u00e4ivitada k\u00e4sk <code>garden dev<\/code>. See teeb kogu maagia:<\/p>\n<ul>\n<li> Kogub erinevate projektiosade konteinerid.<\/li>\n<li> Viib l\u00e4bi integratsiooni ja \u00fcksuste teste, kui need on kirja pandud.<\/li>\n<li> V\u00e4ljastab k\u00f5ik projekti koostisosad klastrisse.<\/li>\n<li> Kui l\u00e4htekood muutub, k\u00e4ivitab ta kogu torustiku uuesti.<\/li>\n<\/ul>\n<p>\nSelle t\u00f6\u00f6riista kasutamisel keskendutakse arendajate meeskonna poolt kaugklastri \u00fchiskasutusele. Sel juhul, kui m\u00f5ned kogumise ja testimise etapid on juba tehtud, kiirendab see kogu protsessi m\u00e4rkimisv\u00e4\u00e4rselt, kuna Garden suudab kasutada vahem\u00e4lus olevaid tulemusi.<\/p>\n<p>Projekti moodul v\u00f5ib olla konteiner, Maven-konteiner, Helm-chart, manifest <code>kubectl apply<\/code> v\u00f5i isegi OpenFaaS-funktsioon. Iga mooduli saab t\u00f5mmata kaug-Git-reposiidist. Moodul v\u00f5ib m\u00e4\u00e4ratleda (v\u00f5i mitte) teenused, \u00fclesanded ja testid. Teenustel ja \u00fclesannetel v\u00f5ivad olla s\u00f5ltuvused, mis v\u00f5imaldab m\u00e4\u00e4rata, millises j\u00e4rjekorras teenuseid edastada, \u00fclesandeid ja teste k\u00e4ivitada.<\/p>\n<p>Garden pakub kasutajale ilusat juhtpaneeli (hetkel <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/garden-io\/garden\/tree\/master\/dashboard\">katsefaasis<\/a><\/noindex>), kus kuvatakse projekti graaf: koostisosad, kogumise, \u00fclesannete ja testide j\u00e4rjekord, nende seosed ja s\u00f5ltuvused. Otseselt brauseris saab vaadata ka k\u00f5igi projekti komponentide logisid, kontrollida, mida see v\u00f5i teine komponent HTTP kaudu v\u00e4lja annab (kui selle jaoks on m\u00e4\u00e4ratud ingressi ressurss).<\/p>\n<p><img decoding=\"async\" alt=\"Rakenduste arendamise t\u00f6\u00f6riistad, mis k\u00e4ivitatakse Kuberneteses\" src=\"\/wp-content\/uploads\/2019\/08\/931b48a306fcce025e4dd8aa51d01552.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Garden paneel<\/i><\/p>\n<p>Sellel t\u00f6\u00f6riistal on ka kuumlaadimise re\u017eiim, mis lihtsalt s\u00fcnkroniseerib skriptide muudatused konteineriga klastris, kiirendades rakenduse silumisprotsessi mitu korda. Gardenil on hea <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.garden.io\/\">dokumentatsioon<\/a><\/noindex> ja mitte halb <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/garden-io\/garden\/tree\/master\/examples\">n\u00e4idiste kogum<\/a><\/noindex>, mis v\u00f5imaldab kiirelt kohanduda ja alustada kasutamist. \u00dctlen, et hiljuti avaldasime <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/459586\/\">artikli t\u00f5lge<\/a><\/noindex> selle autorite poolt.<\/p>\n<h2>Kokkuv\u00f5te<\/h2>\n<p>\nLoomulikult ei piirdu see loetelu rakenduste arendamise ja silumise t\u00f6\u00f6riistadega Kuberneteses. On veel palju kasulikke ja praktilisi t\u00f6\u00f6riistu, mis v\u00e4\u00e4rivad v\u00e4hemalt mainimist, kui mitte eraldi artiklit. R\u00e4\u00e4kige, mida teie kasutate, milliste probleemide ees olete seisnud ja kuidas te neid lahendasite!<\/p>\n<h2>P.S.<\/h2>\n<p>\nLugege ka meie blogist:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/460351\/\">werf \u2014 meie t\u00f6\u00f6riist CI\/CD jaoks Kuberneteses (\u00fclevaade ja video ettekandest)<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/459586\/\">Garden v0.10.0: Teie s\u00fclearvuti ei vaja Kuberneteset<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/446788\/\">Kubernetes tips &amp; tricks: about local development and Telepresence<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/436112\/\">The kubectl-debug plugin for debugging in Kubernetes pods.<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Allikas: <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\/et\/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=\"et_EE\" \/>\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\/et\/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\udd47T\u00f6\u00f6riistad Kuberneteses t\u00f6\u00f6tavate rakenduste arendajatele | ProHoster","description":"Kaasaegne l\u00e4henemine.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/instrumenty-dlya-razrabotchikov-prilozhenij-zapuskaemyh-v-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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\/et\/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\/et\/wp-json\/wp\/v2\/posts\/37475","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=37475"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/37475\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/28120"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=37475"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=37475"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=37475"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}