Koyarwar Kubernetes Sashe na 1: Aikace-aikace, Microservices, da Kwantena

Bisa roƙonmu, Habr ya ƙirƙiri cibiya Kubernetes kuma mun yi farin cikin sanya littafin farko a ciki. Biyan kuɗi!

Kubernetes yana da sauƙi. Me ya sa bankuna ke biyana makudan kudade don yin aiki a wannan fanni, alhali kuwa kowa zai iya sanin wannan fasaha cikin ‘yan sa’o’i kadan?

Koyarwar Kubernetes Sashe na 1: Aikace-aikace, Microservices, da Kwantena

Idan kuna shakka cewa Kubernetes za a iya koya da sauri, Ina ba da shawarar ku gwada yin shi da kanku. Wato, bayan ƙware wannan kayan, zaku sami damar gudanar da aikace-aikacen da ya danganci ƙananan sabis a cikin gungu na Kubernetes. Zan iya ba da garantin wannan, saboda a cikin tsarin da nake amfani da shi anan ne nake koya wa abokan cinikinmu yadda ake aiki da Kubernetes. Menene ya bambanta wannan jagorar da sauran? A gaskiya, abubuwa da yawa. Don haka, yawancin waɗannan kayan suna farawa tare da bayanin abubuwa masu sauƙi - ra'ayoyin Kubernetes da fasali na umarnin kubectl. Marubutan waɗannan labaran suna ɗauka cewa mai karatun su ya saba da haɓaka aikace-aikacen, microservices, da kwantena Docker. Za mu bi ta wata hanya. Da farko, bari mu yi magana game da yadda ake gudanar da aikace-aikacen bisa ga ƙananan ayyuka a kan kwamfuta. Sa'an nan kuma za mu dubi ginin gine-ginen gine-gine don kowane microservice. Kuma bayan haka, za mu saba da Kubernetes kuma za mu bincika ƙaddamar da aikace-aikacen da ke kan ƙananan sabis a cikin gungu wanda Kubernetes ke gudanarwa.

Wannan hanyar, tare da sannu-sannu zuwa Kubernetes, zai ba da zurfin fahimtar abin da ke faruwa wanda matsakaicin mutum ke bukata don fahimtar yadda kawai aka tsara komai a Kubernetes. Kubernetes tabbas fasaha ce mai sauƙi, muddin duk wanda ke son sanin ta ya san inda kuma yadda ake amfani da ita.

Yanzu, ba tare da ɓata lokaci ba, bari mu fara aiki kuma muyi magana game da aikace-aikacen da za mu yi aiki da su.

App na gwaji

Aikace-aikacenmu zai yi aiki ɗaya kawai. Yana ɗaukar, a matsayin shigarwa, jimla ɗaya, bayan haka, ta amfani da kayan aikin nazarin rubutu, yana yin nazarin ra'ayi na wannan jimla, yana samun kimanta halayen halayen marubucin jimlar zuwa wani abu.

Wannan shine yadda babban taga wannan application yayi kama.

Koyarwar Kubernetes Sashe na 1: Aikace-aikace, Microservices, da Kwantena
Aikace-aikacen Yanar Gizo na Analysis Sentiment

Daga ra'ayi na fasaha, aikace-aikacen ya ƙunshi microservices guda uku, kowannensu yana warware wasu ayyuka:

  • SA-Frontend sabar gidan yanar gizo ce ta Nginx wacce ke ba da fayilolin React a tsaye.
  • SA-WebApp aikace-aikacen yanar gizo ne da aka rubuta a cikin Java wanda ke sarrafa buƙatun daga gaba.
  • SA-Logic aikace-aikacen Python ne wanda ke yin nazarin tunanin rubutu.

Yana da mahimmanci a lura cewa microservices ba su wanzu a ware. Suna aiwatar da ra'ayin "rabuwar ayyuka", amma su, a lokaci guda, suna buƙatar yin hulɗa da juna.

Koyarwar Kubernetes Sashe na 1: Aikace-aikace, Microservices, da Kwantena
Bayanai suna gudana a cikin aikace-aikacen

