Kubernetes apmÄcÄ«bas 1. daļa: lietojumprogrammas, mikropakalpojumi un konteineri
PÄc mÅ«su pieprasÄ«juma Habrs izveidoja centru Kubernetes un mÄs esam priecÄ«gi tajÄ ievietot pirmo publikÄciju. AbonÄjiet!
Kubernetes ir viegli. KÄpÄc bankas man maksÄ lielu naudu, lai strÄdÄtu Å”ajÄ jomÄ, kamÄr ikviens var apgÅ«t Å”o tehnoloÄ£iju tikai dažu stundu laikÄ?
Ja Å”aubÄties, ka Kubernetes var tik Ätri apgÅ«t, iesaku pamÄÄ£inÄt paÅ”am. Proti, apgÅ«stot Å”o materiÄlu, varÄsi palaist uz mikropakalpojumiem balstÄ«tu aplikÄciju Kubernetes klasterÄ«. Es to varu garantÄt, jo tieÅ”i ar to paÅ”u metodiku, kas tiek izmantota Å”eit, es mÄcu mÅ«su klientiem strÄdÄt ar Kubernetes. Ar ko Ŕī rokasgrÄmata atŔķiras no citÄm? PatiesÄ«bÄ ir daudz lietu. TÄtad lielÄkÄ daļa Å”o materiÄlu sÄkas ar vienkÄrÅ”u lietu skaidrojumu - Kubernetes jÄdzieniem un komandas kubectl iezÄ«mÄm. Å o materiÄlu autori pieÅem, ka viÅu lasÄ«tÄji pÄrzina lietojumprogrammu izstrÄdi, mikropakalpojumus un Docker konteinerus. MÄs iesim citu ceļu. PirmkÄrt, mÄs runÄsim par to, kÄ datorÄ palaist lietojumprogrammu, kuras pamatÄ ir mikropakalpojumi. PÄc tam apskatÄ«sim katra mikropakalpojuma konteinera attÄlu izveidi. Un pÄc tam mÄs iepazÄ«simies ar Kubernetes un apskatÄ«sim uz mikropakalpojumiem balstÄ«tas lietojumprogrammas izvietoÅ”anu Kubernetes pÄrvaldÄ«tajÄ klasterÄ«.
Å Ä« pieeja ar pakÄpenisku pieeju Kubernetes sniegs notiekoÅ”Ä izpratnes dziļumu, kas nepiecieÅ”ams vidusmÄra cilvÄkam, lai saprastu, kÄ Kubernetes vienkÄrÅ”i viss darbojas. Kubernetes noteikti ir vienkÄrÅ”a tehnoloÄ£ija, ja tie, kas vÄlas to apgÅ«t, zina, kur un kÄ tÄ tiek izmantota.
Tagad, bez papildu piepÅ«les, sÄksim un runÄsim par lietojumprogrammu, ar kuru mÄs strÄdÄsim.
EksperimentÄls pielietojums
MÅ«su lietojumprogramma veiks tikai vienu funkciju. Par ievadi tiek Åemts viens teikums, pÄc kura, izmantojot teksta analÄ«zes rÄ«kus, tiek veikta Ŕī teikuma sentimenta analÄ«ze, iegÅ«stot novÄrtÄjumu teikuma autora emocionÄlajai attieksmei pret noteiktu objektu.
Å Ädi izskatÄs Ŕīs lietojumprogrammas galvenais logs.
Tīmekļa lietojumprogramma tekstu sentimenta analīzei
No tehniskÄ viedokļa lietojumprogramma sastÄv no trim mikropakalpojumiem, no kuriem katrs atrisina noteiktu problÄmu kopumu:
SA-Frontend ir Nginx tīmekļa serveris, kas apkalpo statiskus React failus.
SA-WebApp ir Java valodÄ rakstÄ«ta tÄ«mekļa lietojumprogramma, kas apstrÄdÄ pieprasÄ«jumus no priekÅ”gala.
SA-Logic ir Python lietojumprogramma, kas veic teksta sentimenta analīzi.
Ir svarÄ«gi atzÄ«mÄt, ka mikropakalpojumi nepastÄv atseviŔķi. ViÅi Ä«steno ideju par "pienÄkumu nodalÄ«Å”anu", bet tajÄ paÅ”Ä laikÄ viÅiem ir jÄsadarbojas vienam ar otru.
Datu plÅ«smas lietojumprogrammÄ
IepriekÅ” redzamajÄ diagrammÄ var redzÄt numurÄtos sistÄmas posmus, kas ilustrÄ datu plÅ«smas lietojumprogrammÄ. ApskatÄ«sim tos:
PÄrlÅ«kprogramma pieprasa failu no servera index.html (kas savukÄrt lejupielÄdÄ React lietojumprogrammas pakotni).
LietotÄjs mijiedarbojas ar lietojumprogrammu, un tas izraisa izsaukumu uz pavasara tÄ«mekļa lietojumprogrammu.
TÄ«mekļa lietojumprogramma pÄrsÅ«ta pieprasÄ«jumu veikt teksta analÄ«zi Python lietojumprogrammai.
Python lietojumprogramma veic teksta sentimenta analÄ«zi un atgriež rezultÄtu kÄ atbildi uz pieprasÄ«jumu.
Lietojumprogramma Spring nosÅ«ta atbildi uz React aplikÄciju (kas savukÄrt parÄda lietotÄjam teksta analÄ«zes rezultÄtu).
Visu Å”o lietojumprogrammu kodu var atrast Å”eit. Es iesaku jums tÅ«lÄ«t nokopÄt Å”o krÄtuvi, jo mums ar to ir daudz interesantu eksperimentu.
Uz mikropakalpojumiem balstÄ«tas lietojumprogrammas palaiÅ”ana vietÄjÄ datorÄ
Lai lietojumprogramma darbotos, mums ir jÄstartÄ visi trÄ«s mikropakalpojumi. SÄksim ar jaukÄko no tiem ā priekÅ”gala lietojumprogrammu.
āIzveidojiet React vietÄjai attÄ«stÄ«bai
Lai palaistu React lietojumprogrammu, datorÄ jÄinstalÄ platforma Node.js un NPM. Kad tas viss ir instalÄts, izmantojiet terminÄli, lai pÄrietu uz savu projekta mapi sa-frontend un palaidiet Å”Ädu komandu:
npm install
Palaižot Å”o komandu mapÄ node_modules tiks ielÄdÄtas React aplikÄcijas atkarÄ«bas, kuru ieraksti atrodas failÄ package.json. Kad atkarÄ«bas ir lejupielÄdÄtas tajÄ paÅ”Ä mapÄ, palaidiet Å”o komandu:
npm start
Tas ir viss. Tagad darbojas lietojumprogramma React, tai varat piekļūt, pÄrlÅ«kprogrammÄ dodoties uz Å”o adresi: localhost:3000. JÅ«s varat kaut ko mainÄ«t tÄ kodÄ. JÅ«s uzreiz redzÄsit Å”o izmaiÅu ietekmi pÄrlÅ«kprogrammÄ. Tas ir iespÄjams, pateicoties tÄ sauktajai ākarstoā moduļu nomaiÅai. Tas padara priekÅ”gala izstrÄdi par vienkÄrÅ”u un patÄ«kamu pieredzi.
āReact pieteikuma sagatavoÅ”ana ražoÅ”anai
Lai faktiski izmantotu React lietojumprogrammu, mums tÄ ir jÄpÄrvÄrÅ” par statisku failu kopu un jÄpasniedz klientiem, izmantojot tÄ«mekļa serveri.
Lai izveidotu lietojumprogrammu React, vÄlreiz izmantojot terminÄli, dodieties uz mapi sa-frontend un palaidiet Å”Ädu komandu:
npm run build
TÄdÄjÄdi projekta mapÄ tiks izveidots direktorijs build. TajÄ bÅ«s visi statiskie faili, kas nepiecieÅ”ami, lai programma React darbotos.
āStatisko failu apkalpoÅ”ana, izmantojot Nginx
Vispirms jums jÄinstalÄ un jÄpalaiž Nginx tÄ«mekļa serveris. Å eit varat to lejupielÄdÄt un atrast instrukcijas, kÄ to instalÄt un palaist. PÄc tam jums ir jÄkopÄ mapes saturs sa-frontend/build uz mapi [your_nginx_installation_dir]/html.
Izmantojot Å”o pieeju, fails tiek Ä£enerÄts lietojumprogrammas React veidoÅ”anas procesÄ index.html bÅ«s pieejams plkst [your_nginx_installation_dir]/html/index.html. Å is ir fails, ko pÄc noklusÄjuma Nginx serveris rada, piekļūstot tam. Serveris ir konfigurÄts, lai klausÄ«tos portÄ 80, taÄu to var pielÄgot vajadzÄ«gajÄ veidÄ, rediÄ£Äjot failu [your_nginx_installation_dir]/conf/nginx.conf.
Tagad atveriet pÄrlÅ«kprogrammu un dodieties uz localhost:80. JÅ«s redzÄsit React pieteikuma lapu.
ReaÄ£Ät lietojumprogrammu, ko apkalpo Nginx serveris
Ja tagad kaut ko ievadÄ«si laukÄ Type your sentence un nospiediet pogu Send - nekas nenotiks. Bet, ja paskatÄs uz konsoli, jÅ«s varat redzÄt kļūdu ziÅojumus. Lai saprastu, kur tieÅ”i rodas Ŕīs kļūdas, analizÄsim lietojumprogrammas kodu.
Apskatiet faila kodu App.js, mÄs to redzam, nospiežot pogu Send sauc metodi analyzeSentence(). Å Ä«s metodes kods ir norÄdÄ«ts zemÄk. LÅ«dzu, Åemiet vÄrÄ, ka katrai rindai, kurÄ ir veidlapas komentÄrs # ŠŠ¾Š¼ŠµŃ, zem koda ir sniegts paskaidrojums. TÄdÄ paÅ”Ä veidÄ mÄs analizÄsim citus koda fragmentus.
1. URL, uz kuru tiek nosÅ«tÄ«ts POST pieprasÄ«jums. Tiek pieÅemts, ka Å”ajÄ adresÄ ir pieteikums, kas gaida Å”Ädus pieprasÄ«jumus.
2.PieprasÄ«juma iestÄde nosÅ«tÄ«ta pieteikumam. Å eit ir pieprasÄ«juma pamatteksta piemÄrs:
{
sentence: "I like yogobella!"
}
3.Kad tiek saÅemta atbilde uz pieprasÄ«jumu, komponenta stÄvoklis tiek atjauninÄts. Tas izraisa komponenta atkÄrtotu renderÄÅ”anu. Ja mÄs saÅemam datus (tas ir, JSON objektu, kurÄ ir ievades dati un aprÄÄ·inÄtais teksta rezultÄts), mÄs izvadÄ«sim komponentu Polarity, jo tiks izpildÄ«ti attiecÄ«gie nosacÄ«jumi. Å Ädi mÄs aprakstÄm komponentu:
Å Ä·iet, ka kods darbojas diezgan labi. Kas ar to ir nepareizi? Ja pieÅemat, ka adresÄ, uz kuru aplikÄcija mÄÄ£ina nosÅ«tÄ«t POST pieprasÄ«jumu, vÄl nekas nevar pieÅemt un apstrÄdÄt Å”o pieprasÄ«jumu, tad jums bÅ«s pilnÄ«ga taisnÄ«ba. Proti, lai apstrÄdÄtu pieprasÄ«jumus, kas saÅemti plkst http://localhost:8080/sentiment, mums ir jÄpalaiž tÄ«mekļa lietojumprogramma, kuras pamatÄ ir pavasaris.
Mums ir nepiecieÅ”ama pavasara lietojumprogramma, kas var pieÅemt POST pieprasÄ«jumu
Lai izvietotu Spring lietojumprogrammu, jums bÅ«s nepiecieÅ”ami JDK8 un Maven un pareizi konfigurÄti vides mainÄ«gie. Kad tas viss ir instalÄts, varat turpinÄt darbu pie mÅ«su projekta.
āLietojumprogrammas iesaiÅoÅ”ana jar failÄ
Izmantojot terminÄli, dodieties uz mapi sa-webapp un ievadiet Å”Ädu komandu:
mvn install
PÄc Ŕīs komandas palaiÅ”anas mapÄ sa-webapp tiks izveidots direktorijs target. Å eit atradÄ«sies Java lietojumprogramma, kas ir iepakota jar failÄ, ko attÄlo fails sentiment-analysis-web-0.0.1-SNAPSHOT.jar.
āPalaižot Java lietojumprogrammu
Dodieties uz mapi target un palaidiet lietojumprogrammu ar Å”Ädu komandu:
Å Ä«s komandas izpildes laikÄ radÄ«sies kļūda. Lai sÄktu to labot, mÄs varam analizÄt izÅÄmuma informÄciju steka izsekoÅ”anas datos:
Error creating bean with name 'sentimentController': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'sa.logic.api.url' in value "${sa.logic.api.url}"
Mums Å”eit vissvarÄ«gÄkÄ ir nozÄ«mes noskaidroÅ”anas neiespÄjamÄ«bas pieminÄÅ”ana sa.logic.api.url. AnalizÄsim kodu, kurÄ rodas kļūda.
āJava lietojumprogrammas koda analÄ«ze
Å eit ir koda fragments, kurÄ rodas kļūda.
@CrossOrigin(origins = "*")
@RestController
public class SentimentController {
@Value("${sa.logic.api.url}") // #1
private String saLogicApiUrl;
@PostMapping("/sentiment")
public SentimentDto sentimentAnalysis(
@RequestBody SentenceDto sentenceDto)
{
RestTemplate restTemplate = new RestTemplate();
return restTemplate.postForEntity(
saLogicApiUrl + "/analyse/sentiment", // #2
sentenceDto, SentimentDto.class)
.getBody();
}
}
In SentimentController ir lauks saLogicApiUrl. TÄ vÄrtÄ«bu nosaka Ä«paÅ”ums sa.logic.api.url.
String saLogicApiUrl savienojas ar vÄrtÄ«bu /analyse/sentiment. KopÄ tie veido adresi zvanÄ«Å”anai uz mikropakalpojumu, kas veic teksta analÄ«zi.
āIestatiet Ä«paÅ”uma vÄrtÄ«bu
PavasarÄ« standarta Ä«paÅ”uma vÄrtÄ«bu avots ir fails application.properties, ko var atrast vietnÄ sa-webapp/src/main/resources. Bet tÄ izmantoÅ”ana nav vienÄ«gais veids, kÄ noteikt Ä«paÅ”uma vÄrtÄ«bas. To var izdarÄ«t arÄ«, izmantojot Å”Ädu komandu:
Å Ä« Ä«paÅ”uma vÄrtÄ«bai ir jÄnorÄda uz mÅ«su Python lietojumprogrammas adresi.
KonfigurÄjot to, mÄs norÄdÄm Spring tÄ«mekļa lietojumprogrammai, kur tai ir jÄiet, lai veiktu teksta analÄ«zes pieprasÄ«jumus.
Lai neapgrÅ«tinÄtu mÅ«su dzÄ«vi, nolemsim, ka Python aplikÄcija bÅ«s pieejama plkst localhost:5000 un centÄ«simies par to neaizmirst. RezultÄtÄ lietojumprogrammas Spring palaiÅ”anas komanda izskatÄ«sies Å”Ädi:
Adreses norÄdÄ«Å”ana POST pieprasÄ«jumu veikÅ”anai tai.
ÄŖpaÅ”uma izgÅ«Å”ana sentence no pieprasÄ«juma iestÄdes.
AnonÄ«ma objekta inicializÄcija TextBlob un iegÅ«t vÄrtÄ«bu polarity par pirmo teikumu, kas saÅemts pieprasÄ«juma pamattekstÄ (mÅ«su gadÄ«jumÄ Å”is ir vienÄ«gais teikums, kas nosÅ«tÄ«ts analÄ«zei).
Atgriežot atbildi, kuras pamatteksts satur teikuma tekstu un tam aprÄÄ·inÄto rÄdÄ«tÄju polarity.
Palaidiet lietojumprogrammu Flask, kas bÅ«s pieejama vietnÄ 0.0.0.0:5000 (tai var piekļūt arÄ«, izmantojot veidlapas konstrukciju localhost:5000).
Mikropakalpojumi, kas veido lietojumprogrammu, tagad darbojas. ViÅi ir pielÄgoti mijiedarbÄ«bai savÄ starpÄ. Å Ädi izskatÄs pielietojuma diagramma Å”ajÄ darba posmÄ.
Visi mikropakalpojumi, kas veido lietojumprogrammu, ir sakÄrtoti darba kÄrtÄ«bÄ
Tagad, pirms turpinÄt, atveriet savu React lietojumprogrammu pÄrlÅ«kprogrammÄ un mÄÄ£iniet ar to parsÄt kÄdu teikumu. Ja viss ir izdarÄ«ts pareizi - pÄc pogas nospieÅ”anas Send jÅ«s redzÄsit analÄ«zes rezultÄtus zem teksta lauka.
NÄkamajÄ sadaÄ¼Ä mÄs runÄsim par to, kÄ darbinÄt mÅ«su mikropakalpojumus Docker konteineros. Tas ir nepiecieÅ”ams, lai sagatavotu lietojumprogrammu darbam Kubernetes klasterÄ«.
Dokeru konteineri
Kubernetes ir sistÄma konteinerizÄtu lietojumprogrammu izvietoÅ”anas, mÄrogoÅ”anas un pÄrvaldÄ«bas automatizÄÅ”anai. To sauc arÄ« par "konteineru orÄ·estrÄtÄju". Ja Kubernetes strÄdÄ ar konteineriem, tad pirms Ŕīs sistÄmas lietoÅ”anas mums vispirms ir jÄiegÄdÄjas Å”ie konteineri. Bet vispirms parunÄsim par to, kas ir konteineri. IespÄjams, ka vislabÄkÄ atbilde uz jautÄjumu, kas tas ir, ir atrodama dokumentÄcija uz Docker:
Konteinera attÄls ir viegla, autonoma, izpildÄma pakotne, kas satur lietojumprogrammu, kurÄ ietilpst viss nepiecieÅ”amais tÄs palaiÅ”anai: lietojumprogrammas kods, izpildes vide, sistÄmas rÄ«ki un bibliotÄkas, iestatÄ«jumi. Konteineru programmas var izmantot Linux un Windows vidÄs, un tÄs vienmÄr darbosies vienÄdi neatkarÄ«gi no infrastruktÅ«ras.
Tas nozÄ«mÄ, ka konteinerus var darbinÄt jebkurÄ datorÄ, arÄ« ražoÅ”anas serveros, un tajos esoÅ”Äs lietojumprogrammas darbosies vienÄdi jebkurÄ vidÄ.
Lai izpÄtÄ«tu konteineru funkcijas un salÄ«dzinÄtu tos ar citiem lietojumprogrammu palaiÅ”anas veidiem, apskatÄ«sim piemÄru par React lietojumprogrammas apkalpoÅ”anu, izmantojot virtuÄlo maŔīnu un konteineru.
āReact lietojumprogrammas statisko failu apkalpoÅ”ana, izmantojot virtuÄlo maŔīnu
MÄÄ£inot organizÄt statisko failu apkalpoÅ”anu, izmantojot virtuÄlÄs maŔīnas, mÄs saskarsimies ar Å”Ädiem trÅ«kumiem:
NeefektÄ«va resursu izmantoÅ”ana, jo katra virtuÄlÄ maŔīna ir pilnvÄrtÄ«ga operÄtÄjsistÄma.
Platformas atkarÄ«ba. Tas, kas darbojas lokÄlajÄ datorÄ, var nedarboties ražoÅ”anas serverÄ«.
LÄna un resursietilpÄ«ga uz virtuÄlÄs maŔīnas balstÄ«ta risinÄjuma mÄrogoÅ”ana.
Nginx tÄ«mekļa serveris, kas apkalpo statiskus failus, kas darbojas virtuÄlajÄ maŔīnÄ
Ja lÄ«dzÄ«gas problÄmas risinÄÅ”anai tiek izmantoti konteineri, tad, salÄ«dzinot ar virtuÄlajÄm maŔīnÄm, var atzÄ«mÄt Å”Ädas stiprÄs puses:
EfektÄ«va resursu izmantoÅ”ana: darbs ar operÄtÄjsistÄmu, izmantojot Docker.
Platformas neatkarÄ«ga. Konteiners, ko izstrÄdÄtÄjs var darbinÄt savÄ datorÄ, darbosies jebkur.
Viegla izvietoÅ”ana, izmantojot attÄla slÄÅus.
Nginx tÄ«mekļa serveris, kas apkalpo statiskus failus, kas darbojas konteinerÄ
MÄs salÄ«dzinÄjÄm virtuÄlÄs maŔīnas un konteinerus tikai dažos punktos, taÄu pat ar to pietiek, lai izjustu konteineru stiprÄs puses. Å eit JÅ«s varat atrast sÄ«kÄku informÄciju par Docker konteineriem.
Docker konteinera pamatelements ir fails Dockerfile. Å Ä« faila sÄkumÄ tiek izveidots konteinera pamattÄla ieraksts, pÄc tam seko instrukciju secÄ«ba, kas norÄda, kÄ izveidot konteineru, kas atbilstu noteiktas lietojumprogrammas vajadzÄ«bÄm.
Pirms sÄkam strÄdÄt ar failu Dockerfile, atcerÄsimies, ko mÄs darÄ«jÄm, lai sagatavotu React lietojumprogrammas failus augÅ”upielÄdei Nginx serverÄ«:
React lietojumprogrammas pakotnes izveide (npm run build).
Nginx servera palaiŔana.
Kataloga satura kopÄÅ”ana build no projekta mapes sa-frontend uz servera mapi nginx/html.
TÄlÄk varat redzÄt paralÄles starp konteinera izveidi un iepriekÅ” minÄtajÄm darbÄ«bÄm, kas veiktas jÅ«su lokÄlajÄ datorÄ.
NorÄdÄ«jumi, kas tiks ietverti Dockerfile pieteikumam SA-Frontend, sastÄv tikai no divÄm komandÄm. Fakts ir tÄds, ka Nginx izstrÄdes komanda ir sagatavojusi pamata attÄls priekÅ” Nginx, ko izmantosim sava tÄla izveidoÅ”anai. Å Ä«s ir divas darbÄ«bas, kas mums jÄapraksta:
Ja pÄriesit no Ŕī apraksta uz failu Dockerfile, tad tas izskatÄ«sies Å”Ädi:
FROM nginx
COPY build /usr/share/nginx/html
KÄ redzat, Å”eit viss ir ļoti vienkÄrÅ”i, un faila saturs pat izrÄdÄs diezgan lasÄms un saprotams. Å is fails liek sistÄmai uzÅemt attÄlu nginx ar visu, kas tajÄ jau atrodas, un kopÄjiet direktorijas saturu build uz direktoriju nginx/html.
Å eit jums var rasties jautÄjums par to, kÄ es zinu, kur tieÅ”i jums ir nepiecieÅ”ams kopÄt failus no mapes build, tas ir, no kurienes nÄca ceļŔ /usr/share/nginx/html. PatiesÄ«bÄ arÄ« Å”eit nav nekÄ sarežģīta. Fakts ir tÄds, ka attiecÄ«go informÄciju var atrast apraksts attÄls.
āIzveidojiet attÄlu un augÅ”upielÄdÄjiet to repozitorijÄ
Lai mÄs varÄtu strÄdÄt ar gatavo attÄlu, mums tas ir jÄievieto attÄlu krÄtuvÄ. Lai to izdarÄ«tu, mÄs izmantosim bezmaksas mÄkoÅa attÄlu mitinÄÅ”anas platformu Docker Hub. Å ajÄ darba posmÄ jums jÄveic Å”Ädas darbÄ«bas:
Å eit un tÄlÄk lÄ«dzÄ«gÄs komandÄs $DOCKER_USER_ID jÄaizstÄj ar jÅ«su Docker Hub lietotÄjvÄrdu. PiemÄram, Ŕī komandas daļa varÄtu izskatÄ«ties Å”Ädi: rinormaloku/sentiment-analysis-frontend.
Å ajÄ gadÄ«jumÄ Å”o komandu var saÄ«sinÄt, noÅemot no tÄs -f Dockerfile, jo Å”is fails jau pastÄv mapÄ, kurÄ mÄs izpildÄm Å”o komandu.
Lai gatavo attÄlu nosÅ«tÄ«tu uz repozitoriju, mums ir nepiecieÅ”ama Å”Äda komanda:
PÄc tÄ pabeigÅ”anas pÄrbaudiet savu repozitoriju sarakstu Docker Hub, lai saprastu, vai attÄla augÅ”upielÄde mÄkoÅa krÄtuvÄ bija veiksmÄ«ga.
āPalaižot konteineru
Tagad ikviens var lejupielÄdÄt un palaist attÄlu, kas pazÄ«stams kÄ $DOCKER_USER_ID/sentiment-analysis-frontend. Lai to izdarÄ«tu, jums ir jÄpalaiž Å”Äda komandu secÄ«ba:
docker pull $DOCKER_USER_ID/sentiment-analysis-frontend
docker run -d -p 80:80 $DOCKER_USER_ID/sentiment-analysis-frontend
Tagad konteiners darbojas, mÄs varam turpinÄt darbu, veidojot citus mums nepiecieÅ”amos attÄlus. Bet pirms turpinÄm, sapratÄ«sim dizainu 80:80, kas parÄdÄs attÄla palaiÅ”anas komandÄ un var Ŕķist mulsinoÅ”i.
Pirmais numurs 80 ā tas ir resursdatora porta numurs (tas ir, lokÄlÄ datora).
Otrais numurs 80 ir konteinera osta, uz kuru jÄnosÅ«ta pieprasÄ«jums.
Apsveriet tÄlÄk sniegto ilustrÄciju.
Portu pÄrsÅ«tÄ«Å”ana
SistÄma pÄradresÄ pieprasÄ«jumus no porta <hostPort> uz ostu <containerPort>. Tas ir, pieeja ostai 80 dators tiek novirzÄ«ts uz portu 80 konteiners.
KopÅ” ostas 80 atvÄrts lokÄlajÄ datorÄ, varat piekļūt lietojumprogrammai no Ŕī datora vietnÄ localhost:80. Ja jÅ«su sistÄma neatbalsta Docker, lietojumprogrammu var palaist Docker virtuÄlajÄ maŔīnÄ, kuras adrese izskatÄ«sies Å”Ädi <docker-machine ip>:80. Lai uzzinÄtu Docker virtuÄlÄs maŔīnas IP adresi, varat izmantot komandu docker-machine ip.
Lietojumprogrammas attÄla apkopoÅ”ana SA-Frontend, mÄs varÄjÄm pamanÄ«t, ka Å”is process izrÄdÄs ÄrkÄrtÄ«gi lÄns. Tas notiek tÄpÄc, ka attÄla izveides konteksts ir jÄnosÅ«ta Docker dÄmonam. Direktorijs, kas pÄrstÄv bÅ«vÄÅ”anas kontekstu, ir norÄdÄ«ts kÄ pÄdÄjais komandas arguments docker build. MÅ«su gadÄ«jumÄ Å”Ä«s komandas beigÄs ir punkts. TÄdÄjÄdi bÅ«vniecÄ«bas kontekstÄ tiek iekļauta Å”Äda struktÅ«ra:
Bet no visÄm Å”eit esoÅ”ajÄm mapÄm mums ir nepiecieÅ”ama tikai mape build. Kaut ko citu ielÄdÄÅ”ana ir laika izŔķieÅ”ana. Varat paÄtrinÄt veidoÅ”anu, norÄdot Docker, kurus direktorijus ignorÄt. Lai to izdarÄ«tu, mums ir nepiecieÅ”ams fails .dockerignore. JÅ«s, ja esat iepazinies ar failu .gitignore, Ŕī faila struktÅ«ra, iespÄjams, ŔķitÄ«s pazÄ«stama. TajÄ ir uzskaitÄ«ti direktoriji, kurus attÄla veidoÅ”anas sistÄma var ignorÄt. MÅ«su gadÄ«jumÄ Å”Ä« faila saturs izskatÄs Å”Ädi:
node_modules
src
public
fails .dockerignore jÄatrodas tajÄ paÅ”Ä mapÄ, kur fails Dockerfile. Tagad attÄla izveide prasÄ«s dažas sekundes.
Tagad strÄdÄsim pie Java lietojumprogrammas attÄla.
JÅ«s jau esat iemÄcÄ«juÅ”ies visu, kas jums jÄzina, lai izveidotu konteinera attÄlus. TÄpÄc Ŕī sadaļa bÅ«s ļoti Ä«sa.
Atveriet failu Dockerfilekas atrodas projekta mapÄ sa-webapp. Izlasot Ŕī faila tekstu, tajÄ redzÄsiet tikai divas jaunas konstrukcijas, sÄkot ar atslÄgvÄrdiem ENV Šø EXPOSE:
AtslÄgvÄrds ENV Ä»auj deklarÄt vides mainÄ«gos Docker konteineros. Jo Ä«paÅ”i mÅ«su gadÄ«jumÄ tas ļauj norÄdÄ«t URL, lai piekļūtu lietojumprogrammas API, kas veic teksta analÄ«zi.
AtslÄgvÄrds EXPOSE ļauj norÄdÄ«t Docker atvÄrt portu. Lietojumprogrammas palaiÅ”anas laikÄ mÄs izmantosim Å”o portu. Å eit jÅ«s to varat pamanÄ«t Dockerfile pieteikumam SA-Frontend tÄdas komandas nav. Tas ir tikai dokumentÄcijas nolÅ«kos, citiem vÄrdiem sakot, Ŕī konstrukcija ir paredzÄta tam, kurÅ” lasÄ«s Dockerfile.
AttÄla izveide un nosÅ«tÄ«Å”ana uz repozitoriju izskatÄs tieÅ”i tÄpat kÄ iepriekÅ”ÄjÄ piemÄrÄ. Ja vÄl neesat ļoti pÄrliecinÄts par savÄm spÄjÄm, atbilstoÅ”Äs komandas var atrast failÄ README.md mapÄ sa-webapp.
Ja paskatÄs uz faila saturu Dockerfile mapÄ sa-logic, tad tur neko jaunu sev neatradÄ«si. Komandas attÄla izveidei un nosÅ«tÄ«Å”anai uz krÄtuvi arÄ« jums jau ir zinÄmas, taÄu, tÄpat kÄ ar citÄm mÅ«su lietojumprogrammÄm, tÄs var atrast failÄ README.md mapÄ sa-logic.
ā Konteineru lietojumprogrammu testÄÅ”ana
Vai varat uzticÄties kaut kam, ko neesat pÄrbaudÄ«jis? Es arÄ« nevaru. PÄrbaudÄ«sim savus konteinerus.
PalaidÄ«sim lietojumprogrammas konteineru sa-logic un konfigurÄjiet to, lai klausÄ«tos portÄ 5050:
docker run -d -p 5050:5000 $DOCKER_USER_ID/sentiment-analysis-logic
PalaidÄ«sim lietojumprogrammas konteineru sa-webapp un konfigurÄjiet to, lai klausÄ«tos portÄ 8080. TurklÄt mums ir jÄkonfigurÄ ports, kurÄ Python lietojumprogramma uzklausÄ«s pieprasÄ«jumus no Java lietojumprogrammas, atkÄrtoti pieŔķirot vides mainÄ«go SA_LOGIC_API_URL:
$ docker run -d -p 8080:8080 -e SA_LOGIC_API_URL='http://<container_ip or docker machine ip>:5000' $DOCKER_USER_ID/sentiment-analysis-web-app
Lai uzzinÄtu, kÄ uzzinÄt Docker konteinera vai virtuÄlÄs maŔīnas IP adresi, skatiet failu README.
docker run -d -p 80:80 $DOCKER_USER_ID/sentiment-analysis-frontend
Tagad viss ir gatavs doties uz adresi pÄrlÅ«kprogrammÄ localhost:80 un izmÄÄ£iniet lietojumprogrammu.
LÅ«dzu, Åemiet vÄrÄ, ka, ja mainÄ«jÄt portu uz sa-webapp, vai, ja izmantojat Docker virtuÄlo maŔīnu, fails bÅ«s jÄrediÄ£Ä App.js no mapes sa-frontendmainot IP adresi vai porta numuru metodÄ analyzeSentence(), aizstÄjot paÅ”reizÄjo informÄciju novecojuÅ”o datu vietÄ. PÄc tam attÄls ir jÄsamontÄ un jÄizmanto.
TÄ tagad izskatÄs mÅ«su lietojumprogrammu diagramma.
Mikropakalpojumi darbojas konteineros
Kopsavilkums: kÄpÄc mums ir nepiecieÅ”ams Kubernetes klasteris?
MÄs tikko izskatÄ«jÄm failus Dockerfile, runÄja par to, kÄ izveidot attÄlus un nosÅ«tÄ«t tos uz Docker repozitoriju. TurklÄt mÄs uzzinÄjÄm, kÄ paÄtrinÄt attÄla montÄžu, izmantojot failu .dockerignore. RezultÄtÄ mÅ«su mikropakalpojumi tagad darbojas Docker konteineros. Å eit jums var rasties pilnÄ«gi pamatots jautÄjums par to, kÄpÄc mums ir nepiecieÅ”ams Kubernetes. Å Ä« materiÄla otrÄ daļa bÅ«s veltÄ«ta atbildei uz Å”o jautÄjumu. TikmÄr apsveriet Å”Ädu jautÄjumu:
PieÅemsim, ka mÅ«su tÄ«mekļa lietojumprogramma teksta analÄ«zei ir kļuvusi populÄra visÄ pasaulÄ. Katru minÅ«ti viÅam pienÄk miljoniem pieprasÄ«jumu. Tas nozÄ«mÄ, ka mikropakalpojumi sa-webapp Šø sa-logic tiks pakļauta milzÄ«gai slodzei. KÄ mÄrogot konteinerus, kuros darbojas mikropakalpojumi?