Maphunziro a Kubernetes Gawo 1: Mapulogalamu, Microservices, ndi Containers

Pa pempho lathu, Habr adapanga malo Kubernetes ndipo ndife okondwa kugaŵira chofalitsa choyamba m’bukuli. Lembetsani!

Kubernetes ndikosavuta. N’chifukwa chiyani mabanki amandilipira ndalama zambiri kuti ndigwire ntchito m’derali, pamene aliyense angathe kudziwa luso limeneli m’maola ochepa chabe?

Maphunziro a Kubernetes Gawo 1: Mapulogalamu, Microservices, ndi Containers

Ngati mukukayikira kuti Kubernetes atha kuphunziridwa mwachangu kwambiri, ndikupangira kuti muyesere nokha. Mwakutero, mutadziwa bwino izi, mudzatha kugwiritsa ntchito pulogalamu yotengera ma microservices mu gulu la Kubernetes. Nditha kutsimikizira izi, popeza ndi njira yomweyi yomwe ndimaphunzitsa makasitomala athu kugwira ntchito ndi Kubernetes. Kodi nchiyani chikupangitsa bukhuli kukhala losiyana ndi ena? Ndipotu pali zinthu zambiri. Chifukwa chake, zambiri mwazinthu izi zimayamba ndi kufotokozera zinthu zosavuta - malingaliro a Kubernetes ndi mawonekedwe a lamulo la kubectl. Olemba zinthuzi akuganiza kuti owerenga awo amadziwa bwino ntchito, ma microservices, ndi zotengera za Docker. Tidzapita njira ina. Choyamba, tikambirana momwe tingayendetsere pulogalamu yotengera ma microservices pakompyuta. Kenako tiwona zomangira ziwiya za microservice iliyonse. Ndipo pambuyo pake, tidzadziwana ndi Kubernetes ndikuyang'ana kutumiza ntchito kutengera ma microservices mgulu loyendetsedwa ndi Kubernetes.

Njira iyi, ndi njira yapang'onopang'ono ya Kubernetes, idzapereka kumvetsetsa kwakuya kwa zomwe zikuchitika zomwe ndizofunikira kwa munthu wamba kuti amvetsetse momwe zonse zimagwirira ntchito ku Kubernetes. Kubernetes ndithudi ndi teknoloji yophweka, ngati iwo akufuna kuiphunzira akudziwa komwe imagwiritsiridwa ntchito.

Tsopano, popanda kuchedwa, tiyeni tiyambe ndi kukambirana za pulogalamu yomwe tikhala tikugwira nayo ntchito.

Kugwiritsa ntchito moyeserera

Ntchito yathu idzachita ntchito imodzi yokha. Zimatengera chiganizo chimodzi monga chothandizira, pambuyo pake, pogwiritsa ntchito zida zowunikira malemba, amafufuza maganizo a chiganizochi, kupeza kuwunika kwa maganizo a wolemba chiganizo ku chinthu china.

Izi ndi zomwe zenera lalikulu la pulogalamuyi limawonekera.

Maphunziro a Kubernetes Gawo 1: Mapulogalamu, Microservices, ndi Containers
Kugwiritsa ntchito pa intaneti pakusanthula kwamawu

Kuchokera pamalingaliro aukadaulo, kugwiritsa ntchito kumakhala ndi ma microservices atatu, omwe amathetsa ntchito zingapo:

  • SA-Frontend ndi seva ya intaneti ya Nginx yomwe imagwiritsa ntchito mafayilo a static React.
  • SA-WebApp ndi pulogalamu yapaintaneti yolembedwa mu Java yomwe imayang'anira zopempha kuchokera kutsogolo.
  • SA-Logic ndi pulogalamu ya Python yomwe imasanthula malingaliro pamawu.

Ndikofunikira kudziwa kuti ma microservices sapezeka paokha. Amagwiritsa ntchito lingaliro la "kulekana kwa maudindo", koma nthawi yomweyo ayenera kuyanjana wina ndi mzake.

Maphunziro a Kubernetes Gawo 1: Mapulogalamu, Microservices, ndi Containers
Deta imayenda mu pulogalamu