A cikin zanen da ke sama, zaku iya ganin matakan ƙididdiga na tsarin, suna kwatanta bayanan da ke gudana a cikin aikace-aikacen. Bari mu karya su:

  1. Mai lilo yana buƙatar fayil daga uwar garken index.html (wanda kuma yana loda kunshin React app).
  2. Mai amfani yana hulɗa tare da aikace-aikacen, wannan yana haifar da kira zuwa aikace-aikacen yanar gizo dangane da lokacin bazara.
  3. Aikace-aikacen gidan yanar gizon yana tura buƙatun don rarraba rubutun zuwa aikace-aikacen Python.
  4. Aikace-aikacen Python yana nazarin ra'ayin rubutun kuma yana mayar da sakamakon a matsayin amsa ga buƙatar.
  5. Aikace-aikacen bazara yana aika da martani ga aikace-aikacen React (wanda, bi da bi, yana nuna sakamakon rubutun da aka yi wa mai amfani).

Ana iya samun lambar duk waɗannan aikace-aikacen a nan. Ina ba da shawarar ku kwafi wannan ma'ajiyar wa kanku a yanzu, saboda akwai gwaje-gwaje masu ban sha'awa da yawa tare da shi a gabanmu.

Gudanar da aikace-aikace dangane da ƙananan sabis akan na'ura na gida

Domin aikace-aikacen ya yi aiki, muna buƙatar fara duk microservices guda uku. Bari mu fara da mafi kyawun su - aikace-aikacen gaba-gaba.

▍Kafa React don ci gaban gida

Domin gudanar da aikace-aikacen React, kuna buƙatar shigar da tsarin Node.js da NPM akan kwamfutarka. Bayan kun shigar da duk wannan, je zuwa amfani da tashar zuwa babban fayil ɗin aikin sa-frontend kuma gudanar da umarni mai zuwa:

npm install

Ta hanyar aiwatar da wannan umarni a cikin babban fayil node_modules Za a loda abubuwan dogaro na aikace-aikacen React, bayanan da ke cikin fayil ɗin package.json. Bayan zazzage abubuwan dogaro a cikin babban fayil guda, gudanar da umarni mai zuwa:

npm start

Shi ke nan. React app yanzu yana gudana kuma ana iya samun dama ga shi ta hanyar kewayawa zuwa adireshin burauzar localhost:3000. Kuna iya canza wani abu a lambar sa. Nan da nan za ku ga tasirin waɗannan canje-canje a cikin mai binciken. Wannan yana yiwuwa godiya ga abin da ake kira "zafi" maye gurbin kayayyaki. Godiya ga wannan, ci gaban gaba-gaba ya juya zuwa ƙwarewa mai sauƙi kuma mai daɗi.

▍Shirya React app don samarwa

Don dalilan yin amfani da app na React a zahiri, muna buƙatar mu canza shi zuwa saitin fayiloli na tsaye kuma mu yi musu hidima ga abokan ciniki ta amfani da sabar yanar gizo.

Don gina React app, sake amfani da tashar tashar, kewaya zuwa babban fayil ɗin sa-frontend kuma gudanar da umarni mai zuwa:

npm run build

Wannan zai haifar da shugabanci a cikin babban fayil ɗin aikin build. Zai ƙunshi duk fayilolin tsaye da ake buƙata don aikace-aikacen React yayi aiki.

▍ Hidimar da fayiloli a tsaye tare da Nginx

Da farko kuna buƙatar shigarwa da gudanar da sabar gidan yanar gizon Nginx. Yana da za ka iya zazzage shi kuma nemo umarni don shigarwa da gudanar da shi. Sannan kuna buƙatar kwafi abubuwan da ke cikin babban fayil ɗin sa-frontend/build zuwa babban fayil [your_nginx_installation_dir]/html.

Tare da wannan hanyar, fayil ɗin da aka samar yayin taron aikace-aikacen React index.html za a samu a [your_nginx_installation_dir]/html/index.html. Wannan shine fayil ɗin wanda, ta tsohuwa, uwar garken Nginx ke fitowa lokacin samun dama gare shi. An saita uwar garken don sauraron tashar tashar jiragen ruwa 80, amma kuna iya tsara shi yadda kuke so ta hanyar gyara fayil ɗin [your_nginx_installation_dir]/conf/nginx.conf.

