{"id":35006,"date":"2019-10-31T22:01:47","date_gmt":"2019-10-31T19:01:47","guid":{"rendered":"https:\/\/prohoster.info\/blog\/5-printsipov-zdravogo-smysla-dlya-sozdaniya-cloud-native-apps\/"},"modified":"2019-10-31T22:01:47","modified_gmt":"2019-10-31T19:01:47","slug":"5-printsipov-zdravogo-smysla-dlya-sozdaniya-cloud-native-apps","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/news\/5-printsipov-zdravogo-smysla-dlya-sozdaniya-cloud-native-apps","title":{"rendered":"5 otstarbekuse p\u00f5him\u00f5tet cloud-native rakenduste loomiseks","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>\u201ePilvep\u00f5hised\u201c (cloud native) v\u00f5i lihtsalt \u201epilve\u201c rakendused on loodud spetsiaalselt t\u00f6\u00f6tamiseks pilveinfrastruktuurides. Need ehitatakse tavaliselt kui n\u00f5rkade seostega mikroteenuste kogumid, mis on pakitud konteineritesse, mida omakorda haldab pilveplatvorm. Sellised rakendused on eeldusena valmis eba\u00f5nnestumisteks, mis t\u00e4hendab, et nad t\u00f6\u00f6tavad ja skaleeruvad usaldusv\u00e4\u00e4rselt isegi t\u00f5siste infrastruktuuri taseme rike korral. Tagak\u00fcljeks on piirangute kogum (lepingud), mida pilveplatvorm kehtestab konteinerirakendustele, et neid automaatselt hallata.<\/p>\n<p><img decoding=\"async\" alt=\"5 otstarbekuse p\u00f5him\u00f5tet cloud-native rakenduste loomiseks\" src=\"\/wp-content\/uploads\/2019\/06\/1f4af6f356ed36d3fbd8adef333501fa.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTeades v\u00e4ga h\u00e4sti pilverakenduste \u00fclemineku vajadust ja t\u00e4htsust, on paljud organisatsioonid endiselt teadmatuses, kust alustada. Selles postituses vaatleme mitmeid p\u00f5him\u00f5tteid, mille j\u00e4rgimine konteinerirakenduste arendamisel v\u00f5imaldab maksimeerida pilveplatvormide potentsiaali ning saavutada rakenduste usaldusv\u00e4\u00e4rne t\u00f6\u00f6 ja skaleerimine isegi t\u00f5siste IT-infrastruktuuri taseme rikke korral. Siin esitatud p\u00f5him\u00f5tete l\u00f5ppeesm\u00e4rk on \u00f5ppida looma rakendusi, mida pilveplatvormid, nagu Kubernetes, saavad automaatselt hallata.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Tarkvaraarenduse projekteerimise p\u00f5him\u00f5tted<\/h3>\n<p>\nProgrammeerimise maailmas m\u00f5istetakse p\u00f5him\u00f5tete all \u00fcsna \u00fcldiseid reegleid, mida tuleb j\u00e4rgida tarkvara arendamisel. Neid saab rakendada igasuguste programmeerimiskeelte t\u00f6\u00f6s. Igal p\u00f5him\u00f5ttel on oma eesm\u00e4rgid, mille saavutamise vahenditena toimivad tavaliselt malli- ja praktikad. Samuti on olemas rida alusm\u00f5tteid kvaliteetse tarkvara loomisel, millest tulenevad k\u00f5ik teised. Toome v\u00e4lja m\u00f5ned alusreeglid:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/KISS_(%D0%BF%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF)\">KISS<\/a><\/noindex> (Keep it simple, stupid) \u2013 mitte keeruliseks muuta;<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Don%E2%80%99t_repeat_yourself\">DRY<\/a><\/noindex> (Don\u2019t repeat yourself) \u2013 mitte korduda;<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/YAGNI\">YAGNI<\/a><\/noindex> (You aren\u2019t gonna need it) \u2013 mitte luua seda, mille j\u00e4rele ei ole vahetut vajadust;<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A0%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BE%D1%82%D0%B2%D0%B5%D1%82%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8\">SoC<\/a><\/noindex> (Separation of concerns) \u2013 jagada vastutusi.<\/li>\n<\/ul>\n<p>\nNagu n\u00e4ha, ei sea need p\u00f5him\u00f5tted mingeid konkreetseid reegleid, vaid kuuluvad nn tervet m\u00f5istust silmas pidavate kaalutluste klassi, mida jagavad paljud arendajad ning millele nad regulaarselt viitavad.<br \/>\nLisaks on olemas <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/SOLID_(%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)\">SOLID<\/a><\/noindex> \u2013 komplekt esimestest viiest objekti-orienteeritud programmeerimise ja disaini p\u00f5hiprintsiibist, mis on formuleeritud Robert Martin'i poolt. SOLID h\u00f5lmab \u00fcldisi ja avatud t\u00f5lgendusele vastavaid vastastikku toetavaid p\u00f5him\u00f5tteid, mis \u2013 kui neid rakendada koos \u2013 aitavad luua kvaliteetsemaid tarkvaras\u00fcsteeme ja paremini neid pikaajaliselt hooldada.<\/p>\n<p>SOLID printsiibid kuuluvad OOP valdkonda ja on formuleeritud selliste m\u00f5istete ja kontseptsioonide keeles nagu klassid, liidesed ja p\u00e4rimine. Samamoodi saab pilvep\u00f5histe rakenduste jaoks formuleerida arendusprintsiibid, kusjuures baas\u00fcksuseks pole klass, vaid konteiner. Nende p\u00f5him\u00f5tete j\u00e4rgimine v\u00f5imaldab luua konteinerirakendusi, mis vastavad paremini pilveplatvormide nagu Kubernetes eesm\u00e4rkidele ja \u00fclesannetele.<\/p>\n<h3>Pilvep\u00f5hised konteinerid: Red Hati l\u00e4henemine<\/h3>\n<p>\nT\u00e4nap\u00e4eval on konteineritesse suhteliselt lihtne pakendada praktiliselt iga rakendus. Kuid rakenduste t\u00f5husaks automatiseerimiseks ja orkestreerimiseks selliste pilveplatvormide nagu Kubernetes raames on vajalik t\u00e4iendav pingutus.<br \/>\nAllpool esitatud ideede aluseks on metodoloogia <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/SOLID_(%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)\">The Twelve-Factor App<\/a><\/noindex> ja paljud muud t\u00f6\u00f6d erinevate veebi\u00e4ride loomise aspektide kohta, alates l\u00e4htekoodi haldusest kuni skaleerimismudeliteni. Kirjeldatud p\u00f5him\u00f5tted kehtivad ainult konteinerirakenduste arendamise kohta, mis on ehitatud mikroteenuste alusel ja m\u00f5eldud pilveplatvormidele nagu Kubernetes. Meie arutluste baas\u00fcksuseks on konteineri pilt, ja konteinerite sihtkeskkonnana m\u00f5istetakse konteinerite orkestreerimisplatvormi. Pakutud p\u00f5him\u00f5tete eesm\u00e4rk on luua konteinerid, mille puhul enamikus orkestreerimisplatvormides on v\u00f5imalik automatiseerida s\u00f5idukite jaotamist (scheduling \u2013 hosti valimine konteineriexemplari k\u00e4ivitamiseks), skaleerimist ja j\u00e4lgimist. P\u00f5him\u00f5tted esitatakse suvalises j\u00e4rjekorras.<\/p>\n<h3>\u00dche vastutuse printsiip (Single Concern Principle, SCP)<\/h3>\n<p>\nSee printsiip on paljuski sarnane \u00fche vastutuse printsiibiga (Single Responsibility Principle, <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9F%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF_%D0%B5%D0%B4%D0%B8%D0%BD%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%BE%D1%82%D0%B2%D0%B5%D1%82%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8\">SRP<\/a><\/noindex>), mis on SOLIDi osa ja \u00fctleb, et igal objektil peaks olema \u00fcks vastutus, mis peab olema t\u00e4ielikult kapseldatud klassis. SRP olemus seisneb selles, et iga vastutus on muutuste p\u00f5hjus ja klassil peaks olema vaid \u00fcks muudetav p\u00f5hjus.<\/p>\n<p>SCP puhul kasutame s\u00f5na \u201emure\u201d (concern) juhtumite t\u00e4histamiseks, et viidata k\u00f5rgemale abstraktsiooni tasemele ja laiemale container'ite m\u00e4\u00e4ratlemisele v\u00f5rreldes OOP-kliendiga. Ja kui SRP eesm\u00e4rk on omada vaid \u00fchte muutuste p\u00f5hjust, siis SCP taga on soov suurendada container'ite taaskasutusv\u00f5imet ja asendatavust. J\u00e4rgides SRP-d ja luues container'i, mis lahendab \u00fche ja ainukese \u00fclesande ning teeb seda funktsionaalselt l\u00f5peva viisina, suurendate v\u00f5imalusi selle container'i kujutise taaskasutamiseks erinevates rakenduse kontekstides.<\/p>\n<p>SCP printsiip \u00fctleb, et iga container peab lahendama ainult \u00fche \u00fclesande ja tegema seda h\u00e4sti. SCP container'ite maailmas saavutatakse kergemini kui SRP OOP maailmas, kuna container'id t\u00e4idavad tavaliselt \u00fchte protsessi ja suure osa ajast lahendab see \u00fche ja ainukese \u00fclesande.<\/p>\n<p>Kui m\u00f5ni container mikroteenus peab lahendama korraga mitu \u00fclesannet, siis saab selle jagada \u00fchekordseteks container'iteks ja kokku liita \u00fche pod'i (container platvormi juurutamise \u00fcksus) raames sidecar'i ja init-container'ite mallide abil. Lisaks lihtsustab SCP vanade container'ite (nt veebiserveri v\u00f5i s\u00f5numite vahetaja) asendamist uuega, mis lahendab sama \u00fclesande, kuid omab laiemat funktsionaalsust v\u00f5i paremat skaleeritavust.<\/p>\n<p><img decoding=\"async\" alt=\"5 otstarbekuse p\u00f5him\u00f5tet cloud-native rakenduste loomiseks\" src=\"\/wp-content\/uploads\/2019\/06\/a029e1ca36ace66550c94087e4aecc8e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>K\u00f5rge j\u00e4lgitavuse printsiip (High Observability Principle, HOP)<\/h3>\n<p>\nKonteinerite kasutamisel kui \u00fchtsete rakenduste pakendamise ja k\u00e4ivitamise viiside puhul k\u00e4sitletakse rakendusi endid kui \"mustade kaste\". Siiski, kui need on pilvep\u00f5hised konteinerid, peavad nad pakkuma k\u00e4itamise keskkonnale erilise API, et kontrollida konteinerite t\u00f6\u00f6kindlust ja vajadusel v\u00f5tta vastavaid meetmeid. Ilma selleta pole v\u00f5imalik automatiseerida konteinerite uuendamist ja nende eluts\u00fckli haldamist, mis omakorda halvendab tarkvaras\u00fcsteemi usaldusv\u00e4\u00e4rsust ja kasutusmugavust.<\/p>\n<p><img decoding=\"async\" alt=\"5 otstarbekuse p\u00f5him\u00f5tet cloud-native rakenduste loomiseks\" src=\"\/wp-content\/uploads\/2019\/06\/7df1320108d9b635c10c6cf41d5dfef6.jpg\" style=\"display:block;margin: 0 auto;\" \/> <br \/>\nPraktikas peaks konteinerirakendus v\u00e4hemalt omama API-d erinevate t\u00f6\u00f6kindluse kontrollide jaoks: aktiivsuse testid (liveness) ja valmisoleku testid (readiness). Kui rakendus v\u00e4idab end olevat rohkem, peaks see pakkuma ka teisi vahendeid oma oleku kontrollimiseks. N\u00e4iteks oluliste s\u00fcndmuste logimise kaudu STDERR ja STDOUT, et koguda logisid nagu Fluentd, Logstash ja teised sarnased t\u00f6\u00f6riistad. Samuti tuleks integreerida j\u00e4lgimis- ja m\u00f5\u00f5tmisraamatukogud, nagu OpenTracing, Prometheus jne.<\/p>\n<p>\u00dcldiselt v\u00f5ib rakendust endiselt k\u00e4sitleda kui \"must kaste\", kuid samas tuleb seda varustada k\u00f5ikide API-dega, mis on vajalikud platvormi jaoks, et j\u00e4lgida ja hallata seda parimal v\u00f5imalikult viisil.<\/p>\n<h3>Eluts\u00fckli kohandamise p\u00f5him\u00f5te (Life-cycle Conformance Principle, LCP)<\/h3>\n<p>\nLCP on HOPi vastand. Kui HOP \u00fctleb, et konteiner peab pakkuma platvormile API-d lugemiseks, siis LCP n\u00f5uab rakendustelt v\u00f5imet vastu v\u00f5tta teavet platvormilt. Samuti peab konteiner mitte ainult saama s\u00fcndmusi, vaid ka neile kohanduma, ehk reageerima. Seet\u00f5ttu on selle p\u00f5him\u00f5tte nimetus, mida v\u00f5ib pidada n\u00f5udmiseks, et platvormile tuleks pakkuda API-d kirjutamiseks.<\/p>\n<p><img decoding=\"async\" alt=\"5 otstarbekuse p\u00f5him\u00f5tet cloud-native rakenduste loomiseks\" src=\"\/wp-content\/uploads\/2019\/06\/f32f5d133597ae3905206badc6677f92.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nPlatvormidel on erinevat t\u00fc\u00fcpi s\u00fcndmused, mis aitavad konteineri eluts\u00fcklit hallata. Kuid see, milliseid neist vastu v\u00f5tta ja kuidas reageerida, peaks otsustama rakendus ise.<\/p>\n<p>On selge, et m\u00f5ned s\u00fcndmused on olulisemad kui teised. N\u00e4iteks, kui rakendus talub halvasti ootamatut sulgemist, peab see vastu v\u00f5tma signaale signal: terminate (SIGTERM) ja v\u00f5imalikult kiiresti algatama sulgemisprotseduuri, et j\u00f5uda enne signaali signal: kill (SIGKILL), mis tuleb p\u00e4rast SIGTERM-i.<\/p>\n<p>Lisaks v\u00f5ivad rakenduse eluts\u00fckli jaoks olla olulised sellised s\u00fcndmused nagu PostStart ja PreStop. N\u00e4iteks v\u00f5ib rakendusel p\u00e4rast k\u00e4ivitamist olla vajalik teatud aeg 'soojendamiseks', enne kui see suudab vastata p\u00e4ringutele. V\u00f5i peab rakendus erilisel viisil vabastama ressursse, kui see l\u00f5petab t\u00f6\u00f6.<\/p>\n<h3>Konteineripildi muutumatuse p\u00f5him\u00f5te (Image Immutability Principle, IIP)<\/h3>\n<p>\n\u00dcldiselt arvatakse, et konteenirakendused peavad p\u00e4rast ehitamist j\u00e4\u00e4ma muutumatuks, isegi kui need k\u00e4ivitatakse erinevates keskkondades. Seet\u00f5ttu tuleneb vajadus eksterneerida andmete salvestamine toimimise etapis (teisis\u00f5nu, kasutada selleks v\u00e4liseid vahendeid) ja toetuda v\u00e4listele, konkreetse t\u00e4itmisreegliga kohandatud seadistustele, selle asemel et modifitseerida v\u00f5i luua ainulaadseid konteinereid iga keskkonna jaoks. P\u00e4rast rakenduses tehtud muudatusi tuleb konteineripilt uuesti ehitada ja juurutada k\u00f5igis kasutatavates keskkondades. Muide, IT-s\u00fcsteemide haldamisel kasutatakse sarnast p\u00f5him\u00f5tet, mida tuntakse serverite ja infrastruktuuri muutumatuse p\u00f5him\u00f5ttena. <\/p>\n<p>IIP eesm\u00e4rk on \u00e4ra hoida eraldi konteineripiltide loomist erinevate t\u00e4itmisreeglite jaoks ja kasutada \u00fchesugust pilti koos vastava seadistusega konkreetsele keskkonnale. Selle p\u00f5him\u00f5tte j\u00e4rgimine v\u00f5imaldab rakendada selliseid olulisi automaatika praktikaid pilves\u00fcsteemide jaoks nagu rakenduse uuenduste tagasiv\u00f5tmine (roll-back) ja edasi veeretamine (roll-forward).<\/p>\n<p><img decoding=\"async\" alt=\"5 otstarbekuse p\u00f5him\u00f5tet cloud-native rakenduste loomiseks\" src=\"\/wp-content\/uploads\/2019\/06\/86b93724830b37f82bf289b797407480.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Protsesside \u00fchekordsuse p\u00f5him\u00f5te (Process Disposability Principle, PDP)<\/h3>\n<p>\n\u00dcks konteineri olulisemaid omadusi on selle efemeersus: konteineri eksemplari loomine on lihtne ja sama lihtne on see h\u00e4vitada, seega saab selle igal ajal lihtsalt asendada teise eksemplariga. Selliseks asendamiseks v\u00f5ib olla palju p\u00f5hjuseid: edukuse testi l\u00e4bikukkumine, rakenduse skaleerimine, \u00fcle viimine teisele hostile, platvormi ressursside ammendumine v\u00f5i muud olukorrad. <\/p>\n<p><img decoding=\"async\" alt=\"5 otstarbekuse p\u00f5him\u00f5tet cloud-native rakenduste loomiseks\" src=\"\/wp-content\/uploads\/2019\/06\/858287b23c276363313e35cf18b81190.jpg\" style=\"display:block;margin: 0 auto;\" \/> <br \/>\nSeet\u00f5ttu peavad konteinerirakendused oma olekut s\u00e4ilitama mingi v\u00e4lise vahendi kaudu v\u00f5i kasutama selleks sisemisi jaotatud skeeme koos varundamisega. Lisaks peab rakendus kiiresti k\u00e4ivituma ja kiiresti l\u00f5petama ning olema valmis ootamatuks kriitiliseks riistvara t\u00f5rkeks.<\/p>\n<p>\u00dcks praktika, mis aitab seda p\u00f5him\u00f5tet rakendada, on luua v\u00e4ikese suurusega konteinerid. Pilvemahud saavad automaatselt valida hosti, et k\u00e4ivitada konteinerimudelit, seega mida v\u00e4iksem on konteineri suurus, seda kiiremini see k\u00e4ivitub \u2013 see kopeeritakse lihtsalt kiiremini sihthostile v\u00f5rgu kaudu.<\/p>\n<h3>Iseseisvuse p\u00f5him\u00f5te (Self-containment Principle, S-CP)<\/h3>\n<p>\nSelle p\u00f5him\u00f5tte kohaselt sisaldab konteiner oma ehitusetapis k\u00f5iki vajalikke komponente. Konteinerit tuleb ehitada eeldusel, et s\u00fcsteemis on vaid puhas Linuxi kerneli, seega k\u00f5ik vajalikud lisaraamatukogud tuleb paigutada konteinerisse. Seal peaksid olema ka sellised asjad nagu vastava programmeerimiskeele t\u00f6\u00f6tlemisv\u00f5ime, rakenduste platvorm (vajadusel) ja muud s\u00f5ltuvused, mis on vajalikud konteinerirakenduse t\u00f6\u00f6ks. <\/p>\n<p><img decoding=\"async\" alt=\"5 otstarbekuse p\u00f5him\u00f5tet cloud-native rakenduste loomiseks\" src=\"\/wp-content\/uploads\/2019\/06\/ecc7425510d63e4914c0c9a7e90b02a6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Erandid tehakse vaid konfiguratsioonide jaoks, mis varieeruvad keskkonnast keskkonda ja peavad olema esitatud jooksvalt, n\u00e4iteks l\u00e4bi Kubernetes ConfigMap.<\/p>\n<p>Rakendus v\u00f5ib sisaldada mitmeid konteineriseeritud komponente, n\u00e4iteks eraldi andmebaasi konteiner konteineritest koosneva veebi rakenduse sees. Vastavalt S-CP p\u00f5him\u00f5ttele ei tohi neid konteinerid kokku liita, vaid tuleb teha nii, et andmebaasi konteiner sisaldab k\u00f5ike vajalikku andmebaasi t\u00f6\u00f6ks ning veebi rakenduse konteiner \u2013 k\u00f5ike vajalikku veebi rakenduse t\u00f6\u00f6ks, sealhulgas veebiserverit. Selle tulemusena s\u00f5ltub veebi rakenduse konteiner jooksvalt andmebaasi konteinerist ja p\u00f6\u00f6rdub selle poole vajadusel.<\/p>\n<h3>Jooksuaegne piirangup\u00f5him\u00f5te (Runtime Confinement Principle, RCP)<\/h3>\n<p>\nS-CP p\u00f5him\u00f5te m\u00e4\u00e4ratleb, kuidas konteiner peab olema kokku pandud ja mida peab sisaldama binaarfaili pilt. Kuid konteiner ei ole lihtsalt \"must kast\", millel on ainult \u00fcks omadus \u2013 faili suurus. K\u00e4itamise ajal omandab konteiner ka teisi m\u00f5\u00f5tmeid: kasutatava m\u00e4lu maht, protsessori aeg ja muud s\u00fcsteemiressursid.<\/p>\n<p><img decoding=\"async\" alt=\"5 otstarbekuse p\u00f5him\u00f5tet cloud-native rakenduste loomiseks\" src=\"\/wp-content\/uploads\/2019\/06\/a52e6a656892e57479ac014a3e6f4316.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSiin tuleb m\u00e4ngu RCP p\u00f5him\u00f5te, mille kohaselt peab konteiner dekapeerima oma n\u00f5udmised s\u00fcsteemiressursside osas ja edastama need platvormile. Kui igal konteineril on ressursi profiil (kui palju tal on vaja CPU, m\u00e4lu, v\u00f5rgu ja salvestuss\u00fcsteemi ressursse), saab platvorm optimaalselt teostada haldamist ja automaatset skaleerimist, juhtida IT-j\u00f5udlust ja toetada SLA tasemeid konteineritele.<\/p>\n<p>Lisaks konteineri ressursin\u00f5uete rahuldamisele on rakendusele oluline mitte \u00fcletada enda m\u00e4\u00e4ratud piire. Vastasel juhul, kui ressursse on puudus, on platvormil suurem t\u00f5en\u00e4osus lisada see rakenduste nimekirja, mida tuleb katkestada v\u00f5i migreerida.<\/p>\n<p>R\u00e4\u00e4kides pilvenakkuslikust fookusest, m\u00f5tleme me k\u00f5igepealt t\u00f6\u00f6tamise viisi. <br \/>\n\u00dclalpool oleme t\u00f6\u00f6tanud v\u00e4lja mitmeid \u00fcldp\u00f5him\u00f5tteid, mis m\u00e4\u00e4ratlevad metodoloogilise aluse kvaliteetsete konteinerite rakenduste loomiseks pilvekeskkondades.<\/p>\n<p>Mainime, et lisaks neile \u00fcldp\u00f5him\u00f5tetele on teil ka vaja t\u00e4iendavaid arenenud meetodeid ja tehnikaid konteineritega t\u00f6\u00f6tamiseks. Samuti on meil m\u00f5ned l\u00fchikesed soovitused, mis on spetsiifilisemat laadi ja mida tuleb rakendada (v\u00f5i mitte rakendada) olukorrast s\u00f5ltuvalt:<\/p>\n<ul>\n<li>P\u00fc\u00fcdke v\u00e4hendada piltide suurust: kustutage ajutised failid ja \u00e4rge installige liigseid pakette \u2013 mida v\u00e4iksem on konteiner, seda kiiremini see koostatakse ja edastatakse sihthostile v\u00f5rgu kaudu.<\/li>\n<li>J\u00e4rgige juhuslikke User-ID\u2019sid: \u00e4rge kasutage k\u00e4sku sudo ega mingit erilist userid oma konteinerite k\u00e4itamiseks.<\/li>\n<li>M\u00e4rgistage olulised pordid: portaide numbreid saab m\u00e4\u00e4rata ka t\u00f6\u00f6tamise ajal, kuid parem on need m\u00e4\u00e4rata EXPOSE k\u00e4su abil \u2013 teistel inimestel ja programmide jaoks on lihtsam kasutada teie pilte. <\/li>\n<li>Salvestage p\u00fcsivaid andmeid mahutites: andmed, mis peavad p\u00e4rast konteineri h\u00e4vitamist alles j\u00e4\u00e4ma, tuleb salvestada mahutitesse.<\/li>\n<li>T\u00e4itke pildi metaandmed: sildid, m\u00e4rgid ja annotatsioonid lihtsustavad piltide kasutamist \u2013 teised arendajad aitavad teid t\u00e4nada.<\/li>\n<li>S\u00fcnkroonige host ja pildid: m\u00f5ned konteinerirakendused vajavad konteineri s\u00fcnkroonimist hostiga teatud atribuutide, n\u00e4iteks aja v\u00f5i masina ID j\u00e4rgi.<\/li>\n<li>Kokkuv\u00f5tteks jagame malle ja parimaid praktikaid, mis aitavad t\u00f5husamalt rakendada eespool mainitud p\u00f5him\u00f5tteid:<br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/www.slideshare.net\/luebken\/container-patterns\">www.slideshare.net\/luebken\/container-patterns<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.docker.com\/engine\/userguide\/eng-image\/dockerfile_best-practices\">docs.docker.com\/engine\/userguide\/eng-image\/dockerfile_best-practices<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"http:\/\/docs.projectatomic.io\/container-best-practices\">docs.projectatomic.io\/container-best-practices<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.openshift.com\/enterprise\/3.0\/creating_images\/guidelines.html\">docs.openshift.com\/enterprise\/3.0\/creating_images\/guidelines.html<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/www.usenix.org\/system\/files\/conference\/hotcloud16\/hotcloud16_burns.pdf\">www.usenix.org\/system\/files\/conference\/hotcloud16\/hotcloud16_burns.pdf<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/leanpub.com\/k8spatterns\/\">leanpub.com\/k8spatterns<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/12factor.net\/\">12factor.net<\/a><\/noindex><\/li>\n<\/ul>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/events.redhat.com\/profile\/form\/index.cfm?intcmp=701f20000012s47AAA&amp;PKFormID=0x5789474c4\"><b>Veebinar OpenShift Container Platformi uue versiooni kohta \u2013 4<\/b><\/a><\/noindex><br \/>\n11. juuni kell 11.00<\/p>\n<p>Mida te \u00f5ppida saate:<\/p>\n<ul>\n<li>Immutable Red Hat Enterprise Linux CoreOS<\/li>\n<li>OpenShift teenuse mesh<\/li>\n<li>Operator raamistik<\/li>\n<li>Knative raamistik<\/li>\n<\/ul>\n<p>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/redhatrussia\/blog\/455024\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u00ab\u041e\u0431\u043b\u0430\u0447\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435\u00bb (cloud native) \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u00ab\u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0435\u00bb \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0445. \u041e\u0431\u044b\u0447\u043d\u043e \u043e\u043d\u0438 \u0441\u0442\u0440\u043e\u044f\u0442\u0441\u044f \u043a\u0430\u043a \u043d\u0430\u0431\u043e\u0440 \u0441\u043b\u0430\u0431\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u043e\u0439. \u0422\u0430\u043a\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0433\u043e\u0442\u043e\u0432\u044b \u043a \u0441\u0431\u043e\u044f\u043c, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u043d\u0430\u0434\u0435\u0436\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u044b\u0445 \u043e\u0442\u043a\u0430\u0437\u0430\u0445 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f. \u041e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u043c\u0435\u0434\u0430\u043b\u0438 \u2013 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":26340,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-35006","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u00ab\u041e\u0431\u043b\u0430\u0447\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435\u00bb (cloud native) \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u00ab\u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0435\u00bb \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0445.\" \/>\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\/news\/5-printsipov-zdravogo-smysla-dlya-sozdaniya-cloud-native-apps\" \/>\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\udd475 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u0432 \u0437\u0434\u0440\u0430\u0432\u043e\u0433\u043e \u0441\u043c\u044b\u0441\u043b\u0430 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f cloud-native apps | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u00ab\u041e\u0431\u043b\u0430\u0447\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435\u00bb (cloud native) \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u00ab\u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0435\u00bb \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0445.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/news\/5-printsipov-zdravogo-smysla-dlya-sozdaniya-cloud-native-apps\" \/>\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:01:47+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:01:47+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\udd475 m\u00f5istlikku p\u00f5him\u00f5tet pilvep\u00f5histe rakenduste loomiseks | ProHoster","description":"\u201ePilvep\u00f5hised\u201c (cloud native) v\u00f5i lihtsalt \u201epilves\u201c rakendused on loodud spetsiaalselt t\u00f6\u00f6tamiseks pilve infrastruktuurides.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/news\/5-printsipov-zdravogo-smysla-dlya-sozdaniya-cloud-native-apps","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\udd475 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u0432 \u0437\u0434\u0440\u0430\u0432\u043e\u0433\u043e \u0441\u043c\u044b\u0441\u043b\u0430 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f cloud-native apps | ProHoster","og:description":"\u00ab\u041e\u0431\u043b\u0430\u0447\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435\u00bb (cloud native) \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u00ab\u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0435\u00bb \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0445.","og:url":"https:\/\/prohoster.info\/et\/blog\/news\/5-printsipov-zdravogo-smysla-dlya-sozdaniya-cloud-native-apps","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:01:47+00:00","article:modified_time":"2019-10-31T19:01:47+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"35006","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-21 21:27:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:11:30","updated":"2026-01-21 21:27:19","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\/35006","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=35006"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/35006\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/26340"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=35006"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=35006"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=35006"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}