Pachithunzi pamwambapa, mutha kuwona magawo owerengeka a dongosolo, kuwonetsa mayendedwe a data mukugwiritsa ntchito. Tiyeni tiwone iwo:

  1. Msakatuli amapempha fayilo kuchokera ku seva index.html (yomwe imatsitsanso phukusi la React application).
  2. Wogwiritsa ntchito amalumikizana ndi pulogalamuyi, izi zimapangitsa kuyimbira foni ku pulogalamu yapaintaneti ya Spring.
  3. Pulogalamu yapaintaneti imatumiza pempho loti mufufuze zolemba ku pulogalamu ya Python.
  4. Ntchito ya Python imapanga kusanthula kwamalingaliro ndikubwezera zotsatirazo ngati kuyankha pempholo.
  5. Pulogalamu ya Spring imatumiza yankho ku React application (yomwe imasonyeza zotsatira za kusanthula kwa malemba kwa wogwiritsa ntchito).

Khodi ya mapulogalamu onsewa ikupezeka apa. Ndikupangira kuti mukopere panokha malowa pakali pano, popeza pali zoyeserera zambiri zosangalatsa nazo patsogolo pathu.

Kuyendetsa pulogalamu ya microservices pamakina akomweko

Kuti pulogalamuyo igwire ntchito, tifunika kuyambitsa ma microservice onse atatu. Tiyeni tiyambe ndi odula kwambiri mwa onsewo - kugwiritsa ntchito kumapeto.

▍Konzani React kuti mupite patsogolo kwanuko

Kuti muthe kugwiritsa ntchito React application, muyenera kukhazikitsa nsanja ya Node.js ndi NPM pa kompyuta yanu. Mukangoyika zonsezi, gwiritsani ntchito terminal kuti mupite ku foda yanu ya projekiti sa-frontend ndikuyendetsa lamulo ili:

npm install

Poyendetsa lamulo ili mufoda node_modules kudalira kwa React application kudzakwezedwa, zolemba zomwe zili mufayilo package.json. Zodalira zikatsitsidwa mufoda yomweyo, yesani lamulo ili:

npm start

Ndizomwezo. Tsopano pulogalamu ya React ikugwira ntchito, mutha kuyipeza popita ku adilesi iyi mu msakatuli wanu: localhost:3000. Mutha kusintha china chake mu code yake. Mudzawona nthawi yomweyo zotsatira za kusintha kumeneku mu msakatuli. Izi ndizotheka chifukwa cha zomwe zimatchedwa "hot" m'malo mwa ma module. Izi zimapangitsa chitukuko chakutsogolo kukhala chosavuta komanso chosangalatsa.

▍Kukonzekera pulogalamu ya React kuti ipangidwe

Kuti tigwiritse ntchito pulogalamu ya React, tiyenera kuyisintha kukhala mafayilo osasunthika ndikuwatumizira makasitomala pogwiritsa ntchito seva yapaintaneti.

Kuti mupange pulogalamu ya React, pogwiritsa ntchito terminal, yendani kufoda sa-frontend ndikuyendetsa lamulo ili:

npm run build

Izi zipanga chikwatu mufoda ya polojekiti build. Ikhala ndi mafayilo onse osasunthika ofunikira kuti pulogalamu ya React igwire ntchito.

▍Kupereka mafayilo osasintha pogwiritsa ntchito Nginx

Choyamba muyenera kukhazikitsa ndikuyendetsa seva ya intaneti ya Nginx. ndi mukhoza kukopera ndi kupeza malangizo a mmene kukhazikitsa ndi kuthamanga izo. Kenako muyenera kukopera zomwe zili mufoda sa-frontend/build ku folda [your_nginx_installation_dir]/html.

Ndi njirayi, fayilo imapangidwa panthawi yomanga pulogalamu ya React index.html ipezeka pa [your_nginx_installation_dir]/html/index.html. Ili ndiye fayilo yomwe, mwachisawawa, seva ya Nginx imapanga ikafika. Seva yakonzedwa kuti imvere padoko 80, koma ikhoza kusinthidwa momwe mukufunira posintha fayilo [your_nginx_installation_dir]/conf/nginx.conf.

Tsopano tsegulani msakatuli wanu ndikupita ku localhost:80. Mudzawona tsamba la React application.

Maphunziro a Kubernetes Gawo 1: Mapulogalamu, Microservices, ndi Containers
React application yotumizidwa ndi seva ya Nginx

Ngati inu tsopano kulowa chinachake m'munda Type your sentence ndipo dinani batani Send - palibe chomwe chidzachitike. Koma, ngati muyang'ana pa console, mukhoza kuwona mauthenga olakwika pamenepo. Kuti timvetsetse komwe zolakwika izi zimachitika, tiyeni tiwunike nambala yofunsira.