Yanzu bude browser kuma je zuwa localhost:80. Za ku ga shafin React app.

Koyarwar Kubernetes Sashe na 1: Aikace-aikace, Microservices, da Kwantena
React app ta uwar garken Nginx

Idan yanzu kun shigar da wani abu a cikin filin Type your sentence kuma danna maɓallin Send - babu abin da zai faru. Amma, idan kun kalli na'urar bidiyo, zaku iya ganin saƙonnin kuskure a wurin. Domin fahimtar ainihin inda waɗannan kurakuran suka faru, bari mu bincika lambar aikace-aikacen.

▍Analysis na code na gaban-karshen aikace-aikace

Ana duba lambar fayil ɗin App.js, za mu iya ganin cewa danna kan button Send kira hanya analyzeSentence(). Ana nuna lambar wannan hanyar a ƙasa. A lokaci guda, kula da gaskiyar cewa ga kowane layi wanda akwai sharhin nau'in # Номер, akwai bayanin da aka bayar a ƙasa lambar. Hakazalika, za mu tantance wasu gutsuttsuran lambobin.

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. URL ɗin da aka yi buƙatar POST. Ana tsammanin wannan adireshin aikace-aikace ne da ke jiran irin waɗannan buƙatun.

2.Ƙungiyar buƙatar da aka aika zuwa aikace-aikacen. Ga misalin ƙungiyar buƙatar:

{
    sentence: "I like yogobella!"
}

3.Lokacin da aka karɓi amsa ga buƙata, ana sabunta yanayin ɓangaren. Wannan yana sa sashin sake sakewa. Idan muka karɓi bayanai (wato, wani abu JSON mai ɗauke da bayanan da aka shigar da makin rubutu da aka ƙididdige), za mu fitar da sashin. Polaritymuddin sharuddan sun cika. Ga yadda muka bayyana bangaren:

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

Da alama lambar tana aiki sosai. Me ke faruwa a nan, ko yaya? Idan kun ɗauka cewa a adireshin da aikace-aikacen ke ƙoƙarin aika buƙatun POST, har yanzu babu wani abu da zai iya karɓa da aiwatar da wannan buƙatar, to za ku yi daidai. Wato, don aiwatar da buƙatun da ke zuwa ga adireshin http://localhost:8080/sentiment, muna buƙatar gudanar da aikace-aikacen yanar gizo dangane da lokacin bazara.

Koyarwar Kubernetes Sashe na 1: Aikace-aikace, Microservices, da Kwantena
Muna buƙatar aikace-aikacen bazara wanda zai iya karɓar buƙatar POST

▍Shigar da aikace-aikacen yanar gizo dangane da lokacin bazara

Domin tura aikace-aikacen bazara, kuna buƙatar JDK8 da Maven da kuma daidaita masu canjin yanayi yadda ya kamata. Bayan kun shigar da duk wannan, zaku iya ci gaba da aiki akan aikinmu.

▍Kiɗa aikace-aikacen cikin fayil ɗin jar

Kewaya, ta amfani da tashar tashar, zuwa babban fayil sa-webapp kuma shigar da umarni mai zuwa:

mvn install

Bayan aiwatar da wannan umarni a cikin babban fayil sa-webapp za a ƙirƙiri kundin adireshi target. Anan ne aikace-aikacen Java zai kasance, an tattara shi cikin fayil ɗin jar, wanda fayil ɗin ke wakilta sentiment-analysis-web-0.0.1-SNAPSHOT.jar.

▍An ƙaddamar da aikace-aikacen Java

Je zuwa babban fayil target kuma gudanar da aikace-aikacen tare da umarni mai zuwa:

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

Kuskure zai faru yayin aiwatar da wannan umarni. Don fara gyara shi, za mu iya rarraba bayanan keɓanta a cikin bayanan tari:

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

A gare mu, abu mafi mahimmanci a nan shi ne ambaton rashin yiwuwar bayyana ma'anar sa.logic.api.url. Bari mu bincika lambar inda kuskuren ya faru.

