Kubernetes Aʻo Mahele 1: Nā noi, Microservices, a me nā pahu

Ma kā mākou noi, ua hana ʻo Habr i kahi hub Kubernetes a hauʻoli mākou e kau i ka puke mua ma loko. Kau inoa!

He maʻalahi ka Kubernetes. No ke aha e uku nui ai nā panakō iaʻu e hana ma kēia wahi, ʻoiai hiki i kekahi ke haku i kēia ʻenehana i loko o kekahi mau hola?

Kubernetes Aʻo Mahele 1: Nā noi, Microservices, a me nā pahu

Inā kānalua ʻoe e hiki ke aʻo koke ʻia ʻo Kubernetes, manaʻo wau e hoʻāʻo ʻoe e hana iā ʻoe iho. ʻO ia hoʻi, i ka loaʻa ʻana o kēia mea, hiki iā ʻoe ke holo i kahi noi e pili ana i nā microservices i kahi hui Kubernetes. Hiki iaʻu ke hōʻoiaʻiʻo i kēia, no ka mea ma ke ʻano hana like aʻu e hoʻohana ai ma ʻaneʻi e aʻo ai i kā mākou mea kūʻai aku pehea e hana ai me Kubernetes. He aha ka mea e ʻokoʻa ai kēia alakaʻi mai nā mea ʻē aʻe? ʻOiaʻiʻo, nui nā mea. No laila, hoʻomaka ka hapa nui o kēia mau mea me ka wehewehe ʻana i nā mea maʻalahi - nā manaʻo o Kubernetes a me nā hiʻohiʻona o ke kauoha kubectl. Manaʻo nā mea kākau o kēia mau ʻatikala ua kamaʻāina kā lākou mea heluhelu i ka hoʻomohala noiʻi, microservices, a me nā pahu Docker. E hele mākou ma ke ala ʻē aʻe. ʻO ka mea mua, e kamaʻilio e pili ana i ka holo ʻana i kahi noi e pili ana i nā microservice ma kahi kamepiula. A laila e nānā mākou i ke kūkulu ʻana i nā kiʻi pahu no kēlā me kēia microservice. A ma hope o kēlā, e kamaʻāina mākou me nā Kubernetes a me ka nānā ʻana i ka waiho ʻana o kahi noi e pili ana i nā microservices i loko o kahi pūʻulu i mālama ʻia e Kubernetes.

ʻO kēia ala, me ka hele mālie ʻana i nā Kubernetes, e hāʻawi i ka hohonu o ka hoʻomaopopo ʻana i nā mea e hana nei, pono ia no ka mea maʻamau e hoʻomaopopo i ke ʻano o ka hoʻonohonoho ʻana o nā mea āpau ma Kubernetes. He ʻenehana maʻalahi ʻo Kubernetes, ʻoiai ʻo ka mea makemake e ʻike iā ia e ʻike i kahi a pehea e hoʻohana ʻia ai.

I kēia manawa, me ka ʻole o ka hoʻopaʻapaʻa, e hoʻomaka kāua e hana a kamaʻilio e pili ana i ka noi a mākou e hana pū ai.

polokalamu hoʻokolohua

Hoʻokahi wale nō hana o kā mākou noi. Lawe ʻo ia, ma ke ʻano he hoʻokomo, hoʻokahi ʻōlelo, a ma hope o ia, me ka hoʻohana ʻana i nā mea hana loiloi kikokikona, hana ia i ka nānā ʻana i ka manaʻo o kēia ʻōlelo, e loaʻa ana kahi loiloi o ka manaʻo o ka mea kākau o ka ʻōlelo i kekahi mea.

ʻO kēia ke ʻano o ka puka aniani nui o kēia noi.

Kubernetes Aʻo Mahele 1: Nā noi, Microservices, a me nā pahu
Hoʻohana Pūnaewele ʻIke Manaʻo

Mai kahi hiʻohiʻona ʻenehana, aia ka noi i ʻekolu microservices, kēlā me kēia mea e hoʻonā i kekahi mau hana:

  • ʻO SA-Frontend kahi kikowaena pūnaewele Nginx e lawelawe ana i nā faila static React.
  • ʻO SA-WebApp kahi palapala noi pūnaewele i kākau ʻia ma Java e lawelawe ana i nā noi mai ke alo.
  • ʻO SA-Logic kahi noi Python e hana ana i ka nānā ʻana i ka manaʻo kikokikona.

He mea nui e hoʻomaopopo ʻaʻole noho kaʻawale nā ​​microservices. Hoʻokō lākou i ka manaʻo o "ka hoʻokaʻawale ʻana i nā hana", akā, i ka manawa like, pono lākou e launa pū me kekahi.