▍Kusanthula manambala a ntchito zakutsogolo

Kutengera mtundu wa fayilo App.js, titha kuwona kuti kukanikiza batani Send kuyitana njira analyzeSentence(). Khodi ya njirayi yaperekedwa pansipa. Chonde dziwani kuti pamzere uliwonse womwe uli ndi ndemanga ya fomu # Номер, pali kufotokozera komwe kwaperekedwa pansipa. Tidzasanthula zidutswa zina zama code mwanjira yomweyo.

analyzeSentence() {
    fetch('http://localhost:8080/sentiment', {  // #1
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        },
        body: JSON.stringify({
                       sentence: this.textField.getValue()})// #2
    })
        .then(response => response.json())
        .then(data => this.setState(data));  // #3
}

1. Ulalo womwe pempho la POST limapangidwira. Zimaganiziridwa kuti pali pulogalamu pa adilesi iyi yomwe ikuyembekezera zopempha zoterezi.

2.Bungwe la pempho latumizidwa ku pempho. Nachi chitsanzo chofunsira bungwe:

{
    sentence: "I like yogobella!"
}

3.Yankho la pempho likalandiridwa, chikhalidwe cha gawoli chimasinthidwa. Izi zimapangitsa kuti gawolo liperekedwenso. Ngati tilandira deta (ndiko kuti, chinthu cha JSON chomwe chili ndi data yolowetsa ndi zolemba zowerengedwera), tidzatulutsa chigawocho. Polarity, popeza mikhalidwe yoyenera idzakwaniritsidwa. Umu ndi momwe timafotokozera chigawocho:

const polarityComponent = this.state.polarity !== undefined ?
    <Polarity sentence={this.state.sentence} 
              polarity={this.state.polarity}/> :
    null;

Code ikuwoneka kuti ikugwira ntchito bwino. Chalakwika ndi chiyani ndi izi, komabe? Ngati mukuganiza kuti ku adilesi yomwe pulogalamuyo ikuyesera kutumiza pempho la POST, palibe chomwe chingavomereze ndikuyankha pempholi, ndiye kuti mudzakhala olondola. Mwakutero, kukonza zopempha zolandilidwa pa http://localhost:8080/sentiment, tikuyenera kuyendetsa pulogalamu yapaintaneti kutengera Spring.

Maphunziro a Kubernetes Gawo 1: Mapulogalamu, Microservices, ndi Containers
Tikufuna pulogalamu ya Spring yomwe ingavomereze pempho la POST

▍Kukhazikitsa pulogalamu yapa intaneti ya Spring

Kuti mugwiritse ntchito pulogalamu ya Spring, mudzafunika JDK8 ndi Maven ndikusinthidwa moyenera ndi chilengedwe. Mukayika zonsezi, mutha kupitiliza kugwira ntchito yathu.

▍Kuyika pulogalamu mumtsuko

Yendetsani, pogwiritsa ntchito terminal, kupita ku foda sa-webapp ndipo lowetsani lamulo ili:

mvn install

Pambuyo kuthamanga lamulo mu chikwatu sa-webapp chikwatu chidzapangidwa target. Apa ndipamene pulogalamu ya Java idzapezeke, yoyikidwa mu fayilo ya mtsuko, yoimiridwa ndi fayilo sentiment-analysis-web-0.0.1-SNAPSHOT.jar.

▍Kuyendetsa pulogalamu ya Java

Pitani ku foda target ndikuyendetsa pulogalamuyi ndi lamulo ili:

java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jar

Kulakwitsa kudzachitika potsatira lamuloli. Kuti tiyambe kukonza, titha kusanthula zambiri zomwe zili mu stack trace data:

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}"

Kwa ife, chofunika kwambiri apa ndi kutchulidwa kwa zosatheka kulongosola tanthauzo sa.logic.api.url. Tiyeni tiwunike kachidindo komwe cholakwikacho chimachitika.

▍Kusanthula kwa ma code a Java

Nayi mawu a code pomwe cholakwika chimachitika.

@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();
    }
}

  1. Mu SentimentController pali munda saLogicApiUrl. Mtengo wake umafotokozedwa ndi katundu sa.logic.api.url.
  2. Mzere saLogicApiUrl zimagwirizana ndi mtengo /analyse/sentiment. Onse pamodzi amapanga adilesi yoyimbira foni ku microservice yomwe imasanthula zolemba.