▍ Binciken lambar aikace-aikacen Java

Anan ga snippet code inda kuskuren ya faru.

@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. In SentimentController akwai filin saLogicApiUrl. An saita ƙimar sa ta dukiya sa.logic.api.url.
  2. Layi saLogicApiUrl concatenates da darajar /analyse/sentiment. Tare suna samar da adireshi don yin kira zuwa microservice wanda ke yin nazarin rubutu.

▍Saida darajar dukiya

A cikin bazara, asalin asalin ƙimar dukiya shine fayil application.properties, wanda za a iya samu a sa-webapp/src/main/resources. Amma amfani da ita ba ita ce kaɗai hanyar saita ƙimar dukiya ba. Hakanan zaka iya yin wannan tare da umarni mai zuwa:

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

Ya kamata darajar wannan kadarorin ta nuna adireshin aikace-aikacen mu na Python.

Ta hanyar daidaita shi, muna gaya wa aikace-aikacen gidan yanar gizo na bazara inda yake buƙatar zuwa don yin buƙatun tantancewar rubutu.

Don kada mu dagula rayuwarmu, za mu yanke shawarar cewa za a sami aikace-aikacen Python a localhost:5000 kuma ka yi ƙoƙari kada ka manta game da shi. Sakamakon haka, umarnin fara aikace-aikacen bazara zai yi kama da haka:

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

Koyarwar Kubernetes Sashe na 1: Aikace-aikace, Microservices, da Kwantena
Tsarin mu ya rasa aikace-aikacen Python

Yanzu dole ne mu gudanar da aikace-aikacen Python kuma tsarin zai yi aiki kamar yadda aka zata.

▍Shigar da aikace-aikacen Python

Domin gudanar da aikace-aikacen Python, dole ne a sanya Python 3 da Pip, kuma dole ne a saita masu canjin yanayi daidai.

▍ Sanya abubuwan dogaro

Jeka babban fayil ɗin aikin sa-logic/sa kuma gudanar da umarni masu zuwa:

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

▍ Ƙaddamar da app

Tare da shigar da abubuwan dogaro, muna shirye don gudanar da aikace-aikacen:

python sentiment_analysis.py

Bayan aiwatar da wannan umarni, za a gaya mana kamar haka:

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

Wannan yana nufin cewa aikace-aikacen yana gudana kuma yana jiran buƙatu a localhost:5000/

▍ Binciken Code

Mu duba lambar aikace-aikacen Python don fahimtar yadda take amsa buƙatun:

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. Farkon abu Flask.
  2. Ƙayyadaddun adireshin don yin buƙatun POST zuwa gare shi.
  3. Maido da dukiya sentence daga hukumar bukata.
  4. Ƙaddamar da abin da ba a san shi ba TextBlob da samun darajar polarity don tsari na farko da aka karɓa a cikin jikin buƙatun (a cikin yanayinmu, wannan shine kawai shawarar da aka gabatar don bincike).
  5. Komawa amsa, jikin wanda ya ƙunshi rubutun tayin da alamar da aka ƙididdige shi polarity.
  6. Ƙaddamar da aikace-aikacen Flask, wanda za a samu a 0.0.0.0:5000 (zaka iya samun damar yin amfani da shi ta amfani da ginin fom localhost:5000).

Yanzu microservices waɗanda suka haɗa aikace-aikacen suna gudana. An saita su don yin hulɗa da juna. Ga yadda zanen aikace-aikacen ya kasance a wannan matakin na aiki.

Koyarwar Kubernetes Sashe na 1: Aikace-aikace, Microservices, da Kwantena
Duk microservices waɗanda suka haɗa aikace-aikacen ana kawo su cikin lafiyayyen yanayi

Yanzu, kafin mu ci gaba, buɗe aikace-aikacen React a cikin mashigar bincike kuma a yi ƙoƙarin rarraba wasu jumla da ita. Idan duk abin da aka yi daidai - bayan danna maɓallin Send za ku ga sakamakon bincike a ƙasa akwatin rubutu.