Kubernetes Aʻo Mahele 1: Nā noi, Microservices, a me nā pahu
Ke kahe nei ka ʻikepili i ka noi

Ma ke kiʻikuhi i luna, hiki iā ʻoe ke ʻike i nā pae helu o ka ʻōnaehana, e hōʻike ana i nā kahe ʻikepili i ka noi. E wāwahi kākou iā lākou:

  1. Noi ka polokalamu kele i kahi faila mai ke kikowaena index.html (ʻo ia ka mea e hoʻouka ai i ka pūʻolo app React).
  2. Hoʻopili ka mea hoʻohana me ka noi, ke kumu kēia i kahi kelepona i kahi noi pūnaewele ma muli o Spring.
  3. Hoʻouna ka palapala noi pūnaewele i ka noi e hoʻokaʻawale i ka kikokikona i ka noi Python.
  4. Hoʻopili ka noi Python i ka manaʻo o ka kikokikona a hoʻihoʻi i ka hopena ma ke ʻano he pane i ka noi.
  5. Hoʻouna ka polokalamu Spring i kahi pane i ka noi React (ʻo ia hoʻi, e hōʻike ana i ka hopena o ka kikokikona i hoʻopaʻa ʻia i ka mea hoʻohana).

Hiki ke loaʻa ke code no kēia mau noi āpau maanei. Manaʻo wau e kope ʻoe i kēia waihona iā ʻoe iho i kēia manawa, no ka mea he nui nā hoʻokolohua hoihoi me ia ma mua o mākou.

Ke holo nei i kahi noi e pili ana i nā microservices ma ka mīkini kūloko

I mea e hana ai ka noi, pono mākou e hoʻomaka i nā microservice ʻekolu. E hoʻomaka kākou me ka nani loa o lākou - ka noi mua.

▍ Hoʻonohonoho i ka React no ka hoʻomohala kūloko

No ka holo ʻana i kahi noi React, pono ʻoe e hoʻokomo i ka framework Node.js a me NPM ma kāu kamepiula. Ma hope o ka hoʻokomo ʻana i kēia mau mea a pau, e hoʻohana i ka terminal i ka waihona papahana sa-frontend a holo i kēia kauoha:

npm install

Ma ka hoʻokō ʻana i kēia kauoha ma ka waihona node_modules e hoʻouka ʻia nā mea hilinaʻi o ka noi React, aia nā moʻolelo i loko o ka faila package.json. Ma hope o ka hoʻoiho ʻana i nā mea hilinaʻi ma ka waihona like, e holo i kēia kauoha:

npm start

ʻo ia wale nō. Ke holo nei ka polokalamu React a hiki ke kiʻi ʻia ma ka hoʻokele ʻana i ka helu kelepona localhost:3000. Hiki iā ʻoe ke hoʻololi i kekahi mea ma kāna code. E ʻike koke ʻoe i ka hopena o kēia mau hoʻololi i ka polokalamu kele pūnaewele. Hiki i kēia ke mahalo i ka mea i kapa ʻia he "wela" pani o nā modula. Mahalo i kēia, huli ka hoʻomohala mua i kahi ʻike maʻalahi a leʻaleʻa.

▍Hoʻomākaukau i kahi polokalamu React no ka hana ʻana

No ke kumu o ka hoʻohana maoli ʻana i kahi polokalamu React, pono mākou e hoʻololi iā ia i hoʻonohonoho o nā faila static a lawelawe iā lākou i nā mea kūʻai aku e hoʻohana ana i kahi kikowaena pūnaewele.

No ke kūkulu ʻana i ka app React, e hoʻohana hou i ka terminal, hoʻokele i ka waihona sa-frontend a holo i kēia kauoha:

npm run build

E hana kēia i kahi papa kuhikuhi ma ka waihona papahana build. Loaʻa iā ia nā faila static a pau e pono ai no ka hana ʻana o ka noi React.

▍Ke lawelawe nei i nā faila static me Nginx

Pono mua ʻoe e hoʻokomo a holo i ka pūnaewele pūnaewele Nginx. he mea hiki iā ʻoe ke hoʻoiho a loaʻa nā ʻōlelo kuhikuhi no ka hoʻokomo ʻana a me ka holo ʻana. A laila pono ʻoe e kope i nā mea o ka waihona sa-frontend/build i ka waihona [your_nginx_installation_dir]/html.

Me kēia ala, ʻo ka faila i hana ʻia i ka wā o ka hui ʻana o ka noi React index.html e loaʻa ma [your_nginx_installation_dir]/html/index.html. ʻO kēia ka faila, ma ka maʻamau, nā pilikia o ka server Nginx i ka wā e komo ai. Hoʻonohonoho ʻia ke kikowaena e hoʻolohe ma kahi awa 80, akā hiki iā ʻoe ke hoʻonohonoho i ke ala āu e makemake ai ma ka hoʻoponopono ʻana i ka faila [your_nginx_installation_dir]/conf/nginx.conf.