▍ Khazikitsani mtengo wa katundu

Mu Spring, gwero lazinthu zamtengo wapatali ndi fayilo application.properties, yomwe imapezeka pa sa-webapp/src/main/resources. Koma kugwiritsa ntchito kwake si njira yokhayo yokhazikitsira mitengo ya katundu. Izi zitha kuchitikanso pogwiritsa ntchito lamulo ili:

java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jar --sa.logic.api.url=WHAT.IS.THE.SA.LOGIC.API.URL

Mtengo wa malowa uyenera kuloza ku adilesi ya pulogalamu yathu ya Python.

Poyikonza, timauza tsamba lawebusayiti la Spring komwe likuyenera kupita kukafunsa zowunikira.

Kuti tisasokoneze moyo wathu, tisankha kuti pulogalamu ya Python ipezeke localhost:5000 ndipo tiyeni tiyese kuti tisaiwale za izo. Zotsatira zake, lamulo lokhazikitsa pulogalamu ya Spring lidzawoneka motere:

java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jar --sa.logic.api.url=http://localhost:5000

Maphunziro a Kubernetes Gawo 1: Mapulogalamu, Microservices, ndi Containers
Dongosolo lathu likusowa pulogalamu ya Python

Tsopano zomwe tikuyenera kuchita ndikuyendetsa pulogalamu ya Python ndipo dongosololi lidzagwira ntchito momwe tikuyembekezera.

▍Kukhazikitsa pulogalamu ya Python

Kuti mugwiritse ntchito Python, muyenera kukhala ndi Python 3 ndi Pip, ndipo zosintha zoyenera ziyenera kukhazikitsidwa molondola.

▍Kuyika zodalira

Pitani ku chikwatu cha polojekiti yanu sa-logic/sa ndikuyendetsa malamulo awa:

python -m pip install -r requirements.txt
python -m textblob.download_corpora

▍Yambitsani pulogalamuyi

Pambuyo kukhazikitsa zodalira, ndife okonzeka kugwiritsa ntchito:

python sentiment_analysis.py

Pambuyo poyendetsa lamuloli tidzauzidwa kuti:

* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

Izi zikutanthauza kuti pulogalamuyo ikugwira ntchito ndipo ikuyembekezera zopempha pa localhost:5000/

▍Kafukufuku wa Code

Tiyeni tiwone nambala yofunsira Python kuti timvetsetse momwe imayankhira zopempha:

from textblob import TextBlob
from flask import Flask, request, jsonify
app = Flask(__name__)                                   #1
@app.route("/analyse/sentiment", methods=['POST'])      #2
def analyse_sentiment():
    sentence = request.get_json()['sentence']           #3
    polarity = TextBlob(sentence).sentences[0].polarity #4
    return jsonify(                                     #5
        sentence=sentence,
        polarity=polarity
    )
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)                #6

  1. Kuyambitsa chinthu Flask.
  2. Kutchula adilesi yofunsira POST kwa iyo.
  3. Kubweza Katundu sentence kuchokera ku bungwe lopempha.
  4. Kuyambitsa Chinthu Chosadziwika TextBlob ndi kupeza mtengo polarity pa chiganizo choyamba chomwe chinalandiridwa mu thupi la pempho (kwa ife, ichi ndi chiganizo chokha chomwe chimatumizidwa kuti chifufuzidwe).
  5. Kubwezera yankho lomwe thupi lake liri ndi mawu a chiganizo ndi chizindikiro chowerengera polarity.
  6. Yambitsani pulogalamu ya Flask, yomwe ipezeka pa 0.0.0.0:5000 (mutha kuyipezanso pogwiritsa ntchito mawonekedwe a fomu localhost:5000).

Ma microservices omwe amapanga pulogalamuyi akugwira ntchito. Amakonzedwa kuti azilumikizana wina ndi mnzake. Umu ndi momwe chithunzi chogwiritsira ntchito chimawonekera panthawi ino ya ntchito.

Maphunziro a Kubernetes Gawo 1: Mapulogalamu, Microservices, ndi Containers
Ma microservices onse omwe amapanga pulogalamuyi amabweretsedwa kuti agwire ntchito