A cikin sashe na gaba, zamuyi magana game da yadda ake gudanar da ƙananan ayyukan mu a cikin kwantena na Docker. Wannan ya zama dole don shirya aikace-aikacen don gudana a cikin gungu na Kubernetes.

Docker kwantena

Kubernetes tsari ne don sarrafa sarrafa kayan aiki, sikeli da sarrafa aikace-aikacen kwantena. Ana kuma kiranta "makamin kwantena". Idan Kubernetes yana aiki tare da kwantena, to kafin amfani da wannan tsarin, da farko muna buƙatar samun waɗannan kwantena. Amma da farko, bari mu yi magana game da abin da kwantena ne. Wataƙila mafi kyawun amsar tambayar abin da ake iya samu a ciki takardun ku Docker:

Hoton kwantena wani fakiti ne mai sauƙi, mai ɗaukar kansa, wanda za'a iya aiwatarwa wanda ya ƙunshi aikace-aikacen, wanda ya haɗa da duk abin da ake buƙata don gudanar da shi: lambar aikace-aikacen, yanayin lokacin aiki, kayan aikin tsarin da ɗakunan karatu, saiti. Ana iya amfani da shirye-shiryen da aka keɓe a cikin Linux da mahallin Windows kuma koyaushe za su yi aiki iri ɗaya ba tare da la'akari da abubuwan more rayuwa ba.

Wannan yana nufin cewa ana iya sarrafa kwantena akan kowace kwamfuta, gami da sabar sabar, kuma a kowane yanayi, aikace-aikacen da ke cikin su za su yi aiki iri ɗaya.

Don bincika fasalulluka na kwantena da kwatanta su da sauran hanyoyin gudanar da aikace-aikace, bari mu kalli misalin hidimar aikace-aikacen React ta amfani da injin kama-da-wane da akwati.

▍ Bayar da fayilolin da ba daidai ba na aikace-aikacen React ta amfani da injin kama-da-wane

Ƙoƙarin tsara tsare-tsare na fayiloli ta amfani da injunan kama-da-wane, za mu gamu da rashin amfani masu zuwa:

  1. Rashin ingantaccen amfani da albarkatu, tunda kowane injin kama-da-wane cikakken tsarin aiki ne.
  2. Dogaro da dandamali. Abin da ke aiki akan wasu kwamfutoci na gida na iya yin aiki da kyau akan sabar samarwa.
  3. Sannu a hankali da ingantaccen kayan aiki na maganin injin kama-da-wane.

Koyarwar Kubernetes Sashe na 1: Aikace-aikace, Microservices, da Kwantena
Sabar gidan yanar gizo na Nginx yana ba da fayiloli a tsaye masu gudana a cikin injin kama-da-wane

Idan ana amfani da kwantena don magance irin wannan matsala, to, idan aka kwatanta da na'urori masu kama da juna, ana iya lura da ƙarfin masu zuwa:

  1. Ingantacciyar amfani da albarkatu: aiki tare da tsarin aiki ta amfani da Docker.
  2. 'yancin kai na dandamali. Kwantena wanda mai haɓakawa zai iya sarrafa shi akan kwamfutar kansa zai gudana a ko'ina.
  3. Ƙarfafa nauyi ta hanyar amfani da yadudduka na hoto.

Koyarwar Kubernetes Sashe na 1: Aikace-aikace, Microservices, da Kwantena
Nginx uwar garken gidan yanar gizo yana ba da fayilolin tsaye da ke gudana a cikin akwati

Mun dai kwatanta inji mai kama-da-wane da kwantena akan ƴan maki, amma ko da hakan ya isa a ji ƙarfin kwantena. Yana da Kuna iya samun cikakkun bayanai game da kwantena Docker.

▍ Gina hoton akwati don aikace-aikacen React

Tushen ginin babban akwati Docker shine fayil ɗin Dockerfile. A farkon wannan fayil ɗin, ana yin rikodin hoton tushe na akwati, sannan an haɗa jerin umarni waɗanda ke nuna yadda ake ƙirƙirar akwati wanda zai dace da buƙatun aikace-aikacen.