E wehe i kāu polokalamu kele pūnaewele a hele i localhost:80. E ʻike ʻoe i ka ʻaoʻao app React.

Kubernetes Aʻo Mahele 1: Nā noi, Microservices, a me nā pahu
React app i lawelawe ʻia e ka server Nginx

Inā ʻoe e hoʻokomo i kekahi mea ma ke kahua Type your sentence a kaomi i ke pihi Send - ʻaʻohe mea e hiki mai. Akā, inā ʻoe e nānā i ka console, hiki iā ʻoe ke ʻike i nā memo hewa ma laila. I mea e hoʻomaopopo pono ai i kahi e kū ai kēia mau hewa, e nānā kākou i ke code noi.

▍Ka nānā ʻana i ke code o ka palapala noi mua

Ke nānā nei i ke code o ka faila App.js, hiki iā mākou ke ʻike i ke kaomi ʻana i ke pihi Send kahea i ke ano analyzeSentence(). Hōʻike ʻia ke code no kēia ʻano hana ma lalo nei. I ka manawa like, e hoʻolohe i ka ʻoiaʻiʻo no kēlā me kēia laina i loaʻa kahi ʻōlelo o ke ʻano # Номер, aia kahi wehewehe i hāʻawi ʻia ma lalo o ke code. Ma ke ala like, e hoʻokaʻawale mākou i nā ʻāpana code ʻē aʻe.

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. ʻO ka HKH kahi i noi ʻia ai ka POST. Ua manaʻo ʻia kēia helu wahi he palapala noi e kali ana no ia mau noi.

2.Hoʻouna ʻia ke kino noi i ka palapala noi. Eia ke kino noi laʻana:

{
    sentence: "I like yogobella!"
}

3.Ke loaʻa ka pane i kahi noi, hoʻonui ʻia ke kūlana o ka ʻāpana. ʻO kēia ke kumu e hana hou ai ka ʻāpana. Inā loaʻa iā mākou ka ʻikepili (ʻo ia hoʻi, kahi mea JSON i loko o ka ʻikepili i hoʻokomo ʻia a me ka helu kikokikona i helu ʻia), e hoʻopuka mākou i ka ʻāpana Polarityoiai ua hookoia na kumu. Eia kā mākou wehewehe ʻana i ka ʻāpana:

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

Me he mea lā e hana maikaʻi ana ke code. He aha ka hewa maanei? Inā manaʻo ʻoe ma ka helu wahi e hoʻāʻo ai ka noi e hoʻouna i kahi noi POST, ʻaʻohe mea i hiki ke ʻae a hoʻokō i kēia noi, a laila pololei loa ʻoe. ʻO ia hoʻi, e hoʻoponopono i nā noi e hōʻea ana i ka helu wahi http://localhost:8080/sentiment, pono mākou e holo i kahi noi pūnaewele ma muli o Spring.

Kubernetes Aʻo Mahele 1: Nā noi, Microservices, a me nā pahu
Pono mākou i kahi noi Spring hiki ke ʻae i kahi noi POST

▍Ka hoʻonohonoho ʻana i kahi palapala noi pūnaewele ma muli o Spring

I mea e kau ai i kahi noi Spring, pono ʻoe iā JDK8 a me Maven a me nā ʻano hoʻololi kaiapuni i hoʻonohonoho pono ʻia. Ma hope o kou hoʻokomo ʻana i kēia mau mea a pau, hiki iā ʻoe ke hoʻomau i ka hana ma kā mākou papahana.

▍ Hoʻopili i ka palapala noi i loko o kahi faila jar

E hoʻokele, me ka hoʻohana ʻana i ka terminal, i ka waihona sa-webapp a komo i keia kauoha:

mvn install

Ma hope o ka hoʻokō ʻana i kēia kauoha i ka waihona sa-webapp e hana ʻia ka papa kuhikuhi target. ʻO kēia kahi e loaʻa ai ka polokalamu Java, i hoʻopaʻa ʻia i kahi faila jar, i hōʻike ʻia e ka faila sentiment-analysis-web-0.0.1-SNAPSHOT.jar.

▍Ke hoʻomaka nei i kahi polokalamu Java

E hele i ka waihona target a holo i ka noi me kēia kauoha:

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

Loaʻa ka hewa i ka wā e hoʻokō ai i kēia kauoha. I mea e hoʻomaka ai e hoʻoponopono, hiki iā mākou ke hoʻokaʻawale i nā kikoʻī ʻokoʻa i ka ʻikepili trace stack:

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