Tsopano, musanapitilize, tsegulani pulogalamu yanu ya React mumsakatuli ndikuyesera kugawa chiganizo nacho. Ngati zonse zachitika molondola - pambuyo kukanikiza batani Send mudzawona zotsatira zowunikira pansipa pagawo lolemba.

Mu gawo lotsatira, tikambirana momwe tingayendetsere ma microservices athu muzotengera za Docker. Izi ndizofunikira kuti mukonzekere pulogalamuyo kuti igwire ntchito pagulu la Kubernetes.

Zida za Docker

Kubernetes ndi njira yodzipangira okha kutumiza, kukulitsa ndi kuyang'anira mapulogalamu omwe ali ndi zida. Imatchedwanso "container orchestrator". Ngati Kubernetes imagwira ntchito ndi zotengera, ndiye kuti tisanagwiritse ntchito dongosololi tiyenera kupeza zida izi. Koma choyamba, tiyeni tikambirane za zotengera. Mwina yankho labwino kwambiri ku funso lomwe liri lingapezekemo zolemba ku Docker:

Chithunzi cha chidebe ndi phukusi lopepuka, lodzisunga lokha, lomwe lingagwiritsidwe ntchito, lomwe limaphatikizapo zonse zofunika kuti muyigwiritse ntchito: nambala yogwiritsira ntchito, malo ogwirira ntchito, zida zamakina ndi malaibulale, zoikamo. Mapulogalamu ophatikizidwa angagwiritsidwe ntchito m'malo a Linux ndi Windows, ndipo azigwira ntchito chimodzimodzi mosasamala kanthu za zomangamanga.

Izi zikutanthauza kuti zotengera zimatha kuyendetsedwa pakompyuta iliyonse, kuphatikiza ma seva opanga, ndipo zomwe zili mmenemo zimagwiranso ntchito mofananamo kulikonse.

Kuti mufufuze mawonekedwe a zotengera ndikuziyerekeza ndi njira zina zoyendetsera mapulogalamu, tiyeni tiwone chitsanzo chakugwiritsa ntchito pulogalamu ya React pogwiritsa ntchito makina enieni ndi chidebe.

▍Kupereka mafayilo osasinthika a pulogalamu ya React pogwiritsa ntchito makina enieni

Kuyesera kukonza ntchito yamafayilo osasunthika pogwiritsa ntchito makina enieni, tidzakumana ndi zovuta izi:

  1. Kusagwiritsa ntchito bwino zinthu, popeza makina aliwonse amtundu uliwonse ndi makina ogwiritsira ntchito.
  2. Kudalira nsanja. Zomwe zimagwira pakompyuta yakomweko sizingagwire ntchito pa seva yopanga.
  3. Kuchulukitsa pang'onopang'ono komanso kogwiritsa ntchito kwambiri njira yothetsera makina.

Maphunziro a Kubernetes Gawo 1: Mapulogalamu, Microservices, ndi Containers
Seva yapaintaneti ya Nginx yomwe imagwiritsa ntchito mafayilo osasunthika omwe akuyenda pamakina enieni

Ngati zitsulo zimagwiritsidwa ntchito kuthetsa vuto lofananalo, ndiye, poyerekeza ndi makina enieni, mphamvu zotsatirazi zikhoza kudziwika:

  1. Kugwiritsa ntchito moyenera zinthu: kugwira ntchito ndi makina ogwiritsira ntchito Docker.
  2. Platform palokha. Chidebe chomwe wopanga amatha kuyendetsa pakompyuta yake chimagwira ntchito kulikonse.
  3. Kutumiza kopepuka pogwiritsa ntchito zigawo zazithunzi.

Maphunziro a Kubernetes Gawo 1: Mapulogalamu, Microservices, ndi Containers
Seva yapaintaneti ya Nginx yomwe imagwiritsa ntchito mafayilo osasunthika omwe akuyenda mu chidebe

Tinkangoyerekeza makina enieni ndi zotengera pamfundo zochepa, koma ngakhale izi ndizokwanira kuti timve mphamvu zazotengera. ndi Mutha kupeza zambiri zazotengera za Docker.

▍Kupanga chithunzi chotengera pulogalamu ya React

Chomwe chimamanga chotengera cha Docker ndi fayilo Dockerfile. Kumayambiriro kwa fayiloyi, mbiri imapangidwa ndi chithunzi chapansi cha chidebecho, ndiye pali ndondomeko ya malangizo omwe amasonyeza momwe angapangire chidebe chomwe chidzakwaniritse zosowa za ntchito inayake.

