Kubernetes nkuzi Nkebi 1: Ngwa, Microservices na arịa

Na arịrịọ anyị, Habr mepụtara oghere Kubernetes ọ dịkwa anyị ụtọ itinye akwụkwọ mbụ n’ime ya. Debanye aha!

Kubernetes dị mfe. Kedu ihe kpatara ụlọ akụ na-akwụ m nnukwu ego iji rụọ ọrụ na mpaghara a, ebe onye ọ bụla nwere ike ịmụta nkà na ụzụ a n'ime awa ole na ole?

Kubernetes nkuzi Nkebi 1: Ngwa, Microservices na arịa

Ọ bụrụ na ị na-enwe obi abụọ na Kubernetes nwere ike ịmụta ngwa ngwa, ana m atụ aro ka ị nwaa ya n'onwe gị. Ya bụ, n'ịghọta ihe a, ị ga-enwe ike ịme ngwa dabere na microservices na ụyọkọ Kubernetes. Enwere m ike ikwe nkwa nke a, ebe ọ bụ kpọmkwem otu usoro eji ebe a ka m na-akụziri ndị ahịa anyị ka ha na Kubernetes rụọ ọrụ. Kedu ihe mere ntuziaka a dị iche na ndị ọzọ? N'ezie, enwere ọtụtụ ihe. Ya mere, ọtụtụ n'ime ihe ndị a na-amalite site na nkọwa nke ihe ndị dị mfe - echiche nke Kubernetes na atụmatụ nke kubectl iwu. Ndị dere ihe ndị a na-eche na ndị na-agụ ha maara mmepe ngwa, microservices, na igbe Docker. Anyị ga-aga n'ụzọ ọzọ. Nke mbụ, anyị ga-ekwu maka otu esi eme ngwa dabere na microservices na kọmputa. Mgbe ahụ, anyị ga-eleba anya n'ihe onyonyo eji arụ ụlọ maka microservice nke ọ bụla. Ma mgbe nke ahụ gasịrị, anyị ga-amata Kubernetes ma lelee na-ebuga ngwa dabere na microservices na ụyọkọ nke Kubernetes na-achịkwa.

Ụzọ a, na iji nwayọọ nwayọọ na-abịakwute Kubernetes, ga-enye nghọta miri emi nke ihe na-eme nke dị mkpa maka onye nkịtị iji ghọta otú ihe niile si arụ ọrụ na Kubernetes. Kubernetes bụ teknụzụ dị mfe ma ọ bụrụhaala na ndị chọrọ ịmụta ya mara ebe na otu esi eji ya.

Ugbu a, na-enweghị oge ọzọ, ka anyị bido kwuo maka ngwa anyị ga-arụ ọrụ.

Ngwa nnwale

Ngwa anyị ga-arụ naanị otu ọrụ. Ọ na-ewe otu ahịrịokwu dị ka ntinye, mgbe nke ahụ gasịrị, na-eji ngwá ọrụ nyocha ederede, ọ na-eme nyocha nke mmetụta nke ahịrịokwu a, na-enweta nyocha nke àgwà mmetụta uche nke onye dere ahịrịokwu ahụ na ihe ụfọdụ.

Nke a bụ ihe isi windo ngwa a dị ka.

Kubernetes nkuzi Nkebi 1: Ngwa, Microservices na arịa
Ngwa weebụ maka nyocha mmetụta nke ederede

Site n'echiche teknụzụ, ngwa ahụ nwere microservices atọ, nke ọ bụla na-edozi otu ọrụ dị iche iche:

  • SA-Frontend bụ sava weebụ Nginx nke na-ejere faịlụ React static.
  • SA-WebApp bụ ngwa weebụ edere na Java nke na-ahazi arịrịọ sitere na frontend.
  • SA-Logic bụ ngwa Python na-eme nyocha mmetụta na ederede.

Ọ dị mkpa iburu n'obi na microservice adịghị adị iche. Ha na-emejuputa echiche nke "nkewa nke ọrụ", ma n'otu oge ahụ ha kwesịrị imekọrịta ibe ha.

Kubernetes nkuzi Nkebi 1: Ngwa, Microservices na arịa
Data na-aga na ngwa ahụ

Na eserese dị n'elu, ị nwere ike ịhụ usoro ọnụọgụgụ nke sistemụ ahụ, na-egosi oke data na ngwa ahụ. Ka anyị lee ha anya:

  1. Ihe nchọgharị ahụ na-arịọ faịlụ site na sava ahụ index.html (nke, n'aka nke ya, na-ebudata ngwungwu ngwa React).
  2. Onye ọrụ na ngwa a na-emekọrịta ihe, nke a na-ebute oku na ngwa weebụ dabere na mmiri.
  3. Ngwa webụ ahụ na-ebuga arịrịọ iji mee nyocha ederede na ngwa Python.
  4. Ngwa Python na-eme nyocha mmetụta nke ederede wee weghachi nsonaazụ dịka nzaghachi na arịrịọ ahụ.
  5. Ngwa oge opupu ihe ubi na-eziga nzaghachi na ngwa React (nke, n'aka nke ya, na-egosi onye ọrụ nsonaazụ ederede ederede).

Enwere ike ịchọta koodu maka ngwa ndị a niile ebe a. Ana m akwado ka ị detuo ebe nchekwa a maka onwe gị ugbu a, ebe ọ bụ na enwere ọtụtụ nnwale na-adọrọ mmasị na ya n'ihu anyị.

Na-eme ngwa dabere na microservices na igwe mpaghara gị

Ka ngwa ahụ wee rụọ ọrụ, anyị kwesịrị ịmalite microservice atọ niile. Ka anyị malite na nke kacha mma n'ime ha niile - ngwa n'ihu.

▍Tụlite React maka mmepe mpaghara

Iji mee ngwa React, ịkwesịrị ịwụnye ikpo okwu Node.js na NPM na kọmputa gị. Ozugbo etinyere ihe ndị a niile, jiri ọdụ ụgbọ mmiri gaa na folda ọrụ gị sa-frontend wee mee iwu a:

npm install

Site na iji iwu a na nchekwa node_modules A ga-ebufe ihe ndabere nke ngwa React, ihe ndekọ nke dị na faịlụ ahụ package.json. Ozugbo ebudatara ndabere ndị ahụ n'otu nchekwa ahụ, mee iwu a:

npm start

Ọ gwụla. Ugbu a ngwa React na-agba ọsọ, ị nwere ike ịnweta ya site na ịga na adreesị a na ihe nchọgharị gị: localhost:3000. Ị nwere ike ịgbanwe ihe na koodu ya. Ị ga-ahụ ozugbo mmetụta nke mgbanwe ndị a na ihe nchọgharị. Nke a ga-ekwe omume ekele maka ihe a na-akpọ "ọkụ" nnọchi nke modulu. Nke a na-eme ka mmepe n'ihu bụrụ ahụmahụ dị mfe na nke na-atọ ụtọ.

▍ Ịkwadebe ngwa React maka mmepụta

Maka ebumnuche iji ngwa React n'ezie, anyị kwesịrị ịtụgharị ya ka ọ bụrụ faịlụ static ma jiri sava webụ jeere ha ndị ahịa.

Iji wuo ngwa React, iji ọnụ ọnụ ọzọ, gaa na folda ahụ sa-frontend wee mee iwu a:

npm run build

Nke a ga-emepụta ndekọ na nchekwa ọrụ build. Ọ ga-enwe faịlụ niile kwụ ọtọ dị mkpa maka ngwa React ka ọ rụọ ọrụ.

▍ Iji Nginx na-ejere faịlụ static ozi

Mbụ ịkwesịrị ịwụnye ma mee sava weebụ Nginx. ọ bụ ị nwere ike ibudata ya wee chọta ntuziaka maka otu esi etinye ya na-agba ọsọ. Mgbe ahụ ịkwesịrị iṅomi ọdịnaya nke folda ahụ sa-frontend/build na folda [your_nginx_installation_dir]/html.

Site na usoro a, faịlụ a na-emepụta n'oge arụ ọrụ nke ngwa React index.html ga-adị na [your_nginx_installation_dir]/html/index.html. Nke a bụ faịlụ nke, na ndabara, ihe nkesa Nginx na-emepụta mgbe ị na-enweta ya. A haziri ihe nkesa ka ọ gee ntị na ọdụ ụgbọ mmiri 80, mana enwere ike ịhazi ya dịka ịchọrọ site na idezi faịlụ [your_nginx_installation_dir]/conf/nginx.conf.

Ugbu a mepee ihe nchọgharị gị wee gaa na localhost:80. Ị ga-ahụ ibe ngwa React.

Kubernetes nkuzi Nkebi 1: Ngwa, Microservices na arịa
Ngwa nzaghachi nke sava Nginx na-enye

Ọ bụrụ na ị banye ugbu a ihe n'ime ubi Type your sentence wee pịa bọtịnụ Send - ọ dịghị ihe ga-eme. Mana, ọ bụrụ na ị lelee console, ị nwere ike ịhụ ozi njehie ebe ahụ. Iji ghọta kpọmkwem ebe njehie ndị a na-eme, ka anyị nyochaa koodu ngwa.

▍Ntụle koodu ngwa n'ihu

Lelee koodu faịlụ ahụ App.js, anyị nwere ike ịhụ na ịpị bọtịnụ Send na-akpọ usoro analyzeSentence(). Enyere koodu maka usoro a n'okpuru. Biko mara na maka ahịrị ọ bụla nwere nkọwa nke ụdị # Номер, enwere nkọwa enyere n'okpuru koodu. Anyị ga-enyocha iberibe koodu ndị ọzọ n'otu ụzọ ahụ.

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 nke emere arịrịọ POST. A na-eche na enwere ngwa na adreesị a nke na-atụ anya arịrịọ ndị dị otú ahụ.

2.Otu arịrịọ ezigara na ngwa a. Nke a bụ otu arịrịọ ihe atụ:

{
    sentence: "I like yogobella!"
}

3.Mgbe enwetara nzaghachi maka arịrịọ, a na-emelite ọnọdụ akụrụngwa. Nke a na-eme ka e megharịa akụrụngwa ahụ ọzọ. Ọ bụrụ na anyị enweta data (ya bụ, ihe JSON nwere data ntinye yana akara ederede agbakọrọ), anyị ga-ewepụta ihe mejupụtara ya. Polarity, ebe ọ bụ na a ga-ezute ọnọdụ kwesịrị ekwesị. Nke a bụ otu anyị si akọwa akụkụ ahụ:

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

Koodu na-egosi na ọ na-arụ ọrụ nke ọma. Kedu ihe dị njọ na nke a, agbanyeghị? Ọ bụrụ n’iche na n’adreesị nke ngwa a na-agbalị iziga arịrịọ POST, ọ nweghị ihe nwere ike ịnakwere ma hazie arịrịọ a, mgbe ahụ ị ga-abụ nke ziri ezi. Ya bụ, hazie arịrịọ natara na http://localhost:8080/sentiment, anyị kwesịrị ịme ngwa weebụ dabere na oge opupu ihe ubi.

Kubernetes nkuzi Nkebi 1: Ngwa, Microservices na arịa
Anyị chọrọ ngwa mmiri nke nwere ike ịnakwere arịrịọ POST

▍Ịtọlite ​​ngwa weebụ dabere na mmiri

Iji tinye ngwa mmiri, ị ga-achọ JDK8 na Maven yana mgbanwe gburugburu ebe obibi ahaziri nke ọma. Ozugbo i tinyechara ihe a niile, ị nwere ike ịga n'ihu na-arụ ọrụ anyị.

▍ Ịkwakọba ngwa n'ime faịlụ ite

Gaa na-eji ọnụ ọnụ, gaa na folda ahụ sa-webapp ma tinye iwu a:

mvn install

Mgbe ịmechara iwu a na nchekwa sa-webapp a ga-emepụta ndekọ target. Nke a bụ ebe ngwa Java ga-adị, nke etinyere na faịlụ ite, nke faịlụ nọchiri anya ya sentiment-analysis-web-0.0.1-SNAPSHOT.jar.

▍Na-eme ngwa Java

Gaa na folda target wee jiri iwu a mee ngwa ahụ:

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

Njehie ga-eme mgbe a na-eme iwu a. Iji malite idozi ya, anyị nwere ike nyochaa nkọwa ndị dị na nchịkọta 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}"

Maka anyị, ihe kachasị mkpa ebe a bụ ikwu okwu na-agaghị ekwe omume ịkọwa ihe ọ pụtara sa.logic.api.url. Ka anyị nyochaa koodu nke njehie pụtara.

▍Ntụle koodu ngwa Java

Nke a bụ snippet koodu ebe njehie pụtara.

@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. Na SentimentController enwere ubi saLogicApiUrl. A na-akọwa uru ya site na ihe onwunwe sa.logic.api.url.
  2. Ahịrị saLogicApiUrl concatenates na uru /analyse/sentiment. Ha na-etolite adreesị maka ịkpọ oku na microservice nke na-eme nyocha ederede.

▍ Tọọ ọnụ ahịa ụlọ

N'oge opupu ihe ubi, isi mmalite nke ụkpụrụ ihe onwunwe bụ faịlụ application.properties, nke enwere ike ịchọta na sa-webapp/src/main/resources. Mana iji ya abụghị naanị ụzọ isi tọọ ụkpụrụ ihe onwunwe. Enwere ike ime nke a site na iji iwu a:

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

Uru nke ihe onwunwe a kwesịrị ịrụtụ aka na adreesị nke ngwa Python anyị.

Site n'ịhazi ya, anyị na-agwa ngwa weebụ mmiri ebe ọ kwesịrị ịga mee arịrịọ nyocha ederede.

Ka anyị ghara ime ka ndụ anyị sie ike, anyị ga-ekpebi na ngwa Python ga-adị na localhost:5000 ka anyị gbalịa ka anyị ghara ichefu ya. N'ihi ya, iwu ka ịmalite ngwa mmiri ga-adị ka nke a:

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

Kubernetes nkuzi Nkebi 1: Ngwa, Microservices na arịa
Sistemu anyị enweghị ngwa Python

Ugbu a ihe anyị ga-eme bụ ịme ngwa Python na sistemụ ahụ ga-arụ ọrụ dịka a tụrụ anya ya.

▍Ịtọlite ​​ngwa Python

Iji mee ngwa Python, ị ga-etinyerịrị Python 3 na Pip, na mgbanwe gburugburu ebe obibi kwesịrị ekwesị ga-edozi nke ọma.

▍ Ịwụnye ndabere

Gaa na folda ọrụ gị sa-logic/sa wee mee iwu ndị a:

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

▍Mwepụta ngwa ahụ

Mgbe ị wụnye ihe ndabere, anyị dị njikere ịme ngwa ahụ:

python sentiment_analysis.py

Mgbe emechara iwu a, a ga-agwa anyị ihe ndị a:

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

Nke a pụtara na ngwa a na-agba ọsọ ma na-eche arịrịọ na localhost:5000/

▍ Nchọpụta koodu

Ka anyị leba anya na koodu ngwa Python ka anyị ghọta ka o si anabata arịrịọ:

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. Ịmalite ihe Flask.
  2. Na-akọwapụta adreesị maka ime arịrịọ POST na ya.
  3. Iweghachite ihe onwunwe sentence site na arịrịọ ahụ.
  4. Ịmalite ihe amaghị aha TextBlob na inweta uru polarity n'ihi na nke mbụ ahịrịokwu natara na ahu nke arịrịọ (na anyị ikpe, nke a bụ nanị ahịrịokwu ezitere maka nyocha).
  5. Na-eweghachi nzaghachi nke ahụ ya nwere ederede nke ahịrịokwu yana ihe nrịbama gbakọọ maka ya polarity.
  6. Mepee ngwa Flask, nke ga-adị na 0.0.0.0:5000 (ị nwekwara ike ịnweta ya site na iji ihe owuwu nke ụdị localhost:5000).

Ndị microservices mebere ngwa a na-arụ ọrụ ugbu a. A na-edozi ha ka ha na ibe ha na-akpakọrịta. Nke a bụ ihe eserese ngwa ahụ n'oge ọrụ a.

Kubernetes nkuzi Nkebi 1: Ngwa, Microservices na arịa
A na-ewebata microservices niile mejupụtara ngwa ahụ n'usoro

Ugbu a, tupu ị gaa n'ihu, mepee ngwa React gị na ihe nchọgharị wee gbalịa iji ya tụgharịa ụfọdụ ahịrịokwu. Ọ bụrụ na emechara ihe niile n'ụzọ ziri ezi - mgbe ịpịchara bọtịnụ Send ị ga-ahụ nsonaazụ nyocha n'okpuru mpaghara ederede.

Na ngalaba na-esote, anyị ga-ekwu maka otu esi agba ọsọ microservices na arịa Docker. Nke a dị mkpa iji kwadebe ngwa na-agba ọsọ na Kubernetes ụyọkọ.

Akpa docker

Kubernetes bụ usoro maka akpaaka ntinye, nhazi na njikwa ngwa ndị ejiri akpa. A na-akpọkwa ya “onye na-akụ ọkpọ”. Ọ bụrụ na Kubernetes na-arụ ọrụ na arịa, mgbe ahụ tupu iji usoro a, anyị ga-ebu ụzọ nweta arịa ndị a. Ma nke mbụ, ka anyị na-ekwu banyere ihe containers bụ. Ikekwe azịza kacha mma maka ajụjụ nke ihe ọ bụ nwere ike ịchọta na akwụkwọ na Docker:

Ihe oyiyi akpa bụ ngwugwu dị fechaa, nke nwere onwe ya, nke nwere ike ime ngwa, nke gụnyere ihe niile dị mkpa iji mee ya: koodu ngwa, gburugburu ebe igbu egbu, ngwaọrụ sistemụ na ọba akwụkwọ, ntọala. Enwere ike iji mmemme etinyere na mpaghara Linux na Windows, na ha ga na-arụ ọrụ otu mgbe n'agbanyeghị akụrụngwa.

Nke a pụtara na enwere ike ịgbanye arịa na kọmpụta ọ bụla, gụnyere sava mmepụta, na ngwa ndị dị n'ime ha ga-arụ ọrụ otu ihe ahụ na mpaghara ọ bụla.

Ka inyochaa atụmatụ nke containers na tụnyere ha ụzọ ndị ọzọ na-agba ọsọ ngwa, ka anya na ihe atụ nke na-eje ozi a React ngwa na-eji a mebere igwe na akpa.

▍Ije ozi static faịlụ nke ngwa React site na iji igwe mebere

N'ịgbalị ịhazi ọrụ nke faịlụ static site na iji igwe mebere, anyị ga-ezute ọghọm ndị a:

  1. Iji akụrụngwa eme ihe nke ọma, ebe ọ bụ na igwe mebere ọ bụla bụ sistemụ arụmọrụ zuru oke.
  2. Ndabere nke ikpo okwu. Ihe na-arụ ọrụ na kọmpụta mpaghara nwere ike ọ gaghị arụ ọrụ na sava mmepụta.
  3. Ngwa ngwa ngwa na akụrụngwa kpụ ọkụ n'ọnụ nke ngwọta dabere na igwe mebere.

Kubernetes nkuzi Nkebi 1: Ngwa, Microservices na arịa
Sava weebụ Nginx na-enye faịlụ static na-agba ọsọ na igwe mebere

Ọ bụrụ na a na-eji arịa dozie nsogbu yiri ya, mgbe ahụ, ma e jiri ya tụnyere igwe mebere, enwere ike ịhụ ike ndị a:

  1. Iji akụrụngwa eme ihe nke ọma: iji Docker rụọ ọrụ na sistemụ arụmọrụ.
  2. Platform nọọrọ onwe ya. Akpa nke onye nrụpụta nwere ike ịgbanye na kọmputa ya ga-arụ ọrụ ebe ọ bụla.
  3. Nkwanye dị fechaa site na iji akwa onyonyo.

Kubernetes nkuzi Nkebi 1: Ngwa, Microservices na arịa
Sava webụ Nginx na-enye faịlụ static na-agba n'ime akpa

Anyị na-atụnyere mebere igwe na containers na a ole na ole ihe, ma ọbụna nke a bụ iji nweta a mmetụta maka ike nke containers. ọ bụ Ị nwere ike ịchọta nkọwa gbasara arịa Docker.

▍ Ime ihe onyonyo akpa maka ngwa React

Ihe mgbochi ụlọ nke akpa Docker bụ faịlụ ahụ Dockerfile. Na mmalite nke faịlụ a, a na-edekọ ihe ndekọ nke isi ihe oyiyi nke akpa ahụ, mgbe ahụ enwere usoro ntụziaka na-egosi otu esi emepụta akpa nke ga-egbo mkpa nke ngwa ụfọdụ.

Tupu anyị amalite ịrụ ọrụ na faịlụ ahụ Dockerfile, ka anyị cheta ihe anyị mere iji kwado faịlụ ngwa React maka ibugo na sava Nginx:

  1. Iwulite ngwugwu ngwa React (npm run build).
  2. Malite sava Nginx.
  3. Na-eṅomi ọdịnaya ndekọ build site na folda oru ngo sa-frontend na nchekwa ihe nkesa nginx/html.

N'okpuru ebe a ị nwere ike ịhụ myirịta dị n'etiti ịmepụta akpa na usoro ndị a dị n'elu a rụrụ na kọmputa mpaghara gị.

▍ Ịkwadebe Dockerfile maka ngwa SA-Frontend

Ntuziaka ga-adị na ya Dockerfile maka ngwa SA-Frontend, nwere naanị otu abụọ. Nke bụ eziokwu bụ na ndị otu mmepe Nginx akwadebela isi oyiyi maka Nginx, nke anyị ga-eji mepụta ihe oyiyi anyị. Ndị a bụ nzọụkwụ abụọ anyị kwesịrị ịkọwa:

  1. Ndabere nke onyonyo kwesịrị ịbụ onyonyo Nginx.
  2. Ọdịnaya nchekwa sa-frontend/build kwesịrị ka e depụtaghachi ya na nchekwa onyonyo nginx/html.

Ọ bụrụ na ị si na nkọwapụta a gaa na faịlụ ahụ Dockerfile, mgbe ahụ ọ ga-adị ka nke a:

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

Dị ka ị pụrụ ịhụ, ihe niile ebe a dị nnọọ mfe, na ọdịnaya nke faịlụ ọbụna na-aghọ nnọọ ike ịgụ na nghọta. Faịlụ a na-agwa sistemu ka ọ were foto a nginx na ihe niile dị na ya, ma detuo ọdịnaya nke ndekọ build na ndekọ nginx/html.

N'ebe a, ị nwere ike ịnwe ajụjụ gbasara otu m si mara kpọmkwem ebe ịchọrọ idetu faịlụ na nchekwa ahụ build, ya bụ, ebe ụzọ ahụ si bịa /usr/share/nginx/html. N'ezie, ọ dịghị ihe mgbagwoju anya ebe a. Eziokwu ahụ bụ na enwere ike ịchọta ozi dị mkpa na nkọwa onyonyo.

▍Iwu ihe onyonyo a ma bulite ya na ebe nchekwa

Tupu anyị enwee ike ịrụ ọrụ na ihe oyiyi emechara, anyị kwesịrị ịkwanye ya na ebe nchekwa ihe oyiyi. Iji mee nke a, anyị ga-eji ikpo okwu Bochum onyonyo igwe ojii efu Docker Hub. N'ime oge ọrụ a, ịkwesịrị ịme ihe ndị a:

  1. Wụnye Docker.
  2. Debanye aha na weebụsaịtị Docker Hub.
  3. Banye na akaụntụ gị site na iji iwu na-esonụ na njedebe:
    docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"

Ugbu a ịkwesịrị iji ọnụ ọnụ gaa na ndekọ sa-frontend wee gbaa iwu a ebe ahụ:

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

Ebe a na n'ihu na iwu ndị yiri ya $DOCKER_USER_ID ekwesịrị iji aha njirimara Docker Hub dochie ya. Dịka ọmụmaatụ, akụkụ nke iwu a nwere ike ịdị ka nke a: rinormaloku/sentiment-analysis-frontend.

N'okwu a, enwere ike ịbelata iwu a site na iwepu ya -f Dockerfile, ebe faịlụ a adịlarị na nchekwa nke anyị na-eme iwu a.

Iji zipu onyonyo emechara na ebe nchekwa, anyị chọrọ iwu a:

docker push $DOCKER_USER_ID/sentiment-analysis-frontend

Mgbe ịmechara ya, lelee ndepụta nke ebe nchekwa gị na Docker Hub ka ị ghọta ma ebugo onyonyo a na nchekwa igwe ojii ọ gara nke ọma.

▍Na-agba ọsọ akpa

Ugbu a onye ọ bụla nwere ike ibudata ma mee ihe oyiyi ahụ, nke a maara dị ka $DOCKER_USER_ID/sentiment-analysis-frontend. Iji mee nke a, ịkwesịrị ịme usoro iwu ndị a:

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

Ugbu a akpa ahụ na-agba ọsọ, anyị nwere ike ịga n'ihu na-arụ ọrụ site na ịmepụta ihe oyiyi ndị ọzọ anyị chọrọ. Ma tupu anyị aga n'ihu, ka anyị ghọta imewe 80:80, nke na-egosi na iwu mbido onyonyo ma nwee ike iyi ihe mgbagwoju anya.

  • Nọmba mbụ 80 — nke a bụ nọmba ọdụ ụgbọ mmiri nnabata (ya bụ, kọmputa mpaghara).
  • Nọmba nke abụọ 80 bụ ọdụ ụgbọ mmiri nke akpa ekwesịrị ibuga arịrịọ ahụ.

Tụlee ihe atụ na-esonụ.

Kubernetes nkuzi Nkebi 1: Ngwa, Microservices na arịa
Port ebugharị

Sistemu na-atụgharị arịrịọ sitere na ọdụ ụgbọ mmiri <hostPort> na ọdụ ụgbọ mmiri <containerPort>. Ya bụ, ịnweta ọdụ ụgbọ mmiri 80 a na-atụgharị kọmputa na ọdụ ụgbọ mmiri 80 akpa.

Ebe ọ bụ na ọdụ ụgbọ mmiri 80 meghere na kọmputa mpaghara, mgbe ahụ ị nwere ike ịnweta ngwa site na kọmputa a na localhost:80. Ọ bụrụ na sistemụ gị akwadoghị Docker, enwere ike ịme ngwa ahụ na igwe mebere Docker, adreesị nke ga-adị ka <docker-machine ip>:80. Iji chọpụta adreesị IP nke igwe mebere Docker, ị nwere ike iji iwu ahụ docker-machine ip.

N'oge a, mgbe ịmalitechara akpa ngwa n'ihu nke ọma, ị ga-enwe ike imepe ibe ya na ihe nchọgharị ahụ.

▍ Faịlụ .dockerignore

Na-anakọta onyonyo ngwa SA-Frontend, anyị nwere ike ịchọpụta na usoro a na-atụgharị na-adị ngwa ngwa. Nke a na-eme n'ihi na a ga-ezigarịrị ọnọdụ nrụpụta ihe onyonyo na Docker daemon. A kọwapụtara ndekọ aha na-anọchi anya ihe nrụpụta ihe dị ka arụmụka ikpeazụ nke iwu ahụ docker build. N'ọnọdụ anyị, enwere ntụpọ na njedebe nke iwu a. Nke a na-eme ka usoro ihe ndị a tinye n'ọnọdụ ihe nrụpụta:

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

Mana n'ime folda niile dị ebe a, naanị folda anyị chọrọ build. Ibunye ihe ọ bụla ọzọ bụ igbu oge. Ị nwere ike mee ka ụlọ ahụ dị ngwa site n'ịgwa Docker akwụkwọ ndekọ aha ị ga-eleghara anya. Ọ bụ iji mee nke a ka anyị chọrọ faịlụ ahụ .dockerignore. Gị, ọ bụrụ na ị maara nke ọma na faịlụ ahụ .gitignore, Ọdịdị nke faịlụ a nwere ike iyi ka ọ maara. Ọ na-edepụta akwụkwọ ndekọ aha nke sistemụ nrụpụta ihe onyonyo nwere ike ileghara anya. N'ọnọdụ anyị, ọdịnaya nke faịlụ a dị ka nke a:

node_modules
src
public

file .dockerignore ga-adị na otu nchekwa dị na faịlụ ahụ Dockerfile. Ugbu a iwulite ihe onyonyo a ga-ewe nkeji nkeji.

Ka anyị rụọ ọrụ na onyonyo a maka ngwa Java.

▍ Ime ihe onyonyo akpa maka ngwa Java

Ị mara ihe, ị mụtalarị ihe niile ịchọrọ ịma iji mepụta onyonyo akpa. Ya mere ngalaba a ga-adị mkpụmkpụ.

Mepee faịlụ Dockerfilenke dị na folda oru ngo sa-webapp. Ọ bụrụ na ị gụọ ederede nke faịlụ a, ị ga-ahụ naanị ụlọ ọhụrụ abụọ na ya, malite na mkpụrụokwu ENV и EXPOSE:

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

Isiokwu ENV Na-enye gị ohere ịkpọsa mgbanwe gburugburu n'ime arịa Docker. Karịsịa, n'ọnọdụ anyị, ọ na-enye gị ohere ịkọwa URL iji nweta API nke ngwa na-eme nyocha ederede.

Isiokwu EXPOSE na-enye gị ohere ịgwa Docker ka ọ mepee ọdụ ụgbọ mmiri. Anyị ga-eji ọdụ ụgbọ mmiri a ka anyị na-eme ngwa ahụ. Ebe ị nwere ike ịhụ na n'ime Dockerfile maka ngwa SA-Frontend ọ dịghị iwu dị otú ahụ. Nke a bụ naanị maka ebumnuche akwụkwọ, na okwu ndị ọzọ, ihe owuwu a bụ maka onye ga-agụ Dockerfile.

Ịmepụta ihe oyiyi ahụ na ịkwanye ya na ebe nchekwa na-ele anya otu ihe ahụ dị na ihe atụ gara aga. Ọ bụrụ na ị nwebeghị ntụkwasị obi siri ike na ikike gị, enwere ike ịhụ iwu ndị kwekọrọ na faịlụ ahụ README.md na folda sa-webapp.

▍Iwu ihe onyonyo akpa maka ngwa Python

Ọ bụrụ na ị lelee ọdịnaya nke faịlụ ahụ Dockerfile na folda sa-logic, mgbe ahụ ị gaghị ahụ ihe ọhụrụ maka onwe gị n'ebe ahụ. Iwu maka iwulite ihe onyonyo na izipu ya na ebe nchekwa ahụ kwesịkwara ịmara gị nke ọma, mana, dị ka ngwa ndị ọzọ anyị nwere, enwere ike ịhụ ya na faịlụ ahụ. README.md na folda sa-logic.

▍Nnwale ngwa ndị nwere akpa

Ị nwere ike ịtụkwasị obi ihe ị nwalebeghị? Enweghị m ike. Ka anyị nwalee akpa anyị.

  1. Ka anyị malite akpa ngwa sa-logic ma hazie ya ka ọ gee ntị na ọdụ ụgbọ mmiri 5050:
    docker run -d -p 5050:5000 $DOCKER_USER_ID/sentiment-analysis-logic
  2. Ka anyị malite akpa ngwa sa-webapp ma hazie ya ka ọ gee ntị na ọdụ ụgbọ mmiri 8080. Na mgbakwunye, anyị kwesịrị ịhazi ọdụ ụgbọ mmiri nke ngwa Python ga-ege ntị maka arịrịọ sitere na ngwa Java site na ịnyegharị mgbanwe gburugburu ebe obibi. 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

Iji mụta ka esi achọpụta adreesị IP nke akpa Docker ma ọ bụ igwe mebere, rụtụ aka na faịlụ ahụ README.

Ka anyị malite akpa ngwa sa-frontend:

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

Ugbu a ihe niile dị njikere ịga na adreesị na ihe nchọgharị localhost:80 ma nwalee ngwa ahụ.

Biko mara na ọ bụrụ na ị gbanwere ọdụ ụgbọ mmiri maka sa-webapp, ma ọ bụ ọ bụrụ na ị na-eji igwe mebere Docker, ị ga-achọ idezi faịlụ ahụ App.js site na nchekwa sa-frontendsite na ịgbanwe adreesị IP ma ọ bụ nọmba ọdụ ụgbọ mmiri na usoro analyzeSentence(), dochie ozi dị ugbu a kama data emechiela. Mgbe nke a gasịrị, ịkwesịrị ịmegharị ihe oyiyi ahụ ma jiri ya mee ihe.

Nke a bụ ihe eserese ngwa anyị dị ugbu a.

Kubernetes nkuzi Nkebi 1: Ngwa, Microservices na arịa
Microservices na-agba n'ime akpa

Nchịkọta: gịnị kpatara anyị ji chọọ ụyọkọ Kubernetes?

Anyị enyochala faịlụ ndị ahụ Dockerfile, Na-ekwu maka otu esi ewuo ihe oyiyi na ịkwanye ha na ebe nchekwa Docker. Na mgbakwunye, anyị mụtara otu esi eme ka mgbakọ onyonyo dị ngwa site na iji faịlụ .dockerignore. N'ihi ya, microservices anyị na-agba ọsọ ugbu a na arịa Docker. N'ebe a, ị nwere ike ịnwe ajụjụ ziri ezi gbasara ihe kpatara anyị ji chọọ Kubernetes. A ga-etinye akụkụ nke abụọ nke akwụkwọ a maka ịza ajụjụ a. Ka ọ dị ugbu a, tụlee ajụjụ a:
Ka anyị were na ngwa weebụ anyị maka nyocha ederede aghọwo ihe ewu ewu n'ụwa niile. Ọtụtụ nde arịrịọ na-abịakwute ya kwa nkeji. Nke a pụtara na microservices sa-webapp и sa-logic ga-anọ n'okpuru nnukwu ibu. Kedu ka esi atụba arịa na-arụ ọrụ microservices?

Kubernetes nkuzi Nkebi 1: Ngwa, Microservices na arịa

isi: www.habr.com

Tinye a comment