No mākou, ʻo ka mea nui ma ʻaneʻi ʻo ka haʻi ʻana i ka hiki ʻole ke wehewehe i ke ʻano sa.logic.api.url. E noʻonoʻo kākou i ke code kahi i kū ai ka hewa.

▍Ka helu helu palapala noi Java

Eia ka snippet code kahi i kū ai ka hewa.

@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. I loko o SentimentController he mahinaai saLogicApiUrl. Hoʻonohonoho ʻia kona waiwai e ka waiwai sa.logic.api.url.
  2. Nā laina saLogicApiUrl hui pū me ka waiwai /analyse/sentiment. Hoʻohui pū lākou i kahi helu no ke kelepona ʻana i ka microservice e hana ana i ka nānā ʻana i nā kikokikona.

▍Ka hoʻonohonoho ʻana i kahi waiwai waiwai

I ka punawai, ʻo ke kumu paʻamau o nā waiwai waiwai he faila application.properties, hiki ke loaʻa ma sa-webapp/src/main/resources. Akā ʻo ka hoʻohana ʻana ʻaʻole ia wale ke ala e hoʻonohonoho ai i nā waiwai waiwai. Hiki iā ʻoe ke hana i kēia me kēia kauoha:

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

Pono ka waiwai o kēia waiwai e kuhikuhi i ka helu o kā mākou noi Python.

Ma ka hoʻonohonoho ʻana iā ia, haʻi mākou i ka noi pūnaewele Spring kahi e pono ai e hana i nā noi parsing kikokikona.

I ʻole e paʻakikī i ko mākou ola, e hoʻoholo mākou e loaʻa ka noi Python ma localhost:5000 a e ho'āʻo e poina iā ia. ʻO ka hopena, ʻo ke kauoha e hoʻomaka i ka noi Spring e like me kēia:

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

Kubernetes Aʻo Mahele 1: Nā noi, Microservices, a me nā pahu
Ua nele kā mākou ʻōnaehana i kahi noi Python

I kēia manawa pono mākou e holo i ka noi Python a e hana ka ʻōnaehana e like me ka mea i manaʻo ʻia.

▍ Hoʻonohonoho i kahi noi Python

No ka holo ʻana i kahi noi Python, pono ʻoe e hoʻokomo iā Python 3 a me Pip, a pono ʻoe e hoʻonohonoho pono i nā ʻano hoʻololi kaiapuni kūpono.

▍E hoʻouka i nā mea hilinaʻi

E hele i ka waihona papahana sa-logic/sa a holo i kēia mau kauoha:

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

▍ Hoʻomaka ka polokalamu

Me nā mea hilinaʻi i kau ʻia, ua mākaukau mākou e holo i ka noi:

python sentiment_analysis.py

Ma hope o ka hoʻokō ʻana i kēia kauoha, e haʻi ʻia iā mākou penei:

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

'O ia ho'i ke holo nei ka noi a ke kali nei i nā noi ma localhost:5000/

▍Ka noiʻi code

E nānā kākou i ke code noi Python no ka hoʻomaopopo ʻana i kona pane ʻana i nā noi:

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. Hoʻomaka mua mea Flask.
  2. E wehewehe ana i ka helu wahi no ka noi ʻana iā POST.
  3. Ke kiʻi ʻana i kahi waiwai sentence mai ke kino noi.
  4. Ka hoʻomaka ʻana o ka mea inoa ʻole TextBlob a loaa ka waiwai polarity no ka noi mua i loaʻa ma ke kino o ka noi (i kā mākou hihia, ʻo kēia wale nō ka noi i waiho ʻia no ka nānā ʻana).
  5. Hoʻihoʻi i kahi pane, aia i loko o ke kino ka kikokikona o ka hāʻawi a me ka mea hōʻailona i helu ʻia no ia polarity.
  6. Ke hoʻomaka nei i ka noi Flask, e loaʻa ana ma 0.0.0.0:5000 (hiki iā ʻoe ke komo iā ia me ka hoʻohana ʻana i ke kūkulu ʻana o ke ʻano localhost:5000).

I kēia manawa ke holo nei nā microservices i hoʻokumu i ka noi. Hoʻonohonoho ʻia lākou e launa pū kekahi me kekahi. Eia ke ʻano o ke kiʻikuhi noi ma kēia pae o ka hana.

Kubernetes Aʻo Mahele 1: Nā noi, Microservices, a me nā pahu
Lawe ʻia nā microservice a pau e hana i ka noi i kahi kūlana olakino

I kēia manawa, ma mua o ka hoʻomau ʻana, wehe i ka React app ma kahi polokalamu kele pūnaewele a hoʻāʻo e hoʻokaʻawale i kekahi ʻōlelo me ia. Inā hana pololei nā mea a pau - ma hope o ke kaomi ʻana i ke pihi Send e ʻike ʻoe i nā hualoaʻa loiloi ma lalo o ka pahu kikokikona.