Kafin mu fara aiki tare da fayil ɗin Dockerfile, tuna abin da muka yi don shirya fayilolin aikace-aikacen React don lodawa zuwa sabar Nginx:

  1. Gina fakitin app na React (npm run build).
  2. Fara uwar garken Nginx.
  3. Ana kwafe abubuwan da ke cikin kundin adireshi build daga babban fayil ɗin aikin sa-frontend zuwa babban fayil ɗin uwar garken nginx/html.

A ƙasa zaku iya ganin daidaito tsakanin ƙirƙirar akwati da ayyukan sama da aka yi akan kwamfutar gida.

▍Shirya Dockerfile don Aikace-aikacen SA-Frontend

Umarnin da za a haɗa a ciki Dockerfile don aikace-aikace SA-Frontend, ya ƙunshi ƙungiyoyi biyu kawai. Gaskiyar ita ce ƙungiyar ci gaban Nginx ta shirya asali hoto don Nginx, wanda za mu yi amfani da shi don gina hoton mu. Ga matakai biyu da muke buƙatar siffanta su:

  1. Kuna buƙatar sanya hoton Nginx ya zama tushen hoton.
  2. Abun cikin babban fayil sa-frontend/build buƙatar kwafi zuwa babban fayil ɗin hoto nginx/html.

Idan muka tashi daga wannan bayanin zuwa fayil ɗin Dockerfile, to zai kasance kamar haka:

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

Kamar yadda kake gani, duk abin da ke nan yana da sauƙi, yayin da abubuwan da ke cikin fayil ɗin ma sun zama abin karantawa da fahimta. Wannan fayil yana gaya wa tsarin ya ɗauki hoton nginx tare da duk abin da ya riga yana da shi, da kwafi abubuwan da ke cikin kundin adireshi build zuwa directory nginx/html.

Anan kuna iya samun tambaya game da yadda na san ainihin inda zan kwafi fayiloli daga babban fayil ɗin build, watau daga ina hanyar ta fito /usr/share/nginx/html. A gaskiya ma, babu wani abu mai rikitarwa a nan ma. Gaskiyar ita ce, ana iya samun bayanan da suka dace a ciki bayanin hoto.

▍Haɗa hoton a loda shi zuwa ma'ajiyar

Kafin mu iya aiki tare da cikakken hoto, muna buƙatar ƙaddamar da shi zuwa wurin ajiyar hoton. Don yin wannan, za mu yi amfani da dandamalin ɗaukar hoto na tushen girgije kyauta Docker Hub. A wannan mataki na aikin, kuna buƙatar yin haka:

  1. Sanya Docker.
  2. Yi rijista a shafin Docker Hub.
  3. Shiga cikin asusunku ta hanyar gudanar da umarni mai zuwa a cikin tashar:
    docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"

Yanzu kuna buƙatar, ta amfani da tashar tashar, je zuwa kundin adireshi sa-frontend kuma gudanar da umarni mai zuwa a can:

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

Anan da ƙasa a cikin umarni iri ɗaya $DOCKER_USER_ID yakamata a maye gurbinsu da sunan mai amfani akan Docker Hub. Misali, wannan sashin umarni na iya yin kama da haka: rinormaloku/sentiment-analysis-frontend.

A wannan yanayin, ana iya taƙaita wannan umarni ta hanyar cire shi -f Dockerfile, tunda babban fayil ɗin da muke aiwatar da wannan umarni ya riga ya sami wannan fayil ɗin.

Domin aika hoton da aka gama zuwa ma'ajiyar, muna buƙatar umarni mai zuwa:

docker push $DOCKER_USER_ID/sentiment-analysis-frontend

Bayan kammala shi, duba jerin ma'ajiyar ku akan Docker Hub don ganin ko an yi nasarar tura hoton zuwa ma'ajiyar gajimare.

▍Farkon akwati

Yanzu kowa zai iya saukewa da gudanar da hoton da aka sani da $DOCKER_USER_ID/sentiment-analysis-frontend. Don yin wannan, kuna buƙatar gudanar da jerin umarni masu zuwa:

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