Tisanayambe kugwira ntchito ndi fayilo Dockerfile, tiyeni tikumbukire zomwe tidachita pokonzekera mafayilo a React kuti akweze ku seva ya Nginx:

  1. Kupanga phukusi la React application (npm run build).
  2. Kuyambira seva ya Nginx.
  3. Kukopera zachikwatu build kuchokera ku chikwatu cha polojekiti sa-frontend ku chikwatu cha seva nginx/html.

Pansipa mutha kuwona kufanana pakati pa kupanga chidebe ndi masitepe omwe ali pamwambapa omwe amachitidwa pakompyuta yanu.

▍Kukonzekera Dockerfile ya pulogalamu ya SA-Frontend

Malangizo omwe aperekedwa mu Dockerfile ntchito SA-Frontend, imakhala ndi magulu awiri okha. Chowonadi ndi chakuti gulu lachitukuko la Nginx lakonzekera zoyambira chithunzi kwa Nginx, yomwe tidzagwiritsa ntchito kupanga chithunzi chathu. Izi ndi njira ziwiri zomwe tiyenera kufotokoza:

  1. Maziko a chithunzicho ayenera kukhala chithunzi cha Nginx.
  2. Zamkatimu Foda sa-frontend/build ziyenera kukopera ku chikwatu cha zithunzi nginx/html.

Ngati muchoka pakufotokozeraku kupita ku fayilo Dockerfile, ndiye zidzawoneka motere:

FROM nginx
COPY build /usr/share/nginx/html

Monga mukuonera, zonse apa ndizosavuta, ndipo zomwe zili mufayilo zimakhala zomveka komanso zomveka. Fayiloyi imauza makina kuti atenge chithunzicho nginx ndi zonse zomwe zilimo kale, ndi kukopera zomwe zili mu bukhuli build ku directory nginx/html.

Apa mutha kukhala ndi funso lokhudza momwe ndingadziwire komwe muyenera kukopera mafayilo kuchokera pafoda build, ndiko kuti, kumene njirayo inachokera /usr/share/nginx/html. Ndipotu, palibenso chovuta apa. Chowonadi ndi chakuti chidziwitso choyenera chingapezeke mu kufotokoza chithunzi.

▍Kumanga chithunzicho ndikuchiyika kunkhokwe

Tisanagwire ntchito ndi chithunzi chomalizidwa, tiyenera kukankhira kumalo osungirako zithunzi. Kuti tichite izi, tidzagwiritsa ntchito nsanja yaulere yamtambo ya Docker Hub. Munthawi imeneyi ya ntchito muyenera kuchita zotsatirazi:

  1. Ikani Docker.
  2. Lembani patsamba la Docker Hub.
  3. Lowani muakaunti yanu poyendetsa lamulo ili mu terminal:
    docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"

Tsopano muyenera kugwiritsa ntchito terminal kuti mupite ku chikwatu sa-frontend ndikuyendetsa lamulo ili pamenepo:

docker build -f Dockerfile -t $DOCKER_USER_ID/sentiment-analysis-frontend .

Apa ndi kupitirira mu malamulo ofanana $DOCKER_USER_ID iyenera kusinthidwa ndi dzina lanu la Docker Hub. Mwachitsanzo, gawo ili la lamulo likhoza kuwoneka motere: rinormaloku/sentiment-analysis-frontend.

Pamenepa, lamulo ili likhoza kufupikitsidwa pochotsamo -f Dockerfile, popeza fayiloyi ilipo kale mufoda yomwe tikuchita izi.

Kuti titumize chithunzi chomalizidwa kumalo osungira, tifunika lamulo ili:

docker push $DOCKER_USER_ID/sentiment-analysis-frontend

Mukamaliza, yang'anani mndandanda wazosungira zanu pa Docker Hub kuti mumvetsetse ngati kuyika chithunzicho pamtambo wosungirako kunapambana.

▍Kuyendetsa chidebe

Tsopano aliyense akhoza kukopera ndi kuyendetsa fano, lotchedwa $DOCKER_USER_ID/sentiment-analysis-frontend. Kuti muchite izi, muyenera kuyendetsa motsatira malamulo:

docker pull $DOCKER_USER_ID/sentiment-analysis-frontend
docker run -d -p 80:80 $DOCKER_USER_ID/sentiment-analysis-frontend