Ma ka ʻāpana aʻe, e kamaʻilio mākou e pili ana i ka holo ʻana i kā mākou microservices i nā pahu Docker. Pono kēia i mea e hoʻomākaukau ai i ka noi e holo i ka hui Kubernetes.

Nā pahu Docker

Kubernetes he ʻōnaehana no ka hoʻokaʻawale ʻana, ka hoʻonui ʻana a me ka hoʻokele ʻana i nā noi containerized. Ua kapa ʻia ʻo ia he "container orchestrator". Inā hana ʻo Kubernetes me nā ipu, a laila ma mua o ka hoʻohana ʻana i kēia ʻōnaehana, pono mākou e kiʻi i kēia mau ipu. Akā ʻo ka mua, e kamaʻilio e pili ana i nā ipu. ʻO ka pane maikaʻi loa paha i ka nīnau o ka mea hiki ke loaʻa i loko palapala iā Docker:

ʻO ke kiʻi pahu he pahu māmā, paʻa ponoʻī, hiki ke hoʻokō ʻia i loko o kahi noi, e komo pū ana i nā mea āpau e pono ai e holo: code noi, runtime environment, system tools and library, settings. Hiki ke hoʻohana ʻia nā papahana i hoʻopaʻa ʻia ma nā kaiapuni ʻo Linux a me Windows a e hana mau nō ia me ka nānā ʻole ʻana i ka ʻōnaehana.

'O ia ho'i, hiki ke ho'ohana 'ia nā ipu ma luna o kekahi kamepiula, me nā kikowaena hana, a ma kēlā me kēia kaiapuni, e hana like nā polokalamu i loko o ia mau mea.

No ka ʻimi ʻana i nā hiʻohiʻona o nā ipu a hoʻohālikelike iā lākou i nā ala ʻē aʻe e holo ai i nā noi, e nānā i ka laʻana o ka lawelawe ʻana i kahi noi React me ka hoʻohana ʻana i kahi mīkini virtual a me kahi pahu.

▍Ka lawelawe ʻana i nā faila static o kahi palapala noi React me ka mīkini virtual

Ke ho'āʻo nei e hoʻonohonoho i ka mālama ʻana i nā faila static me ka hoʻohana ʻana i nā mīkini virtual, e hālāwai mākou i kēia mau hemahema:

  1. Hoʻohana pono ʻole i nā kumuwaiwai, no ka mea he ʻōnaehana holoʻokoʻa kēlā me kēia mīkini virtual.
  2. Ka hilinaʻi platform. ʻAʻole pono paha ka hana ma kekahi kamepiula kūloko ma kahi kikowaena hana.
  3. ʻO ka scaling lohi a me ke kumu waiwai o kahi hoʻonā mīkini uila.

Kubernetes Aʻo Mahele 1: Nā noi, Microservices, a me nā pahu
ʻO ka server pūnaewele Nginx e lawelawe ana i nā faila static e holo ana i kahi mīkini virtual

Inā hoʻohana ʻia nā ipu e hoʻoponopono i kahi pilikia like, a laila, i ka hoʻohālikelike ʻana me nā mīkini virtual, hiki ke ʻike ʻia nā ikaika aʻe:

  1. Hoʻohana pono i nā kumuwaiwai: hana me ka ʻōnaehana hana me ka hoʻohana ʻana iā Docker.
  2. Kūʻokoʻa paepae. E holo ana kahi pahu e hiki ai i ka mea hoʻomohala ke holo ma kāna kamepiula ponoʻī.
  3. Hoʻolaha māmā ma o ka hoʻohana ʻana i nā papa kiʻi.

Kubernetes Aʻo Mahele 1: Nā noi, Microservices, a me nā pahu
Hāʻawi ʻo Nginx pūnaewele i nā faila static e holo ana i kahi pahu

Ua hoʻohālikelike wale mākou i nā mīkini virtual a me nā ipu ma kekahi mau wahi, akā ʻo ia ka lawa e ʻike ai i ka ikaika o nā ipu. he mea Hiki iā ʻoe ke ʻike i nā kikoʻī e pili ana i nā pahu Docker.

▍Ke kūkulu ʻana i kiʻi pahu no kahi polokalamu React

ʻO ka papa hana kumu o kahi pahu Docker ka faila Dockerfile. I ka hoʻomaka ʻana o kēia faila, ua hoʻopaʻa ʻia kahi kiʻi kumu o ka ipu, a laila hoʻokomo ʻia kahi ʻano kuhikuhi e hōʻike ana i ke ʻano o ka hana ʻana i kahi pahu e kūpono i nā pono o kahi noi.

