{"id":79153,"date":"2020-04-24T19:42:43","date_gmt":"2020-04-24T17:42:43","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/istoriya-sozdaniya-oblachnogo-servisa-pripravlennaya-kiberpankom"},"modified":"2020-04-24T19:42:43","modified_gmt":"2020-04-24T17:42:43","slug":"istoriya-sozdaniya-oblachnogo-servisa-pripravlennaya-kiberpankom","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/istoriya-sozdaniya-oblachnogo-servisa-pripravlennaya-kiberpankom","title":{"rendered":"Pr\u00edbeh vzniku cloudovej slu\u017eby, ochuten\u00fd kyberpunkom","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Pr\u00edbeh vzniku cloudovej slu\u017eby, ochuten\u00fd kyberpunkom\" src=\"\/wp-content\/uploads\/2020\/04\/d1cad1dfa3513b5794c7be916a9dbb4b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>S rastom sk\u00fasenost\u00ed v IT za\u010d\u00edna\u0161 vn\u00edma\u0165, \u017ee syst\u00e9my maj\u00fa svoj charakter. M\u00f4\u017eu by\u0165 poddajn\u00e9, tich\u00e9, v\u00fdstredn\u00e9, pr\u00edsne. M\u00f4\u017eu \u0165a pril\u00e1ka\u0165 alebo odradi\u0165. Tak \u010di onak, treba sa s nimi \"dohodn\u00fa\u0165\", man\u00e9vrova\u0165 medzi \"nebezpe\u010dn\u00fdmi miestami\" a vybudova\u0165 re\u0165azce ich interakci\u00ed.<\/p>\n<p><\/p>\n<p>Tak n\u00e1m bola zveren\u00e1 \u010des\u0165 vybudova\u0165 cloudov\u00fa platformu, a na to bolo potrebn\u00e9 \"presved\u010di\u0165\" p\u00e1r pod syst\u00e9mov, aby s nami spolupracovali. Na\u0161\u0165astie m\u00e1me \"jazyk API\", zru\u010dn\u00e9 ruky a kopu nad\u0161enia. <\/p>\n<p><\/p>\n<p>V tomto \u010dl\u00e1nku nebude technick\u00fd hardcore, ale bude popis probl\u00e9mov, s ktor\u00fdmi sme sa stretli pri budovan\u00ed cloudu. Rozhodol som sa pop\u00edsa\u0165 na\u0161u cestu formou \u013eahkej technickej fant\u00e1zie o tom, ako sme h\u013eadali spolo\u010dn\u00fd jazyk so syst\u00e9mami a \u010do z toho vzi\u0161lo. <\/p>\n<p><\/p>\n<p>Vitajte pod \u010dl\u00e1nkom.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><\/p>\n<h3 id=\"nachalo-puti\">Za\u010diatok cesty<\/h3>\n<p><\/p>\n<p>Pred \u010dasom bola pred na\u0161\u00edm t\u00edmom stanoven\u00e1 \u00faloha - spusti\u0165 cloudov\u00fa platformu pre na\u0161ich klientov. Mali sme podporu vedenia, zdroje, hardv\u00e9rov\u00fd stack a slobodu pri v\u00fdbere technol\u00f3gi\u00ed na realiz\u00e1ciu softv\u00e9rovej \u010dasti slu\u017eby.<\/p>\n<p><\/p>\n<p>Taktie\u017e existoval rad po\u017eiadaviek:<\/p>\n<p><\/p>\n<ul>\n<li>slu\u017ebe je potrebn\u00fd pohodln\u00fd osobn\u00fd \u00fa\u010det;<\/li>\n<li>platforma mus\u00ed by\u0165 integrovan\u00e1 do existuj\u00faceho syst\u00e9mu faktur\u00e1cie;<\/li>\n<li>softv\u00e9rovo-hardv\u00e9rov\u00e1 \u010das\u0165: OpenStack + Tungsten Fabric (Open Contrail), ktor\u00e9 na\u0161i in\u017einieri nau\u010dili dostato\u010dne dobre \"pripravova\u0165\".<\/li>\n<\/ul>\n<p><\/p>\n<p>O tom, ako sa t\u00edm zhroma\u017edil, vyv\u00edjal rozhranie osobn\u00e9ho \u00fa\u010dtu a prij\u00edmal dizajn\u00e9rske rozhodnutia, sa zmienime inokedy, ak bude z\u00e1ujem zo strany komunity Habr.<br \/>\nN\u00e1stroje, ktor\u00e9 sme sa rozhodli pou\u017ei\u0165:<\/p>\n<p><\/p>\n<ul>\n<li>Python + Flask + Swagger + SQLAlchemy - celkom \u0161tandardn\u00e1 sada Pythonu;<\/li>\n<li>Vue.js pre front-end;<\/li>\n<li>interakciu medzi komponentami a slu\u017ebami sme sa rozhodli realizova\u0165 pomocou Celery nad AMQP.<\/li>\n<\/ul>\n<p><\/p>\n<p>Predv\u00eddam ot\u00e1zky o v\u00fdbere Pythonu, vysvetl\u00edm. Jazyk si na\u0161iel svoje miesto v na\u0161ej spolo\u010dnosti a okolo neho sa vytvorila mal\u00e1, ale predsa len kult\u00fara. Preto sa rozhodlo za\u010da\u0165 budova\u0165 slu\u017ebu pr\u00e1ve na \u0148om. O to viac, \u017ee r\u00fdchlos\u0165 v\u00fdvoja v tak\u00fdchto \u00faloh\u00e1ch \u010dasto rozhoduje. <\/p>\n<p><\/p>\n<p>Tak za\u010dneme na\u0161e zozn\u00e1menie.<\/p>\n<p><\/p>\n<h3 id=\"molchalivyy-bill--billing\">Tich\u00fd Bill - faktur\u00e1cia<\/h3>\n<p><\/p>\n<p><em>S t\u00fdmto chlapcom sme sa poznali u\u017e d\u00e1vno. V\u017edy sedel ved\u013ea a nie\u010do potichu po\u010d\u00edtal. Niekedy n\u00e1m posielal po\u017eiadavky pou\u017e\u00edvate\u013eov, vystavoval fakt\u00fary a spravoval slu\u017eby. Be\u017en\u00fd pracovit\u00fd chlapec. Pravda, mali sme probl\u00e9my. Bol tich\u00fd, niekedy zamyslen\u00fd a \u010dasto mal svoje vlastn\u00e9 my\u0161lienky.<\/em><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Pr\u00edbeh vzniku cloudovej slu\u017eby, ochuten\u00fd kyberpunkom\" src=\"\/wp-content\/uploads\/2020\/04\/262bb5c9d6234041d264f8e041e647fe.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Billing je prv\u00fd syst\u00e9m, s ktor\u00fdm sme sa sna\u017eili skamar\u00e1ti\u0165. A prv\u00e1 \u0165a\u017ekos\u0165 sa n\u00e1m objavila pri spracovan\u00ed slu\u017eieb.<\/p>\n<p><\/p>\n<p>Napr\u00edklad, ke\u010f sa vytv\u00e1ra alebo odstra\u0148uje \u00faloha, dostane sa do intern\u00e9ho frontu billing syst\u00e9mu. Takto je realizovan\u00fd syst\u00e9m asynchr\u00f3nnej pr\u00e1ce so slu\u017ebami. Na spracovanie na\u0161ich typov slu\u017eieb sme museli \u201eprid\u00e1va\u0165\u201c na\u0161e \u00falohy do tohto frontu. Tu sme sa stretli s probl\u00e9mom: nedostatok dokument\u00e1cie. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Pr\u00edbeh vzniku cloudovej slu\u017eby, ochuten\u00fd kyberpunkom\" src=\"\/wp-content\/uploads\/2020\/04\/4d96251df014e315308c94f848bc6cd0.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>S\u00fadz\u0105c pod\u013ea popisu programov\u00e9ho API, t\u00fato \u00falohu je predsa mo\u017en\u00e9 vyrie\u0161i\u0165, ale nemali sme \u010das na reverzn\u00e9 in\u017einierstvo, preto sme vyviedli logiku von a zorganizovali front \u00faloh nad RabbitMQ. Oper\u00e1cia nad slu\u017ebou je iniciovan\u00e1 klientom z osobn\u00e9ho \u00fa\u010dtu, zabal\u00ed sa do \u201e\u00falohy\u201c Celery na backend a vykon\u00e1va sa na strane billing syst\u00e9mu a OpenStacku. Celery umo\u017e\u0148uje celkom pohodlne spravova\u0165 \u00falohy, organizova\u0165 opakovania a sledova\u0165 stav. O \u201ecelery\u201c si m\u00f4\u017eete pre\u010d\u00edta\u0165 napr\u00edklad <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/oleg-bunin\/blog\/433476\/\">tu<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Takisto billing nezastavil projekt, ktor\u00e9mu do\u0161li peniaze. Komunikuj\u00fac s v\u00fdvoj\u00e1rmi, sme zistili, \u017ee pri po\u010d\u00edtan\u00ed pod\u013ea \u0161tatistiky (a n\u00e1m je potrebn\u00e9 implementova\u0165 presne tak\u00fa logiku) existuje zlo\u017eit\u00e1 s\u00favislos\u0165 pravidiel zastavenia. Ale tieto modely sa zle prisp\u00f4sobuj\u00fa na\u0161im realit\u00e1m. Takisto sme to realizovali prostredn\u00edctvom \u00faloh na Celery, preberaj\u00fac logiku spr\u00e1vy slu\u017eieb na backend. <\/p>\n<p><\/p>\n<p>Obe vy\u0161\u0161ie uveden\u00e9 probl\u00e9my viedli k tomu, \u017ee k\u00f3d sa trochu naf\u00fakol a v bud\u00facnosti budeme musie\u0165 vykona\u0165 refaktoring, aby sme vyviedli logiku pr\u00e1ce s \u00falohami do samostatnej slu\u017eby. Taktie\u017e mus\u00edme uchov\u00e1va\u0165 \u010das\u0165 inform\u00e1ci\u00ed o pou\u017e\u00edvate\u013eoch a ich slu\u017eb\u00e1ch vo vlastn\u00fdch tabu\u013ek\u00e1ch, aby sme t\u00fato logiku podporovali.<\/p>\n<p><\/p>\n<p>E\u0161te jeden probl\u00e9m \u2014 ml\u010danlivos\u0165.<\/p>\n<p><\/p>\n<p>Na niektor\u00e9 po\u017eiadavky na API Billing ml\u010dky reaguje \u201eOk\u201c. Tak to bolo napr\u00edklad, ke\u010f sme robili prip\u00edsania s\u013eubovan\u00fdch platieb po\u010das testu (o \u0148om nesk\u00f4r). Po\u017eiadavky boli spr\u00e1vne vykonan\u00e9 a nevideli sme \u017eiadne chyby. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Pr\u00edbeh vzniku cloudovej slu\u017eby, ochuten\u00fd kyberpunkom\" src=\"\/wp-content\/uploads\/2020\/04\/d03f2c381fd39dbf33f2a0c3eeb1294d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Musel som \u0161tudova\u0165 logy, zatia\u013e \u010do som pracoval so syst\u00e9mom cez UI. Uk\u00e1zalo sa, \u017ee samotn\u00fd billing vykon\u00e1va podobn\u00e9 dotazy, men\u00ed scope na konkr\u00e9tneho u\u017e\u00edvate\u013ea, napr\u00edklad admina, odovzd\u00e1val ho v parametre su.<\/p>\n<p><\/p>\n<p>Celkovo, aj napriek medzer\u00e1m v dokument\u00e1cii a drobn\u00fdm nedostatkom API, v\u0161etko prebehlo dos\u0165 dobre. Logy sa daj\u00fa \u010d\u00edta\u0165 aj pri vysokom za\u0165a\u017een\u00ed, ak pochop\u00edte, ako s\u00fa usporiadan\u00e9 a \u010do treba h\u013eada\u0165. \u0160trukt\u00fara datab\u00e1zy je zlo\u017eit\u00e1, ale celkom logick\u00e1 a v nie\u010dom dokonca atrakt\u00edvna.<\/p>\n<p><\/p>\n<p>Tak\u017ee, s\u010d\u00edtaj\u00fac, hlavn\u00e9 probl\u00e9my, ktor\u00e9 sme mali po\u010das interakcie, s\u00favisia s osobitos\u0165ami implement\u00e1cie konkr\u00e9tneho syst\u00e9mu: <\/p>\n<p><\/p>\n<ul>\n<li>nedokumentovan\u00e9 \u201efunkcie\u201c, ktor\u00e9 n\u00e1s viac \u010di menej ovplyvnili;<\/li>\n<li>uzavret\u00e9 zdrojov\u00e9 k\u00f3dy (billing je nap\u00edsan\u00fd v C++), \u010do znamen\u00e1, \u017ee nem\u00f4\u017eeme probl\u00e9m 1 vyrie\u0161i\u0165 nijako inak, len \u201emet\u00f3dou pokusov a omylov\u201c.<\/li>\n<\/ul>\n<p><\/p>\n<p>Na\u0161\u0165astie, produkt m\u00e1 dos\u0165 \u0161irok\u00fd API a integrovali sme do svojho osobn\u00e9ho kabinetu nasleduj\u00face podsyst\u00e9my:<\/p>\n<p><\/p>\n<ul>\n<li>modul technickej podpory \u2013 po\u017eiadavky z osobn\u00e9ho kabinetu s\u00fa \u201eproxyovan\u00e9\u201c do billingu transparentne pre klientov slu\u017eby;<\/li>\n<li>finan\u010dn\u00fd modul \u2013 umo\u017e\u0148uje vystavova\u0165 fakt\u00fary s\u00fa\u010dasn\u00fdm klientom, vykon\u00e1va\u0165 odpo\u010dty a generova\u0165 platobn\u00e9 dokumenty;<\/li>\n<li>modul spr\u00e1vy slu\u017eieb \u2013 pre neho sme museli implementova\u0165 vlastn\u00fd spracovate\u013e. Roz\u0161\u00edrite\u013enos\u0165 syst\u00e9mu n\u00e1m pomohla a \u201enau\u010dili\u201c sme Billy nov\u00fd typ slu\u017eieb.<br \/>\nMusel som si s t\u00fdm poriadne pohra\u0165, ale mysl\u00edm, \u017ee s Billy sa dohodneme.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"progulki-po-volframovym-polyam--tungsten-fabric\">Prech\u00e1dzky po wolframov\u00fdch poliach \u2013 Tungsten Fabric<\/h3>\n<p><\/p>\n<p><em>Wolframov\u00e9 polia posiate stovkami dr\u00f4tov, cez ktor\u00e9 prech\u00e1dzaj\u00fa tis\u00edce bitov inform\u00e1ci\u00ed. Inform\u00e1cie sa zhroma\u017e\u010fuj\u00fa do \u201ebal\u00edkov\u201c, rozoberaj\u00fa sa a vytv\u00e1raj\u00fa zlo\u017eit\u00fa trasu, akoby m\u00e1vnut\u00edm \u010darovn\u00e9ho pr\u00fatika.<\/em><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Pr\u00edbeh vzniku cloudovej slu\u017eby, ochuten\u00fd kyberpunkom\" src=\"\/wp-content\/uploads\/2020\/04\/9b6dd46d9f15e0e3393a8c1222abbf2f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Toto je r\u00ed\u0161a druh\u00e9ho syst\u00e9mu, s ktor\u00fdm sme sa museli zbl\u00ed\u017ei\u0165 \u2013 Tungsten Fabric (TF), b\u00fdval\u00fd OpenContrail. Jej \u00falohou je spravova\u0165 sie\u0165ov\u00e9 vybavenie, poskytuj\u00fac n\u00e1m, ako u\u017e\u00edvate\u013eom, programov\u00fa abstrakciu. TF \u2013 SDN, zap\u00fazdruje zlo\u017eit\u00fa logiku pr\u00e1ce so sie\u0165ov\u00fdm vybaven\u00edm. O samotnej technol\u00f3gii existuje dobr\u00fd \u010dl\u00e1nok, napr\u00edklad, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/muk\/blog\/251959\/\">tu<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Syst\u00e9m je integrovan\u00fd s OpenStack (o \u0148om bude re\u010d ni\u017e\u0161ie) cez plugin Neutron. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Pr\u00edbeh vzniku cloudovej slu\u017eby, ochuten\u00fd kyberpunkom\" src=\"\/wp-content\/uploads\/2020\/04\/5abe3992efaab3e016a0c51dc0070a94.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Interakcia slu\u017eieb OpenStack.<\/em><\/p>\n<p><\/p>\n<p>S touto syst\u00e9mou n\u00e1s zozn\u00e1mili chlapci z prev\u00e1dzkov\u00e9ho oddelenia. Pou\u017e\u00edvame API syst\u00e9mu na spr\u00e1vu sie\u0165ovej infra\u0161trukt\u00fary na\u0161ich slu\u017eieb. Zatia\u013e n\u00e1m nesp\u00f4sobila v\u00e1\u017ene probl\u00e9my alebo nepr\u00edjemnosti (o chlapcoch z PO sa neodv\u00e1\u017eim hovori\u0165), aj ke\u010f sme sa s niektor\u00fdmi kuriozitami pri interakcii stretli.<\/p>\n<p><\/p>\n<p>Prv\u00e1 situ\u00e1cia vyzerala takto: pr\u00edkazy, ktor\u00e9 si vy\u017eadovali v\u00fdstup ve\u013ek\u00e9ho mno\u017estva d\u00e1t na konzolu in\u0161tancie pri pripojen\u00ed cez SSH, jednoducho \u201ezablokovali\u201c pripojenie, zatia\u013e \u010do cez VNC v\u0161etko fungovalo korektne.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Pr\u00edbeh vzniku cloudovej slu\u017eby, ochuten\u00fd kyberpunkom\" src=\"\/wp-content\/uploads\/2020\/04\/02bc97d63a1299e1dda08fce0f10fb97.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pre t\u00fdch, ktor\u00ed nie s\u00fa obozn\u00e1men\u00ed s probl\u00e9mom, to vyzer\u00e1 dos\u0165 komicky: ls \/root funguje spr\u00e1vne, zatia\u013e \u010do, napr\u00edklad, top sa \u00faplne \u201ezasekne\u201c. Na\u0161\u0165astie, u\u017e sme sa s podobn\u00fdmi probl\u00e9mami stretli. Rie\u0161en\u00edm bol tuning MTU na trase od compute-n\u00f3dov k smerova\u010dom. Mimochodom, to nie je probl\u00e9m TF.<\/p>\n<p><\/p>\n<p>\u010eal\u0161\u00ed probl\u00e9m \u010dakal za rohom. V jednom \u201ekr\u00e1snom\u201c okam\u017eiku zmizla m\u00e1gia smerovania, tak jednoducho. TF prestalo spravova\u0165 smerovanie na zariaden\u00ed.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Pr\u00edbeh vzniku cloudovej slu\u017eby, ochuten\u00fd kyberpunkom\" src=\"\/wp-content\/uploads\/2020\/04\/db2a75ffdf2940b2ca90f73835f7a321.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pracovali sme s OpenStack z \u00farovne admina a potom sme prech\u00e1dzali na \u00farove\u0148 po\u017eadovan\u00e9ho pou\u017e\u00edvate\u013ea. SDN sa zd\u00e1, \u017ee \u201eprehmat\u00e1va\u201c rozsah pou\u017e\u00edvate\u013ea, s ktor\u00fdm sa vykon\u00e1vaj\u00fa akcie. Probl\u00e9m je, \u017ee tento ist\u00fd administr\u00e1torsk\u00fd \u00fa\u010det sa pou\u017e\u00edva na komunik\u00e1ciu TF a OpenStack. Na kroku prep\u00ednania na pou\u017e\u00edvate\u013ea zmizla \u201em\u00e1gia\u201c. Rie\u0161en\u00edm bolo zalo\u017ei\u0165 samostatn\u00fd \u00fa\u010det na pr\u00e1cu so syst\u00e9mom. To umo\u017enilo fungova\u0165 bez naru\u0161enia integra\u010dnej funk\u010dnosti.<\/p>\n<p><\/p>\n<h3 id=\"silikonovye-formy-zhizni--openstack\">Kysl\u00edkovo-uhli\u010dit\u00e9 formy \u017eivota \u2014 OpenStack<\/h3>\n<p><\/p>\n<p><em>Kysl\u00edkovo-uhli\u010dit\u00e1 bytostn\u00e1 kreat\u00fara zvl\u00e1\u0161tneho tvaru \u017eije ne\u010faleko wolframov\u00fdch pol\u00ed. Najviac pripom\u00edna pre\u0161\u013eachten\u00e9 die\u0165a, ktor\u00e9 jedn\u00fdm m\u00e1vnut\u00edm m\u00f4\u017ee rozdrvi\u0165 n\u00e1s, ale z jeho strany nevych\u00e1dza jasn\u00e1 agresia. Nevyvol\u00e1va strach, ale jeho rozmery vzbudzuj\u00fa obavy. Rovnako ako zlo\u017eitosti toho, \u010do sa okolo deje.<\/em><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Pr\u00edbeh vzniku cloudovej slu\u017eby, ochuten\u00fd kyberpunkom\" src=\"\/wp-content\/uploads\/2020\/04\/8622d43e0cb963bc9ef2a2ce59a32499.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>OpenStack je jadrom na\u0161ej platformy.<\/p>\n<p><\/p>\n<p>OpenStack m\u00e1 nieko\u013eko podsyst\u00e9mov, z ktor\u00fdch zatia\u013e najakt\u00edvnej\u0161ie pou\u017e\u00edvame Nova, Glance a Cinder. Ka\u017ed\u00fd z nich m\u00e1 svoje API. Nova zodpoved\u00e1 za compute zdroje a vytv\u00e1ranie instance, Cinder spravuje volume a ich sn\u00edmky, Glance je servis obr\u00e1zkov, ktor\u00fd spravuje \u0161abl\u00f3ny OS a metainform\u00e1cie o nich.<\/p>\n<p><\/p>\n<p>Ka\u017ed\u00e1 slu\u017eba sa sp\u00fa\u0161\u0165a v kontajneri, pri\u010dom \u201ebiely kr\u00e1lik\u201c \u2014 RabbitMQ sl\u00fa\u017ei ako broker spr\u00e1v.<\/p>\n<p><\/p>\n<p>Tento syst\u00e9m n\u00e1m sp\u00f4sobil najviac neo\u010dak\u00e1van\u00fdch probl\u00e9mov.<\/p>\n<p><\/p>\n<p>A first problem arose when we tried to connect an additional volume to the server. The Cinder API flatly refused to carry out this task. More accurately, according to OpenStack, the connection is established, but within the virtual server, the disk device is absent.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Pr\u00edbeh vzniku cloudovej slu\u017eby, ochuten\u00fd kyberpunkom\" src=\"\/wp-content\/uploads\/2020\/04\/b4755d893f3f8ad7d7aeab3af69f35cf.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>We decided to take a workaround and requested the same action from the Nova API. The result \u2014 the device connects correctly and is available inside the server. It seems that the problem occurs when block-storage doesn\u2019t respond to Cinder.<\/p>\n<p><\/p>\n<p>Another complexity awaited us when working with disks. The system volume could not be detached from the server.<\/p>\n<p><\/p>\n<p>Once again, OpenStack \u2018swears\u2019 that it destroyed the connection and now we can work with the volume separately. However, the API categorically refused to perform operations on the disk. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Pr\u00edbeh vzniku cloudovej slu\u017eby, ochuten\u00fd kyberpunkom\" src=\"\/wp-content\/uploads\/2020\/04\/952fd7cd11181605c52a7df71cd4f69f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Here we decided not to fight too much but to change our perspective on the service's logic. Since there is an instance, there must be a system volume. Therefore, the user cannot delete or detach the system 'disk' without deleting the 'server'.<\/p>\n<p><\/p>\n<p>OpenStack is a rather complex system with its own interaction logic and convoluted API. We are helped by quite detailed documentation and, of course, the method of trial and error (where would we be without it).<\/p>\n<p><\/p>\n<h3 id=\"testovyy-zapusk\">Test launch<\/h3>\n<p><\/p>\n<p>We conducted the test launch in December last year. The main goal was to check our project from a technical perspective and UX in a real-world scenario. The audience was selected, and the testing was closed. However, we also left the possibility to request access to testing on our website.<\/p>\n<p><\/p>\n<p>Of course, the test did not go without comical moments, as this is just the beginning of our adventures. <\/p>\n<p><\/p>\n<p>Firstly, we somewhat misjudged the interest in the project and had to quickly add compute nodes during the test. A common case for a cluster, but there were nuances here as well. The documentation for the specific version of TF indicated a specific kernel version on which the functionality with vRouter was tested. We decided to launch nodes with more recent kernels. As a result \u2014 TF did not receive routes from the nodes. The kernels had to be urgently rolled back.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Pr\u00edbeh vzniku cloudovej slu\u017eby, ochuten\u00fd kyberpunkom\" src=\"\/wp-content\/uploads\/2020\/04\/377208246d5e396317fb934a35ed1227.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Another comical moment is related to the functionality of the \u2018change password\u2019 button in the personal account. <\/p>\n<p><\/p>\n<p>Rozhodli sme sa pou\u017ei\u0165 JWT na spr\u00edstupnenie pou\u017e\u00edvate\u013esk\u00e9ho rozhrania, aby sme sa nemuseli zaobera\u0165 rel\u00e1ciami. Ke\u010f\u017ee syst\u00e9my s\u00fa r\u00f4zne a \u0161iroko rozpt\u00fdlen\u00e9, spravujeme svoj token, do ktor\u00e9ho \u201eobal\u00edme\u201c rel\u00e1cie z faktur\u00e1cie a token z OpenStacku. Pri zmene hesla sa token samozrejme \u201eprepadne\u201c, preto\u017ee \u00fadaje pou\u017e\u00edvate\u013ea s\u00fa u\u017e neplatn\u00e9 a je potrebn\u00e9 ho znovu vyda\u0165. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Pr\u00edbeh vzniku cloudovej slu\u017eby, ochuten\u00fd kyberpunkom\" src=\"\/wp-content\/uploads\/2020\/04\/daa27256d0b888b2c59d4bc6129f600d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tento moment n\u00e1m unikol, a nebolo prostriedkov na r\u00fdchle dop\u00edsanie tejto \u010dasti. Museli sme pred samotn\u00fdm spusten\u00edm testu odstr\u00e1ni\u0165 funk\u010dnos\u0165.<br \/>\nV s\u00fa\u010dasnosti vykon\u00e1vame odhl\u00e1senie pou\u017e\u00edvate\u013ea, ak bolo heslo zmenen\u00e9.<\/p>\n<p><\/p>\n<p>Napriek t\u00fdmto nuans\u00e1m, testovanie prebehlo dobre. Za p\u00e1r t\u00fd\u017ed\u0148ov sa k n\u00e1m dostalo pribli\u017ene 300 \u013eud\u00ed. Podarilo sa n\u00e1m pozrie\u0165 na produkt o\u010dami pou\u017e\u00edvate\u013eov, otestova\u0165 ho v praxi a z\u00edska\u0165 kvalitn\u00fa sp\u00e4tn\u00fa v\u00e4zbu. <\/p>\n<p><\/p>\n<h3 id=\"prodolzhenie-sleduet\">Pokra\u010dovanie nabud\u00face<\/h3>\n<p><\/p>\n<p>Pre mnoh\u00fdch z n\u00e1s je to prv\u00fd projekt tohto rozsahu. Z\u00edskali sme cenn\u00e9 lekcie o tom, ako pracova\u0165 v t\u00edme, prij\u00edma\u0165 architektonick\u00e9 a dizajnov\u00e9 rozhodnutia. Ako integrova\u0165 zlo\u017eit\u00e9 syst\u00e9my s obmedzen\u00fdmi prostriedkami a uv\u00e1dza\u0165 ich do prev\u00e1dzky. <\/p>\n<p><\/p>\n<p>Samozrejme je nad \u010d\u00edm pracova\u0165, ako v oblasti k\u00f3du, tak aj na spojeniach syst\u00e9mov. Projekt je dos\u0165 mlad\u00fd, ale sme pln\u00ed amb\u00edci\u00ed vybudova\u0165 z neho spo\u013eahliv\u00fa a pohodln\u00fa slu\u017ebu.<\/p>\n<p><\/p>\n<p>Syst\u00e9my sa n\u00e1m u\u017e podarilo presved\u010di\u0165. Bill poslu\u0161ne po\u010d\u00edta, vystavuje fakt\u00fary a spracov\u00e1va po\u017eiadavky pou\u017e\u00edvate\u013eov vo svojej kom\u00f4rke. \"K\u00fazlo\" wolframov\u00fdch pol\u00ed n\u00e1m zabezpe\u010duje stabiln\u00e9 spojenie. A len OpenStack ob\u010das rob\u00ed probl\u00e9my, kri\u010d\u00ed nie\u010do ako \"\u2019WSREP has not yet prepared node for application use\". Ale to je u\u017e \u00faplne in\u00fd pr\u00edbeh\u2026<\/p>\n<p><\/p>\n<p>Predned\u00e1vnom sme spustili slu\u017ebu.<br \/>\nV\u0161etky podrobnosti si m\u00f4\u017eete overi\u0165 na na\u0161ej <noindex><a rel=\"nofollow\" href=\"https:\/\/clo.ru?utm_source=habr&amp;utm_medium=article&amp;utm_campaign=product&amp;utm_term=first_clo\">webe<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Pr\u00edbeh vzniku cloudovej slu\u017eby, ochuten\u00fd kyberpunkom\" src=\"\/wp-content\/uploads\/2020\/04\/32550980b529a5d7b395b3962218e53e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>t\u00edm v\u00fdvoja CLO<\/em><\/p>\n<p><\/p>\n<p>                        <b class=\"spoiler_title\">U\u017eito\u010dn\u00e9 odkazy<\/b><\/p>\n<p><strong>OpenStack<\/strong><\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.openstack.org\/nova\/latest\/\">https:\/\/docs.openstack.org\/nova\/latest\/<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.openstack.org\/keystone\/latest\/\">https:\/\/docs.openstack.org\/keystone\/latest\/<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.openstack.org\/cinder\/latest\/\">https:\/\/docs.openstack.org\/cinder\/latest\/<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.openstack.org\/glance\/latest\/\">https:\/\/docs.openstack.org\/glance\/latest\/<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<p><strong>Tungsten Fabric<\/strong><\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/docs.tungsten.io\/en\/latest\/user\/getting-started\/index.html\">http:\/\/docs.tungsten.io\/en\/latest\/user\/getting-started\/index.html<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.juniper.net\/documentation\/en_US\/contrail-cloud10.0\/topics\/concept\/contrail-cloud-openstack-integration-overview.html\">https:\/\/www.juniper.net\/documentation\/en_US\/contrail-cloud10.0\/topics\/concept\/contrail-cloud-openstack-integration-overview.html<\/a><\/noindex><\/li>\n<\/ul>\n<p>Zdroj: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/first\/blog\/493606\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0421 \u0440\u043e\u0441\u0442\u043e\u043c \u0441\u0442\u0430\u0436\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0432 IT \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0448\u044c \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u044c, \u0447\u0442\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438\u043c\u0435\u044e\u0442 \u0441\u0432\u043e\u0439 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440. \u041e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043a\u043b\u0430\u0434\u0438\u0441\u0442\u044b\u043c\u0438, \u043c\u043e\u043b\u0447\u0430\u043b\u0438\u0432\u044b\u043c\u0438, \u0432\u0437\u0431\u0430\u043b\u043c\u043e\u0448\u043d\u044b\u043c\u0438, \u0441\u0443\u0440\u043e\u0432\u044b\u043c\u0438. \u041c\u043e\u0433\u0443\u0442 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c \u043a \u0441\u0435\u0431\u0435 \u0438\u043b\u0438 \u043e\u0442\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0442\u044c. \u0422\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435, \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u00ab\u0434\u043e\u0433\u043e\u0432\u0430\u0440\u0438\u0432\u0430\u0442\u044c\u0441\u044f\u00bb \u0441 \u043d\u0438\u043c\u0438, \u043b\u0430\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u00ab\u043f\u043e\u0434\u0432\u043e\u0434\u043d\u044b\u043c\u0438 \u043a\u0430\u043c\u043d\u044f\u043c\u0438\u00bb \u0438 \u0432\u044b\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u0438\u0445 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. \u0412\u043e\u0442 \u0438 \u043d\u0430\u043c \u0432\u044b\u043f\u0430\u043b\u0430 \u0447\u0435\u0441\u0442\u044c \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043e\u0431\u043b\u0430\u0447\u043d\u0443\u044e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443, \u0430 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u00ab\u0443\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c\u00bb [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":79154,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-79153","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.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0421 \u0440\u043e\u0441\u0442\u043e\u043c \u0441\u0442\u0430\u0436\u0430.\" \/>\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\/sk\/blog\/administrirovanie\/istoriya-sozdaniya-oblachnogo-servisa-pripravlennaya-kiberpankom\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sk_SK\" \/>\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\u0441\u0442\u043e\u0440\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u043f\u0440\u0438\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u043a\u0438\u0431\u0435\u0440\u043f\u0430\u043d\u043a\u043e\u043c | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0421 \u0440\u043e\u0441\u0442\u043e\u043c \u0441\u0442\u0430\u0436\u0430.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/istoriya-sozdaniya-oblachnogo-servisa-pripravlennaya-kiberpankom\" \/>\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=\"2020-04-24T17:42:43+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-04-24T17:42:43+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\udd47Pr\u00edbeh vzniku cloudovej slu\u017eby s n\u00e1dychom kyberpunku | ProHoster","description":"S rastom sk\u00fasenost\u00ed.","canonical_url":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/istoriya-sozdaniya-oblachnogo-servisa-pripravlennaya-kiberpankom","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sk_SK","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\u0441\u0442\u043e\u0440\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u043f\u0440\u0438\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u043a\u0438\u0431\u0435\u0440\u043f\u0430\u043d\u043a\u043e\u043c | ProHoster","og:description":"\u0421 \u0440\u043e\u0441\u0442\u043e\u043c \u0441\u0442\u0430\u0436\u0430.","og:url":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/istoriya-sozdaniya-oblachnogo-servisa-pripravlennaya-kiberpankom","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":"2020-04-24T17:42:43+00:00","article:modified_time":"2020-04-24T17:42:43+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"79153","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":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 16:43:24","updated":"2022-10-02 03:25:48","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/79153","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/comments?post=79153"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/79153\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media\/79154"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media?parent=79153"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/categories?post=79153"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/tags?post=79153"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}