Tsopano chidebecho chikuyenda, titha kupitiliza kugwira ntchito popanga zithunzi zina zomwe tikufuna. Koma tisanapitilize, tiyeni timvetsetse kapangidwe kake 80:80, yomwe imapezeka mu lamulo loyambitsa fano ndipo ingawoneke yosokoneza.

  • Nambala yoyamba 80 - iyi ndi nambala ya doko (ndiko kuti, kompyuta yakomweko).
  • Nambala yachiwiri 80 ndi doko la chidebe chomwe pempho liyenera kutumizidwa.

Taonani fanizo ili.

Maphunziro a Kubernetes Gawo 1: Mapulogalamu, Microservices, ndi Containers
Port Forwarding

Dongosolo limalozeranso zopempha kuchokera padoko <hostPort> ku doko <containerPort>. Ndiko kuti, kupeza doko 80 kompyuta imalowetsedwa ku doko 80 chotengera.

Kuyambira padoko 80 tsegulani pakompyuta yapafupi, ndiye mutha kugwiritsa ntchito pulogalamuyi kuchokera pakompyutayi localhost:80. Ngati dongosolo lanu siligwirizana ndi Docker, pulogalamuyi imatha kuyendetsedwa pamakina a Docker, omwe adilesi yake idzawoneka ngati. <docker-machine ip>:80. Kuti mudziwe adilesi ya IP ya makina enieni a Docker, mutha kugwiritsa ntchito lamuloli docker-machine ip.

Pakadali pano, mutayambitsa bwino chidebe chakumapeto chakutsogolo, muyenera kutsegula tsamba lake mumsakatuli.

▍Fayilo ya .dockerignore

Kusonkhanitsa chithunzi cha pulogalamu SA-Frontend, titha kuzindikira kuti njirayi imakhala yochedwa kwambiri. Izi zimachitika chifukwa mawonekedwe opangira zithunzi ayenera kutumizidwa ku daemon ya Docker. Chikwatu chomwe chikuyimira nkhani yomanga chimatchulidwa ngati mtsutso womaliza wa lamulo docker build. Kwa ife, pali kadontho kumapeto kwa lamulo ili. Izi zimapangitsa kuti dongosolo lotsatirali liphatikizidwe munkhani yomanga:

sa-frontend:
|   .dockerignore
|   Dockerfile
|   package.json
|   README.md
+---build
+---node_modules
+---public
---src

Koma pa zikwatu zonse zomwe zilipo pano, timangofunikira chikwatucho build. Kukweza china chilichonse ndikungotaya nthawi. Mutha kufulumizitsa kumangako pouza Docker kuti ndi zolemba ziti zomwe siziyenera kunyalanyazidwa. Ndi kuti tichite izi timafunikira fayilo .dockerignore. Inu, ngati mumadziwa fayilo .gitignore, kapangidwe ka fayiloyi mwina kuwoneka kodziwika. Imalemba zolemba zomwe mawonekedwe omanga zithunzi anganyalanyaze. Kwa ife, zomwe zili mufayiloyi zikuwoneka motere:

node_modules
src
public

file .dockerignore iyenera kukhala mufoda yofanana ndi fayilo Dockerfile. Tsopano kumanga fano kudzatenga masekondi.

Tiyeni tsopano tigwiritse ntchito chithunzi cha Java application.

▍Kupanga chithunzi cha chidebe cha pulogalamu ya Java

Mukudziwa chiyani, mwaphunzira kale zonse zomwe muyenera kudziwa kuti mupange zithunzi zachidebe. Ndicho chifukwa chake gawoli lidzakhala lalifupi kwambiri.

Tsegulani fayilo Dockerfileyomwe ili mufoda ya polojekiti sa-webapp. Ngati muwerenga zolemba za fayiloyi, muwona zomanga zatsopano ziwiri momwemo, kuyambira ndi mawu osakira ENV и EXPOSE:

ENV SA_LOGIC_API_URL http://localhost:5000
…
EXPOSE 8080

Mawu osakira ENV Imakulolani kuti mulengeze zosintha zachilengedwe mkati mwazotengera za Docker. Makamaka, kwa ife, zimakupatsani mwayi wofotokozera ulalo kuti mupeze API ya pulogalamu yomwe imasanthula zolemba.