Ma mua o ka hoʻomaka ʻana e hana me ka faila Dockerfile, e hoʻomanaʻo i ka mea a mākou i hana ai i mea e hoʻomākaukau ai i nā faila o ka noi React no ka hoʻouka ʻana i ka server Nginx:

  1. Ke kūkulu ʻana i kahi pūʻolo polokalamu React (npm run build).
  2. E hoʻomaka ana i ka server Nginx.
  3. Ke kope ʻana i nā mea o kahi papa kuhikuhi build mai ka waihona papahana sa-frontend i ka waihona kikowaena nginx/html.

Ma lalo ʻoe e ʻike ai i nā mea like ma waena o ka hana ʻana i kahi pahu a me nā hana i luna i hana ʻia ma ke kamepiula kūloko.

▍ Hoʻomākaukau i kahi Dockerfile no ka noi SA-Frontend

Nā kuhikuhi e hoʻokomo i loko Dockerfile no ka palapala noi SA-Frontend, ʻelua wale nō hui. ʻO ka ʻoiaʻiʻo ua hoʻomākaukau ka hui hoʻomohala Nginx i kahi kumu kiʻi no Nginx, a mākou e hoʻohana ai e kūkulu i kā mākou kiʻi. Eia nā ʻanuʻu ʻelua e pono ai mākou e wehewehe:

  1. Pono ʻoe e hana i ke kiʻi Nginx i kumu o ke kiʻi.
  2. waihona waihona sa-frontend/build pono e kope i ka waihona kiʻi nginx/html.

Inā hele mākou mai kēia wehewehe ʻana i ka faila Dockerfile, a laila e like me kēia:

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

E like me kāu e ʻike ai, maʻalahi loa nā mea āpau ma aneʻi, ʻoiai ʻo ka ʻike o ka faila e hiki ke heluhelu a hiki ke hoʻomaopopo ʻia. Hōʻike kēia faila i ka ʻōnaehana e lawe i ke kiʻi nginx me nā mea a pau i loaʻa iā ia, a kope i nā mea o ka papa kuhikuhi build i ka papa kuhikuhi nginx/html.

Eia paha kāu nīnau e pili ana i kaʻu ʻike i kahi e kope pono ai i nā faila mai ka waihona build, i.e. no hea mai ke ala /usr/share/nginx/html. ʻOiaʻiʻo, ʻaʻohe mea paʻakikī ma ʻaneʻi. ʻO kaʻoiaʻiʻo, hiki ke loaʻa ka ʻike pili i loko wehewehe kiʻi.

▍Hoʻākoakoa i ke kiʻi a hoʻouka i ka waihona

Ma mua o hiki iā mākou ke hana me kahi kiʻi i hoʻopau ʻia, pono mākou e waiho i ka waihona kiʻi. No ka hana ʻana i kēia, e hoʻohana mākou i ka pūnaewele hoʻolaha kiʻi kiʻi kiʻi manuahi Docker Hub. I kēia pae o ka hana, pono ʻoe e hana i kēia:

  1. Hoʻohui Docker.
  2. E hoʻopaʻa inoa ma ka pūnaewele Docker Hub.
  3. E komo i kāu moʻokāki ma ka holo ʻana i kēia kauoha ma ka pahu:
    docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"

I kēia manawa pono ʻoe, me ka hoʻohana ʻana i ka terminal, e hele i ka papa kuhikuhi sa-frontend a holo i kēia kauoha ma laila:

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

Eia a ma lalo i nā kauoha like $DOCKER_USER_ID pono e hoʻololi ʻia me kou inoa inoa ma Docker Hub. No ka laʻana, e like paha kēia ʻāpana o ke kauoha: rinormaloku/sentiment-analysis-frontend.

I kēia hihia, hiki ke hoʻopōkole ʻia kēia kauoha ma ka wehe ʻana mai ia mea -f Dockerfile, ʻoiai ua loaʻa i ka waihona kahi a mākou e hoʻokō ai i kēia kauoha.

No ka hoʻouna ʻana i ke kiʻi i hoʻopau ʻia i ka waihona, pono mākou i kēia kauoha:

docker push $DOCKER_USER_ID/sentiment-analysis-frontend

Ma hope o ka hoʻopau ʻana, e nānā i kāu papa inoa o nā waihona ma Docker Hub e ʻike inā ua paʻi maikaʻi ʻia ke kiʻi i ka waihona kapuaʻi.

▍Hoʻomaka i kahi pahu

I kēia manawa hiki i kekahi ke hoʻoiho a holo i ke kiʻi i kapa ʻia ʻo $DOCKER_USER_ID/sentiment-analysis-frontend. No ka hana ʻana i kēia, pono ʻoe e holo i kēia kaʻina o nā kauoha:

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