Yanzu akwati yana gudana, kuma za mu iya ci gaba da aiki ta hanyar ƙirƙirar wasu hotuna da muke bukata. Amma kafin mu ci gaba, bari mu fahimci zane 80:80, wanda aka samo a cikin umarnin don gudanar da hoton kuma yana iya zama kamar rudani.

  • Lambar farko 80 ita ce lambar tashar tashar jiragen ruwa (wato, kwamfutar gida).
  • lamba ta biyu 80 ita ce tashar jiragen ruwa na kwantena wanda ya kamata a karkatar da bukatar.

Ka yi la’akari da misalin nan.

Koyarwar Kubernetes Sashe na 1: Aikace-aikace, Microservices, da Kwantena
Port Forwarding

Tsarin yana tura buƙatun daga tashar jiragen ruwa <hostPort> zuwa tashar jiragen ruwa <containerPort>. Wato shiga tashar jiragen ruwa 80 ana tura kwamfuta zuwa tashar jiragen ruwa 80 ganga.

Tun da tashar jiragen ruwa 80 bude akan kwamfutar gida, zaku iya shiga aikace-aikacen daga wannan kwamfutar a localhost:80. Idan tsarin ku baya goyan bayan Docker, zaku iya gudanar da aikace-aikacen akan na'ura mai kama da Docker, adireshin wanda zai yi kama da. <docker-machine ip>:80. Don nemo adireshin IP na na'ura mai kama da Docker, zaku iya amfani da umarnin docker-machine ip.

A wannan lokaci, da zarar an ƙaddamar da kwandon app na gaba-gaba cikin nasara, ya kamata ku sami damar buɗe shafinsa a cikin mashigar bincike.

▍.dockerignore fayil

Gina hoton aikace-aikacen SA-Frontend, za mu iya lura cewa wannan tsari yana da jinkirin gaske. Wannan saboda mahallin gina hoton dole ne a aika zuwa Docker daemon. An ba da kundin adireshin da ke wakiltar mahallin ginin azaman hujja ta ƙarshe ga umarnin docker build. A cikin yanayinmu, akwai digo a ƙarshen wannan umarni. Wannan yana haifar da tsari mai zuwa da aka haɗa cikin mahallin taron:

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

Amma duk manyan fayilolin da ke nan, muna buƙatar babban fayil kawai build. Zazzage wani abu kuma bata lokaci ne. Kuna iya hanzarta ginin ta gaya wa Docker waɗanne kundayen adireshi don yin watsi da su. Don yin wannan, muna buƙatar fayil .dockerignore. Kai, idan kun saba da fayil ɗin .gitignore, tsarin wannan fayil ɗin zai yi kama da sananne. Ya jera kundayen adireshi waɗanda tsarin gina hoton zai iya yin watsi da su. A cikin yanayinmu, abin da ke cikin wannan fayil ɗin yayi kama da haka:

node_modules
src
public

fayil .dockerignore dole ne ya kasance cikin babban fayil iri ɗaya da fayil ɗin Dockerfile. Yanzu taron hoton zai ɗauki 'yan daƙiƙa kaɗan.

Yanzu bari mu magance hoton don aikace-aikacen Java.

▍ Gina hoton kwantena don aikace-aikacen Java

Kun san menene, kuma kun riga kun koyi duk abin da kuke buƙata don ƙirƙirar hotunan akwati. Shi ya sa wannan sashe zai zama gajere sosai.

Bude fayil Dockerfile, wanda ke cikin babban fayil ɗin aikin sa-webapp. Idan kun karanta rubutun wannan fayil ɗin, to, a ciki zaku haɗu da sabbin gine-gine biyu kawai waɗanda suka fara da kalmomin shiga ENV и EXPOSE:

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

Maudu'i ENV yana ba ku damar ayyana masu canjin yanayi a cikin kwantena Docker. Musamman, a cikin yanayinmu, yana ba ku damar saita URL don samun damar API na aikace-aikacen da ke yin nazarin rubutu.