Mawu osakira EXPOSE limakupatsani mwayi wouza Docker kuti atsegule doko. Tidzagwiritsa ntchito dokoli poyendetsa pulogalamuyi. Apa mutha kuwona kuti mu Dockerfile ntchito SA-Frontend palibe lamulo lotere. Izi ndizongolemba zokha, mwa kuyankhula kwina, kumanga uku kumapangidwira kwa amene awerenga Dockerfile.

Kumanga chithunzicho ndikuchikankhira kumalo osungirako kumawoneka chimodzimodzi monga momwe zinalili kale. Ngati simunadalirebe kwambiri luso lanu, malamulo ofananira angapezeke mufayilo README.md mu chikwatu sa-webapp.

▍Kupanga chithunzi chotengera pulogalamu ya Python

Ngati muyang'ana zomwe zili mufayiloyo Dockerfile mu chikwatu sa-logic, ndiye kuti simungapeze china chatsopano kwa inu nokha. Malamulo omanga chithunzicho ndikuchitumiza kumalo osungirako ayeneranso kukhala odziwika kwa inu, koma, monga momwe zilili ndi mapulogalamu athu ena, atha kupezeka mufayilo. README.md mu chikwatu sa-logic.

▍Kuyesa mapulogalamu omwe ali m'mitsuko

Kodi mungakhulupirire zomwe simunayese? Inenso sindingathe. Tiyeni tiyese zotengera zathu.

  1. Tiyeni tiyambitse chidebe cha pulogalamu sa-logic ndikuyikonza kuti imvere padoko 5050:
    docker run -d -p 5050:5000 $DOCKER_USER_ID/sentiment-analysis-logic
  2. Tiyeni tiyambitse chidebe cha pulogalamu sa-webapp ndikuyikonza kuti imvere padoko 8080. Kuphatikiza apo, tiyenera kukonza doko lomwe pulogalamu ya Python idzamvera zopempha kuchokera ku Java application poperekanso kusintha kwa chilengedwe. 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

Kuti mudziwe momwe mungadziwire adilesi ya IP ya chidebe cha Docker kapena makina enieni, onani fayilo YERENGANI.

Tiyeni tiyambitse chidebe cha pulogalamu sa-frontend:

docker run -d -p 80:80 $DOCKER_USER_ID/sentiment-analysis-frontend

Tsopano zonse zakonzeka kupita ku adilesi mu msakatuli localhost:80 ndikuyesa kugwiritsa ntchito.

Chonde dziwani kuti ngati mwasintha doko sa-webapp, kapena ngati mukuyendetsa makina a Docker, muyenera kusintha fayilo App.js kuchokera mufoda sa-frontendposintha adilesi ya IP kapena nambala yadoko munjira analyzeSentence(), kulowetsa zomwe zilipo panopa m'malo mwa deta yakale. Pambuyo pake, muyenera kusonkhanitsanso chithunzicho ndikuchigwiritsa ntchito.

Umu ndi momwe chithunzi chathu chogwiritsira ntchito chikuwonekera tsopano.

Maphunziro a Kubernetes Gawo 1: Mapulogalamu, Microservices, ndi Containers
Ma Microservices amayendetsedwa muzotengera

Chidule cha nkhaniyi: chifukwa chiyani timafunikira gulu la Kubernetes?

Tangoyang'ana mafayilo Dockerfile, adalankhula za momwe angapangire zithunzi ndikukankhira kumalo osungirako a Docker. Kuphatikiza apo, taphunzira momwe mungafulumizire kusonkhana kwazithunzi pogwiritsa ntchito fayilo .dockerignore. Zotsatira zake, ma microservices athu tsopano akuyenda muzotengera za Docker. Apa mutha kukhala ndi funso lomveka bwino chifukwa chake timafunikira Kubernetes. Mbali yachiwiri ya nkhaniyi idzayankha funsoli. Pakali pano, ganizirani funso ili:
Tiyerekeze kuti pulogalamu yathu yosanthula mawu yakhala yotchuka padziko lonse lapansi. Mamiliyoni a zopempha zimabwera kwa iye mphindi iliyonse. Izi zikutanthauza kuti microservices sa-webapp и sa-logic adzakhala ndi katundu wochuluka. Momwe mungakulitsire zotengera zomwe zikuyenda ma microservices?

Maphunziro a Kubernetes Gawo 1: Mapulogalamu, Microservices, ndi Containers

Source: www.habr.com

Kuwonjezera ndemanga