Ke holo nei ka pahu, a hiki iā mākou ke hoʻomau i ka hana ma ka hana ʻana i nā kiʻi ʻē aʻe a mākou e pono ai. Akā ma mua o ka hoʻomau ʻana, e hoʻomaopopo kākou i ka hoʻolālā 80:80, ka mea i loaʻa i loko o ke kauoha e holo i ke kiʻi a me he mea huikau.

  • Helu mua 80 ʻo ia ka helu awa o ka mea hoʻokipa (ʻo ia hoʻi, ke kamepiula kūloko).
  • Helu lua 80 ʻo ia ke awa o ka pahu kahi e hoʻohuli hou ʻia ai ke noi.

E noʻonoʻo i kēia kiʻi.

Kubernetes Aʻo Mahele 1: Nā noi, Microservices, a me nā pahu
Hoʻouna ʻana i ke awa

Hoʻouna ka ʻōnaehana i nā noi mai ke awa <hostPort> i ke awa <containerPort>. ʻO ia hoʻi, ke komo ʻana i ke awa 80 hoʻihoʻi ʻia ke kamepiula i kahi awa 80 ipu.

Mai ka awa 80 wehe ʻia ma ke kamepiula kūloko, hiki iā ʻoe ke komo i ka noi mai kēia kamepiula ma localhost:80. Inā ʻaʻole kākoʻo kāu ʻōnaehana iā Docker, hiki iā ʻoe ke holo i ka noi ma kahi mīkini virtual Docker, e like ke ʻano o ka helu. <docker-machine ip>:80. No ka ʻike ʻana i ka IP address o ka mīkini virtual Docker, hiki iā ʻoe ke hoʻohana i ke kauoha docker-machine ip.

I kēia manawa, i ka manawa i hoʻomaka maikaʻi ai ka pahu app mua, pono ʻoe e wehe i kāna ʻaoʻao ma kahi polokalamu kele.

▍.dockerignore waihona

Ke kūkulu ʻana i ke kiʻi noi SA-Frontend, hiki iā mākou ke ʻike he lohi loa kēia kaʻina hana. ʻO kēia no ka mea pono e hoʻouna ʻia ka pōʻaiapili kūkulu kiʻi i ka daemon Docker. Hāʻawi ʻia ka papa kuhikuhi e hōʻike ana i ka pōʻaiapili kūkulu ma ke ʻano he hoʻopaʻapaʻa hope loa i ke kauoha docker build. I kā mākou hihia, aia kahi kiko ma ka hope o kēia kauoha. ʻO kēia ka hopena i ka hoʻopili ʻia ʻana o kēia ʻano i loko o ka pōʻaiapili hui:

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

Akā ʻo nā waihona āpau i loaʻa ma ʻaneʻi, pono mākou i kahi waihona build. ʻO ka hoʻoiho ʻana i kekahi mea ʻē aʻe he mea hoʻopau manawa. Hiki iā ʻoe ke wikiwiki i ke kūkulu ʻana ma ka haʻi ʻana iā Docker i nā papa kuhikuhi e haʻalele. No ka hana ʻana i kēia, pono mākou i kahi faila .dockerignore. ʻO ʻoe, inā kamaʻāina ʻoe i ka faila .gitignore, maʻa paha ke ʻano o kēia faila. Hoʻopaʻa ia i nā papa kuhikuhi i hiki ʻole i ka ʻōnaehana kūkulu kiʻi ke haʻalele. I kā mākou hihia, ua like nā mea o kēia faila:

node_modules
src
public

waihona .dockerignore pono i loko o ka waihona like me ka waihona Dockerfile. I kēia manawa, e lawe ʻia ka hui o ke kiʻi i mau kekona.

E hana kākou i ke kiʻi no kahi polokalamu Java.

▍Ke kūkulu ʻana i kiʻi pahu no kahi polokalamu Java

ʻIke ʻoe i ka mea, a ua aʻo mua ʻoe i nā mea āpau āu e pono ai e hana i nā kiʻi pahu. ʻO ia ke kumu e pōkole loa ai kēia māhele.

E wehe i ka faila Dockerfile, aia ma ka waihona papahana sa-webapp. Inā heluhelu ʻoe i ka kikokikona o kēia faila, a laila ʻelua mau kūkulu hou e hoʻomaka me nā huaʻōlelo ENV и EXPOSE:

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

Huaʻōlelo nui ENV hiki iā ʻoe ke haʻi aku i nā ʻano like ʻole i loko o nā pahu Docker. ʻO ka mea kūikawā, i kā mākou hihia, hiki iā ʻoe ke hoʻonohonoho i kahi URL e komo i ka API o ka noi e hana ana i ka nānā ʻana i nā kikokikona.