Maudu'i EXPOSE yana ba ku damar gaya wa Docker don buɗe tashar jiragen ruwa. Za mu yi amfani da wannan tashar jiragen ruwa yayin da muke aiki tare da aikace-aikacen. Anan zaka iya ganin hakan a ciki Dockerfile don aikace-aikace SA-Frontend babu irin wannan umarni. Wannan don dalilai ne kawai, a wasu kalmomi, wannan ginin na mai karatu ne Dockerfile.

Gina hoton da tura shi zuwa wurin ajiya yayi kama da misalin da ya gabata. Idan har yanzu ba ku da kwarin gwiwa sosai kan iyawar ku, ana iya samun umarni masu dacewa a cikin fayil ɗin README.md a babban fayil sa-webapp.

▍ Gina hoton kwantena don aikace-aikacen Python

Idan ka duba abubuwan da ke cikin fayil ɗin Dockerfile a babban fayil sa-logicBa za ku sami sabon abu a wurin ba. Umarnin don gina hoton da tura shi zuwa wurin ajiyar ya kamata ya riga ya saba muku, amma, kamar yadda yake a cikin sauran aikace-aikacen mu, ana iya samun su a cikin fayil ɗin. README.md a babban fayil sa-logic.

▍ Gwajin aikace-aikacen kwantena

Za ku iya amincewa da wani abu da ba ku gwada ba? Ba zan iya ba kuma. Mu gwada kwantenanmu.

  1. Bari mu fara kwandon aikace-aikacen sa-logic kuma saita shi don saurare akan tashar jiragen ruwa 5050:
    docker run -d -p 5050:5000 $DOCKER_USER_ID/sentiment-analysis-logic
  2. Bari mu fara kwandon aikace-aikacen sa-webapp kuma saita shi don saurare akan tashar jiragen ruwa 8080. Bugu da ƙari, muna buƙatar saita tashar jiragen ruwa wanda aikace-aikacen Python zai saurari buƙatun daga aikace-aikacen Java ta hanyar sake canza yanayin yanayi. 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

Don koyon yadda ake gano adireshin IP na akwati ko Docker VM, koma zuwa fayil ɗin README.

Bari mu fara kwandon aikace-aikacen sa-frontend:

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

Yanzu komai yana shirye don kewayawa a cikin mai bincike zuwa adireshin localhost:80 kuma gwada app.

Lura cewa idan kun canza tashar jiragen ruwa don sa-webapp, ko kuma idan kuna gudanar da Docker VM, kuna buƙatar gyara fayil ɗin App.js daga babban fayil sa-frontendta hanyar canza adireshin IP ko lambar tashar jiragen ruwa a cikin hanyar analyzeSentence()ta hanyar musanya bayanan yanzu maimakon bayanan da suka shude. Bayan haka, kuna buƙatar sake haɗa hoton kuma kuyi amfani da shi.

Wannan shine yadda jadawalin aikace-aikacen mu yayi kama yanzu.

Koyarwar Kubernetes Sashe na 1: Aikace-aikace, Microservices, da Kwantena
Microservices suna gudana a cikin kwantena

Takaitawa: me yasa muke buƙatar gungu na Kubernetes?

Mun kawai duba fayilolin Dockerfile, yayi magana game da yadda ake gina hotuna da tura su zuwa wurin ajiyar Docker. Bugu da ƙari, mun koyi yadda ake hanzarta haɗa hotuna ta amfani da fayil ɗin .dockerignore. Sakamakon haka, yanzu ƙananan ayyukanmu suna gudana a cikin kwantena Docker. Anan kuna iya samun cikakkiyar tambaya game da dalilin da yasa muke buƙatar Kubernetes. Amsar wannan tambaya za a keɓe ga kashi na biyu na wannan abu. A halin yanzu, yi la'akari da tambaya mai zuwa:
Bari mu ɗauka cewa aikace-aikacen gidan yanar gizon mu na nazarin rubutu ya zama sananne a duk duniya. Miliyoyin buƙatun suna zuwa gare shi kowane minti daya. Wannan yana nufin cewa microservices sa-webapp и sa-logic zai kasance cikin matsanancin damuwa. Yadda za a auna kwantena masu sarrafa microservices?

Koyarwar Kubernetes Sashe na 1: Aikace-aikace, Microservices, da Kwantena

source: www.habr.com

Add a comment