Huaʻōlelo nui EXPOSE hiki iā ʻoe ke haʻi iā Docker e wehe i kahi awa. E hoʻohana mākou i kēia awa ke hana mākou me ka noi. Maanei hiki iā ʻoe ke ʻike i kēlā ma Dockerfile no ka palapala noi SA-Frontend aohe kauoha pela. No ka palapala wale nō kēia, ʻo ia hoʻi, no ka mea heluhelu kēia kūkulu Dockerfile.

ʻO ke kūkulu ʻana i ke kiʻi a hoʻokuʻu iā ia i ka waihona e like me ka laʻana mua. Inā ʻaʻole ʻoe i hilinaʻi nui i kou hiki, hiki ke loaʻa nā kauoha pili i ka faila README.md i ka waihona sa-webapp.

▍Ke kūkulu ʻana i kiʻi pahu no kahi noi Python

Inā ʻoe e nānā i nā mea o ka faila Dockerfile i ka waihona sa-logicʻaʻole ʻoe e ʻike i kahi mea hou ma laila. ʻO nā kauoha no ke kūkulu ʻana i ke kiʻi a paʻi iā ia i ka waihona e ʻike mua iā ʻoe, akā, e like me ke ʻano o kā mākou mau noi ʻē aʻe, hiki ke loaʻa iā lākou ma ka faila. README.md i ka waihona sa-logic.

▍Ke hoʻāʻo nei i nā noi pahu pahu

Hiki iā ʻoe ke hilinaʻi i kahi mea āu i hoʻāʻo ʻole ai? ʻAʻole hiki iaʻu. E ho'āʻo kākou i kā mākou mau ipu.

  1. E hoʻomaka kākou i ka pahu noi sa-logic a hoʻonohonoho iā ia e hoʻolohe ma kahi awa 5050:
    docker run -d -p 5050:5000 $DOCKER_USER_ID/sentiment-analysis-logic
  2. E hoʻomaka kākou i ka pahu noi sa-webapp a hoʻonohonoho iā ia e hoʻolohe ma kahi awa 8080. Eia kekahi, pono mākou e hoʻonohonoho i ke awa kahi e hoʻolohe ai ka noi Python no nā noi mai ka noi Java ma o ka hoʻihoʻi ʻana i ka loli kaiapuni. 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

E aʻo pehea e ʻike ai i ka IP address o kahi pahu a i ʻole Docker VM, e nānā i ka faila README.

E hoʻomaka kākou i ka pahu noi sa-frontend:

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

I kēia manawa ua mākaukau nā mea a pau e hoʻokele i ka polokalamu kele i ka helu wahi localhost:80 a hoʻāʻo i ka app.

E ʻoluʻolu e hoʻomaopopo inā hoʻololi ʻoe i ke awa no sa-webapp, a inā ʻoe e holo nei i kahi Docker VM, pono ʻoe e hoʻoponopono i ka faila App.js mai kahi waihona sa-frontendma ka hoʻololi ʻana i ka helu IP a i ʻole ka helu port ma ke ʻano analyzeSentence()ma ke pani ʻana i ka ʻike o kēia manawa ma kahi o ka ʻikepili kahiko. Ma hope o kēlā, pono ʻoe e hui hou i ke kiʻi a hoʻohana.

ʻO kēia ke ʻano o kā mākou palapala noi i kēia manawa.

Kubernetes Aʻo Mahele 1: Nā noi, Microservices, a me nā pahu
Holo nā microservices i nā pahu

Hōʻuluʻulu manaʻo: no ke aha mākou e pono ai i kahi hui Kubernetes?

Ua nānā wale mākou i nā faila Dockerfile, kamaʻilio e pili ana i ke kūkulu ʻana i nā kiʻi a hoʻokuke iā lākou i kahi waihona Docker. Eia kekahi, ua aʻo mākou pehea e wikiwiki ai i ka hui ʻana o nā kiʻi me ka hoʻohana ʻana i ka faila .dockerignore. ʻO ka hopena, ke holo nei kā mākou microservices i nā pahu Docker. Ma ʻaneʻi paha ʻoe i kahi nīnau kūpono e pili ana i ke kumu e pono ai mākou iā Kubernetes. ʻO ka pane i kēia nīnau e hāʻawi ʻia i ka ʻāpana ʻelua o kēia mea. I kēia manawa, e noʻonoʻo i kēia nīnau:
E manaʻo mākou ua kaulana kā mākou palapala noiʻi kikokikona ma ka honua holoʻokoʻa. He mau miliona noi e hele mai iā ia i kēlā me kēia minuke. ʻO kēia ke ʻano o nā microservices sa-webapp и sa-logic e pilikia nui ana. Pehea e hoʻonui ai i nā ipu e holo ana i nā microservices?

Kubernetes Aʻo Mahele 1: Nā noi, Microservices, a me nā pahu

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka