Kubernetes Tutorial Part 1: Daim Ntawv Thov, Microservices, thiab Ntim

Ntawm peb qhov kev thov, Habr tsim lub hub Kubernetes thiab peb txaus siab tso thawj qhov kev tshaj tawm hauv nws. Subscribe!

Kubernetes yooj yim. Vim li cas cov tsev txhab nyiaj them nyiaj ntau rau kuv los ua haujlwm hauv cheeb tsam no, thaum leej twg tuaj yeem paub txog cov cuab yeej no hauv ob peb teev xwb?

Kubernetes Tutorial Part 1: Daim Ntawv Thov, Microservices, thiab Ntim

Yog tias koj tsis ntseeg tias Kubernetes tuaj yeem kawm tau sai, kuv xav kom koj sim ua koj tus kheej. Namely, tau paub cov ntaub ntawv no, koj yuav muaj peev xwm khiav ib daim ntawv thov raws li microservices hauv Kubernetes pawg. Kuv tuaj yeem lav qhov no, vim tias nws yog tib txoj hauv kev uas kuv siv ntawm no uas kuv qhia peb cov neeg siv khoom ua haujlwm nrog Kubernetes. Dab tsi ua rau phau ntawv qhia no txawv ntawm lwm tus? Qhov tseeb, ntau yam. Yog li, feem ntau ntawm cov ntaub ntawv no pib nrog kev piav qhia ntawm tej yam yooj yim - cov ntsiab lus ntawm Kubernetes thiab cov yam ntxwv ntawm kubectl hais kom ua. Cov kws sau ntawv ntawm cov ntawv no xav tias lawv cov neeg nyeem paub txog kev txhim kho daim ntawv thov, microservices, thiab Docker ntim. Peb yuav mus rau lwm txoj kev. Ua ntej, cia peb tham txog yuav ua li cas khiav ib daim ntawv thov raws li microservices ntawm lub computer. Tom qab ntawd peb yuav saib lub tsev ntim cov duab rau txhua qhov microservice. Thiab tom qab ntawd, peb yuav paub nrog Kubernetes thiab txheeb xyuas qhov kev xa tawm ntawm daim ntawv thov raws li microservices hauv pawg tswj hwm los ntawm Kubernetes.

Txoj hauv kev no, nrog rau kev maj mam mus rau Kubernetes, yuav muab qhov tob ntawm kev nkag siab txog qhov tshwm sim uas tus neeg nruab nrab xav tau kom nkag siab tias txhua yam yooj yim li cas hauv Kubernetes. Kubernetes yog ib qho cuab yeej yooj yim, yog tias leej twg xav paub nws paub qhov twg thiab siv nws li cas.

Tam sim no, tsis muaj ado ntxiv, cia peb mus ua haujlwm thiab tham txog daim ntawv thov uas peb yuav ua haujlwm nrog.

Kev sim app

Peb daim ntawv thov yuav ua ib qho haujlwm xwb. Nws yuav siv sij hawm, raws li kev nkag siab, ib kab lus, tom qab ntawd, siv cov cuab yeej tsom xam cov ntawv nyeem, nws ua qhov kev xav ntawm kab lus no, tau txais kev ntsuam xyuas ntawm tus cwj pwm ntawm tus neeg sau kab lus rau qee yam khoom.

Qhov no yog dab tsi lub qhov rais tseem ceeb ntawm daim ntawv thov no zoo li.

Kubernetes Tutorial Part 1: Daim Ntawv Thov, Microservices, thiab Ntim
Sentiment Analysis Web Application

Los ntawm kev pom kev, daim ntawv thov muaj peb lub microservices, txhua qhov kev daws teeb meem qee yam haujlwm:

  • SA-Frontend yog Nginx web server uas ua haujlwm rau cov ntaub ntawv zoo li qub.
  • SA-WebApp yog ib daim ntawv thov web sau hauv Java uas tswj kev thov los ntawm frontend.
  • SA-Logic yog daim ntawv thov Python uas ua cov ntawv nyeem kev xav.

Nws yog ib qho tseem ceeb kom nco ntsoov tias microservices tsis muaj nyob hauv kev sib cais. Lawv siv lub tswv yim ntawm "kev sib cais ntawm lub luag haujlwm", tab sis lawv, tib lub sijhawm, yuav tsum muaj kev sib raug zoo.

Kubernetes Tutorial Part 1: Daim Ntawv Thov, Microservices, thiab Ntim
Cov ntaub ntawv ntws hauv daim ntawv thov

Hauv daim duab saum toj no, koj tuaj yeem pom cov lej lej ntawm qhov system, qhia txog cov ntaub ntawv ntws hauv daim ntawv thov. Cia peb rhuav tshem lawv:

  1. Lub browser thov cov ntaub ntawv los ntawm lub server index.html (uas nyob rau hauv lem loads lub React app pob).
  2. Tus neeg siv cuam tshuam nrog daim ntawv thov, qhov no ua rau hu rau lub vev xaib thov raws li Spring.
  3. Daim ntawv thov lub vev xaib xa mus rau qhov kev thov kom cais cov ntawv mus rau daim ntawv thov Python.
  4. Daim ntawv thov Python txheeb xyuas qhov kev xav ntawm cov ntawv nyeem thiab xa cov txiaj ntsig raws li cov lus teb rau qhov kev thov.
  5. Daim ntawv thov Caij nplooj ntoos hlav xa cov lus teb rau daim ntawv thov React (uas, dhau los, qhia qhov tshwm sim ntawm cov ntawv parsed rau tus neeg siv).

Cov cai rau txhua daim ntawv thov no tuaj yeem pom no. Kuv xav kom koj luam qhov chaw khaws cia rau koj tus kheej tam sim no, vim muaj ntau yam kev sim nrog nws ua ntej peb.

Khiav ib daim ntawv thov raws li microservices ntawm lub tshuab hauv zos

Txhawm rau kom daim ntawv thov ua haujlwm, peb yuav tsum pib tag nrho peb microservices. Cia peb pib nrog qhov zoo tshaj plaws ntawm lawv - daim ntawv thov pem hauv ntej.

▍ Teeb tsa React rau kev txhim kho hauv zos

Txhawm rau khiav React daim ntawv thov, koj yuav tsum nruab Node.js moj khaum thiab NPM ntawm koj lub computer. Tom qab koj nruab tag nrho cov no, mus siv lub davhlau ya nyob twg mus rau qhov project folder sa-frontend thiab khiav cov lus txib hauv qab no:

npm install

Los ntawm kev ua tiav cov lus txib no hauv daim nplaub tshev node_modules lub dependencies ntawm React daim ntawv thov yuav raug loaded, cov ntaub ntawv uas muaj nyob rau hauv cov ntaub ntawv package.json. Tom qab rub tawm cov kev vam meej hauv tib lub nplaub tshev, khiav cov lus txib hauv qab no:

npm start

Yog tag nrho. Tam sim no React app tab tom khiav thiab tuaj yeem nkag mus tau los ntawm kev mus rau qhov chaw nyob browser localhost:3000. Koj tuaj yeem hloov qee yam hauv nws tus lej. Koj yuav pom tam sim ntawd cov txiaj ntsig ntawm cov kev hloov pauv no hauv browser. Qhov no yog ua tau ua tsaug rau lub thiaj li hu ua "kub" hloov modules. Ua tsaug rau qhov no, kev txhim kho pem hauv ntej hloov mus rau qhov yooj yim thiab kev lom zem.

▍ Npaj React app rau kev tsim khoom

Rau lub hom phiaj ntawm kev siv React app, peb yuav tsum hloov nws mus rau hauv cov ntaub ntawv zoo li qub thiab ua haujlwm rau cov neeg siv khoom siv lub vev xaib.

Txhawm rau tsim lub React app, rov siv lub davhlau ya nyob twg, mus rau lub nplaub tshev sa-frontend thiab khiav cov lus txib hauv qab no:

npm run build

Qhov no yuav tsim ib daim ntawv teev npe hauv qhov project folder build. Nws yuav muaj tag nrho cov ntaub ntawv zoo li qub uas xav tau rau daim ntawv thov React ua haujlwm.

▍ Muab cov ntaub ntawv zoo li qub nrog Nginx

Ua ntej koj yuav tsum tau nruab thiab khiav Nginx web server. nws yog koj tuaj yeem rub tawm nws thiab nrhiav cov lus qhia rau kev txhim kho thiab khiav nws. Tom qab ntawd koj yuav tsum luam cov ntsiab lus ntawm cov ntawv tais ceev tseg sa-frontend/build rau nplaub tshev [your_nginx_installation_dir]/html.

Nrog rau txoj hauv kev no, cov ntaub ntawv tsim tawm thaum lub sij hawm sib dhos ntawm React daim ntawv thov index.html yuav muaj nyob rau ntawm [your_nginx_installation_dir]/html/index.html. Qhov no yog cov ntaub ntawv uas, los ntawm lub neej ntawd, Nginx server teeb meem thaum nkag mus rau nws. Lub server raug teeb tsa los mloog ntawm qhov chaw nres nkoj 80, tab sis koj tuaj yeem kho nws txoj kev koj xav tau los ntawm kev kho cov ntaub ntawv [your_nginx_installation_dir]/conf/nginx.conf.

Tam sim no qhib koj tus browser thiab mus rau localhost:80. Koj yuav pom nplooj ntawv React app.

Kubernetes Tutorial Part 1: Daim Ntawv Thov, Microservices, thiab Ntim
React app tau txais los ntawm Nginx server

Yog tias koj tam sim no nkag ib yam dab tsi hauv daim teb Type your sentence thiab nias lub pob Send - tsis muaj dab tsi yuav tshwm sim. Tab sis, yog tias koj saib ntawm lub console, koj tuaj yeem pom cov lus yuam kev nyob ntawd. Txhawm rau kom nkag siab qhov tseeb qhov twg cov kev ua yuam kev no tshwm sim, cia peb txheeb xyuas daim ntawv thov code.

▍ Kev tshuaj xyuas cov cai ntawm daim ntawv thov pem hauv ntej

Saib ntawm cov ntaub ntawv tus lej App.js, peb tuaj yeem pom tias nyem rau ntawm lub pob Send hu ib txoj kev analyzeSentence(). Txoj cai rau txoj kev no yog qhia hauv qab no. Nyob rau tib lub sijhawm, xyuam xim rau qhov tseeb tias rau txhua kab uas muaj cov lus pom ntawm daim ntawv # НомСр, muaj cov lus piav qhia hauv qab no cov cai. Nyob rau hauv tib txoj kev, peb yuav parse lwm code fragments.

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. Qhov URL uas tau thov rau POST. Qhov chaw nyob no suav tias yog daim ntawv thov tos rau cov kev thov no.

2.Lub cev thov xa mus rau daim ntawv thov. Ntawm no yog ib qho piv txwv thov lub cev:

{
    sentence: "I like yogobella!"
}

3.Thaum tau txais cov lus teb rau qhov kev thov, lub xeev ntawm cov khoom tau hloov kho. Qhov no ua rau cov khoom siv rov ua dua. Yog tias peb tau txais cov ntaub ntawv (uas yog, JSON cov khoom uas muaj cov ntaub ntawv nkag thiab suav cov ntawv sau), peb yuav tso tawm cov khoom siv. Polarityntev npaum li cov xwm txheej tau ua tiav. Ntawm no yog yuav ua li cas peb piav qhia txog lub ntsiab lus:

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

Cov cai zoo li ua haujlwm zoo heev. Dab tsi yog qhov tsis ncaj ncees lawm ntawm no? Yog tias koj xav tias ntawm qhov chaw nyob uas daim ntawv thov tab tom sim xa daim ntawv thov POST, tseem tsis tau muaj ib yam dab tsi uas tuaj yeem lees txais thiab ua tiav qhov kev thov no, ces koj yuav yog qhov tseeb. Namely, kom ua cov lus thov tuaj rau qhov chaw nyob http://localhost:8080/sentiment, peb yuav tsum tau khiav ib daim ntawv thov web raws caij nplooj ntoos hlav.

Kubernetes Tutorial Part 1: Daim Ntawv Thov, Microservices, thiab Ntim
Peb xav tau daim ntawv thov Caij nplooj ntoos hlav uas tuaj yeem lees txais POST thov

▍ Kev teeb tsa lub vev xaib raws li Spring

Txhawm rau xa daim ntawv thov caij nplooj ntoos hlav, koj xav tau JDK8 thiab Maven thiab teeb tsa ib puag ncig hloov pauv tau zoo. Tom qab koj nruab tag nrho cov no, koj tuaj yeem ua haujlwm txuas ntxiv ntawm peb qhov project.

▍ Ntim daim ntawv thov mus rau hauv ib lub thawv ntawv

Nkag mus, siv lub davhlau ya nyob twg, mus rau daim nplaub tshev sa-webapp thiab sau cov lus txib hauv qab no:

mvn install

Tom qab ua tiav cov lus txib no hauv daim nplaub tshev sa-webapp directory yuav raug tsim target. Qhov no yog qhov uas Java daim ntawv thov yuav nyob, ntim rau hauv ib lub thawv ntawv, sawv cev los ntawm cov ntaub ntawv sentiment-analysis-web-0.0.1-SNAPSHOT.jar.

▍ Launching Java Application

Mus rau ntawm daim nplaub tshev target thiab khiav daim ntawv thov nrog cov lus txib hauv qab no:

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

Ib qho yuam kev yuav tshwm sim thaum ua cov lus txib no. Txhawm rau pib kho nws, peb tuaj yeem txheeb xyuas cov ntsiab lus tshwj xeeb hauv pawg kab ke cov ntaub ntawv:

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

Rau peb, qhov tseem ceeb tshaj plaws ntawm no yog qhov hais txog qhov tsis tuaj yeem piav qhia lub ntsiab lus sa.logic.api.url. Cia peb txheeb xyuas qhov chaws qhov twg qhov yuam kev tshwm sim.

▍ Java application code tsom xam

Ntawm no yog qhov code snippet qhov twg qhov yuam kev tshwm sim.

@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. Hauv SentimentController muaj teb saLogicApiUrl. Nws tus nqi yog teem los ntawm cov cuab yeej sa.logic.api.url.
  2. Txoj hlua saLogicApiUrl concatenates nrog tus nqi /analyse/sentiment. Ua ke lawv tsim qhov chaw nyob rau kev hu mus rau microservice uas ua cov ntawv txheeb xyuas.

▍ Teem kom muaj nuj nqis

Nyob rau lub caij nplooj ntoos hlav, lub neej ntawd qhov chaw ntawm cov khoom muaj nqis yog cov ntaub ntawv application.properties, uas tuaj yeem nrhiav tau ntawm sa-webapp/src/main/resources. Tab sis siv nws tsis yog tib txoj hauv kev los teeb tsa cov khoom muaj nqis. Koj tuaj yeem ua qhov no nrog cov lus txib hauv qab no:

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

Tus nqi ntawm cov cuab yeej no yuav tsum taw tes rau qhov chaw nyob ntawm peb daim ntawv thov Python.

Los ntawm kev teeb tsa nws, peb qhia rau Spring web application qhov twg nws yuav tsum tau mus ua cov ntawv thov kev txheeb xyuas.

Txhawm rau kom tsis txhob cuam tshuam peb lub neej, peb yuav txiav txim siab tias daim ntawv thov Python yuav muaj nyob ntawm localhost:5000 thiab sim tsis txhob hnov ​​qab txog nws. Yog li ntawd, cov lus txib kom pib lub caij nplooj ntoos hlav daim ntawv thov yuav zoo li no:

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

Kubernetes Tutorial Part 1: Daim Ntawv Thov, Microservices, thiab Ntim
Peb qhov system ploj lawm daim ntawv thov Python

Tam sim no peb tsuas yog yuav tsum tau khiav daim ntawv thov Python thiab lub kaw lus yuav ua haujlwm raws li qhov xav tau.

▍ Teeb tsa ib daim ntawv thov Python

Txhawm rau khiav daim ntawv thov Python, koj yuav tsum muaj Python 3 thiab Pip ntsia, thiab koj yuav tsum muaj qhov tsim nyog qhov chaw hloov pauv tau teeb tsa kom raug.

▍ Txhim kho kev vam meej

Mus rau qhov project folder sa-logic/sa thiab khiav cov lus txib hauv qab no:

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

▍ App tso tawm

Nrog rau qhov kev vam khom, peb npaj txhij los khiav daim ntawv thov:

python sentiment_analysis.py

Tom qab ua tiav cov lus txib no, peb yuav tau hais rau hauv qab no:

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

Qhov no txhais tau hais tias daim ntawv thov tab tom khiav thiab tos kev thov ntawm localhost:5000/

▍ Kev tshawb fawb Code

Cia peb saib Python daim ntawv thov code kom nkag siab tias nws teb li cas rau kev thov:

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. Yam khoom pib Flask.
  2. Qhia qhov chaw nyob ua POST thov rau nws.
  3. Retrieving ib qho cuab yeej sentence los ntawm lub cev thov.
  4. Anonymous object initialization TextBlob thiab tau txais tus nqi polarity rau thawj lub tswv yim tau txais nyob rau hauv lub cev ntawm qhov kev thov (nyob rau hauv peb cov ntaub ntawv, qhov no tsuas yog lub tswv yim xa mus rau kev soj ntsuam).
  5. Rov qab cov lus teb, lub cev uas muaj cov ntawv nyeem ntawm qhov kev thov thiab qhov ntsuas tau suav rau nws polarity.
  6. Tua tawm daim ntawv thov Flask, uas yuav muaj nyob rau ntawm 0.0.0.0:5000 (koj tuaj yeem nkag mus rau nws los ntawm kev tsim kho ntawm daim ntawv localhost:5000).

Tam sim no cov microservices uas ua rau daim ntawv thov tau ua haujlwm. Lawv raug teem kom muaj kev sib raug zoo nrog ib leeg. Ntawm no yog daim duab daim ntawv thov zoo li nyob rau theem ntawm kev ua haujlwm no.

Kubernetes Tutorial Part 1: Daim Ntawv Thov, Microservices, thiab Ntim
Txhua microservices uas tsim daim ntawv thov raug coj mus rau lub xeev noj qab haus huv

Tam sim no, ua ntej peb txuas ntxiv, qhib React app hauv browser thiab sim ntsuas qee kab lus nrog nws. Yog tias txhua yam ua tiav kom raug - tom qab nias lub pob Send koj yuav pom cov txiaj ntsig kev txheeb xyuas hauv qab lub thawv ntawv.

Hauv ntu tom ntej, peb yuav tham txog yuav ua li cas khiav peb cov microservices hauv Docker ntim. Qhov no yog qhov tsim nyog txhawm rau npaj daim ntawv thov kom khiav hauv Kubernetes pawg.

Docker ntim

Kubernetes yog ib qho system rau automating kev xa tawm, scaling thiab tswj cov ntawv ntim khoom. Nws tseem hu ua "container orchestrator". Yog tias Kubernetes ua haujlwm nrog cov thawv ntim khoom, tom qab ntawd ua ntej siv cov txheej txheem no, peb yuav tsum xub tau txais cov thawv no. Tab sis ua ntej, cia peb tham txog dab tsi ntim khoom. Tej zaum qhov zoo tshaj plaws teb rau lo lus nug ntawm dab tsi nws yog nyob rau hauv cov ntaub ntawv rau Docker:

Ib lub thawv duab yog lub teeb yuag, muaj tus kheej, ua tiav pob uas muaj cov ntawv thov, uas suav nrog txhua yam tsim nyog los khiav nws: daim ntawv thov code, lub sijhawm ua haujlwm, cov cuab yeej siv thiab cov tsev qiv ntawv, chaw. Cov kev pabcuam ntim tau tuaj yeem siv rau hauv ob qho tib si Linux thiab Windows ib puag ncig thiab yuav ua haujlwm ib yam tsis hais txog kev tsim kho vaj tse.

Qhov no txhais tau hais tias cov thawv tuaj yeem khiav ntawm txhua lub khoos phis tawj, suav nrog cov servers ntau lawm, thiab hauv ib puag ncig, cov ntawv thov uas muaj nyob hauv lawv yuav ua haujlwm tib yam.

Txhawm rau tshawb xyuas cov yam ntxwv ntawm cov ntim khoom thiab muab piv rau lwm txoj hauv kev los khiav cov ntawv thov, cia peb saib cov piv txwv ntawm kev pabcuam React daim ntawv thov siv lub tshuab virtual thiab lub thawv.

▍ Muab cov ntaub ntawv zoo li qub ntawm daim ntawv thov React siv lub tshuab virtual

Sim npaj cov kev saib xyuas cov ntaub ntawv zoo li qub siv cov tshuab virtual, peb yuav ntsib cov teeb meem hauv qab no:

  1. Kev siv tsis zoo ntawm cov peev txheej, txij li txhua lub tshuab virtual yog kev ua haujlwm tiav.
  2. Platform dependency. Dab tsi ua haujlwm ntawm qee lub khoos phis tawj hauv zos yuav tsis ua haujlwm ntawm cov khoom siv ntau lawm.
  3. Slow thiab muaj peev xwm intensive scaling ntawm ib tug virtual tshuab tov.

Kubernetes Tutorial Part 1: Daim Ntawv Thov, Microservices, thiab Ntim
Nginx web server pabcuam cov ntaub ntawv zoo li qub uas khiav hauv lub tshuab virtual

Yog tias cov thawv ntim tau siv los daws qhov teeb meem zoo sib xws, tom qab ntawd, piv nrog cov tshuab virtual, cov hauv qab no tuaj yeem raug sau tseg:

  1. Kev siv cov peev txheej zoo: ua haujlwm nrog kev ua haujlwm siv Docker.
  2. Platform kev ywj pheej. Ib lub thawv uas tus tsim tawm tuaj yeem khiav ntawm lawv tus kheej lub computer yuav khiav txhua qhov chaw.
  3. Kev xa tawm yooj yim los ntawm kev siv cov duab txheej.

Kubernetes Tutorial Part 1: Daim Ntawv Thov, Microservices, thiab Ntim
Nginx lub vev xaib server pabcuam cov ntaub ntawv zoo li qub khiav hauv lub thawv

Peb tsuas yog muab piv cov tshuab virtual thiab ntim rau ntawm ob peb lub ntsiab lus, tab sis txawm tias txaus kom tau txais kev xav rau lub zog ntawm cov ntim khoom. nws yog Koj tuaj yeem pom cov ntsiab lus ntawm Docker ntim.

▍ Tsim lub thawv duab rau React app

Lub hauv paus tsev thaiv ntawm Docker thawv yog cov ntaub ntawv Dockerfile. Thaum pib ntawm cov ntaub ntawv no, lub hauv paus duab ntawm lub thawv raug kaw, tom qab ntawd cov lus qhia ib ntus suav nrog qhia txog yuav ua li cas los tsim lub thawv uas yuav ua tau raws li qhov xav tau ntawm daim ntawv thov.

Ua ntej peb pib ua haujlwm nrog cov ntaub ntawv Dockerfile, nco ntsoov tias peb tau ua dab tsi los npaj cov ntaub ntawv ntawm React daim ntawv thov rau upload rau Nginx server:

  1. Tsim ib pob React app (npm run build).
  2. Pib Nginx server.
  3. Luam cov ntsiab lus ntawm phau ntawv teev npe build los ntawm qhov project folder sa-frontend mus rau lub server folder nginx/html.

Hauv qab no koj tuaj yeem pom qhov sib piv ntawm kev tsim lub thawv thiab cov haujlwm saum toj no tau ua hauv lub computer hauv zos.

▍ Npaj Dockerfile rau daim ntawv thov SA-Frontend

Cov lus qhia kom suav nrog Dockerfile rau daim ntawv thov SA-Frontend, muaj tsuas yog ob lo lus txib. Qhov tseeb yog tias pab pawg txhim kho Nginx tau npaj qhov pib duab rau Nginx, uas peb yuav siv los tsim peb cov duab. Nov yog ob kauj ruam peb yuav tsum piav qhia:

  1. Koj yuav tsum ua tus duab Nginx lub hauv paus ntawm daim duab.
  2. Folder cov ntsiab lus sa-frontend/build yuav tsum tau luam rau daim duab folder nginx/html.

Yog tias peb mus ntawm qhov kev piav qhia no mus rau cov ntaub ntawv Dockerfile, ces nws yuav zoo li no:

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

Raws li koj tuaj yeem pom, txhua yam ntawm no yog qhov yooj yim heev, thaum cov ntsiab lus ntawm cov ntaub ntawv txawm tig los ua tau zoo nyeem thiab nkag siab. Cov ntaub ntawv no qhia lub kaw lus kom nqa cov duab nginx nrog txhua yam uas nws twb muaj, thiab luam cov ntsiab lus ntawm phau ntawv teev npe build mus rau daim ntawv teev npe nginx/html.

Ntawm no koj tuaj yeem muaj lus nug txog yuav ua li cas kuv paub qhov twg kom luam cov ntaub ntawv los ntawm cov ntawv tais ceev tseg build, i.e. txoj kev los qhov twg los /usr/share/nginx/html. Qhov tseeb, tsis muaj dab tsi nyuab ntawm no thiab. Qhov tseeb yog tias cov ntaub ntawv cuam tshuam tuaj yeem pom hauv piav qhia duab.

▍ Sib sau cov duab thiab muab tso rau hauv qhov chaw cia khoom

Ua ntej peb tuaj yeem ua haujlwm nrog cov duab tiav, peb yuav tsum xa nws mus rau qhov chaw khaws duab. Txhawm rau ua qhov no, peb yuav siv huab dawb-raws li duab hosting platform Docker Hub. Hauv kev ua haujlwm no, koj yuav tsum ua cov hauv qab no:

  1. Nruab docker.
  2. Sau npe rau ntawm Docker Hub site.
  3. Nkag mus rau hauv koj tus account los ntawm kev khiav cov lus txib hauv qab no hauv lub davhlau ya nyob twg:
    docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"

Tam sim no koj xav tau, siv lub davhlau ya nyob twg, mus rau cov npe sa-frontend thiab khiav cov lus txib nram qab no rau ntawd:

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

Ntawm no thiab hauv qab no hauv cov lus txib zoo sib xws $DOCKER_USER_ID yuav tsum tau hloov nrog koj tus username ntawm Docker Hub. Piv txwv li, ib feem ntawm cov lus txib no yuav zoo li no: rinormaloku/sentiment-analysis-frontend.

Hauv qhov no, cov lus txib no tuaj yeem ua luv luv los ntawm kev tshem tawm ntawm nws -f Dockerfile, txij li lub nplaub tshev uas peb ua cov lus txib no twb muaj cov ntaub ntawv no.

Txhawm rau xa cov duab tiav mus rau qhov chaw cia khoom, peb xav tau cov lus txib hauv qab no:

docker push $DOCKER_USER_ID/sentiment-analysis-frontend

Tom qab ua tiav nws, xyuas koj cov npe ntawm cov chaw khaws cia ntawm Docker Hub kom pom tias cov duab tau raug thawb mus rau huab cia.

▍ Pib lub thawv

Tam sim no leej twg tuaj yeem rub tawm thiab khiav cov duab hu ua $DOCKER_USER_ID/sentiment-analysis-frontend. Txhawm rau ua qhov no, koj yuav tsum khiav cov lus txib hauv qab no:

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

Tam sim no lub thawv tau khiav, thiab peb tuaj yeem ua haujlwm txuas ntxiv los ntawm kev tsim lwm cov duab peb xav tau. Tab sis ua ntej peb mus ntxiv, cia peb nkag siab txog tus qauv tsim 80:80, uas pom nyob rau hauv cov lus txib kom khiav cov duab thiab tej zaum yuav zoo li tsis meej pem.

  • Thawj tus lej 80 yog tus naj npawb chaw nres nkoj ntawm tus tswv tsev (uas yog, lub computer hauv zos).
  • Tus lej thib ob 80 yog qhov chaw nres nkoj ntawm lub thawv uas qhov kev thov yuav tsum raug xa rov qab.

Xav txog cov lus piv txwv hauv qab no.

Kubernetes Tutorial Part 1: Daim Ntawv Thov, Microservices, thiab Ntim
Port Forwarding

Lub kaw lus xa mus thov los ntawm qhov chaw nres nkoj <hostPort> mus rau qhov chaw nres nkoj <containerPort>. Ntawd yog, nkag mus rau qhov chaw nres nkoj 80 lub computer raug xa mus rau qhov chaw nres nkoj 80 thawv.

Txij li qhov chaw nres nkoj 80 qhib rau hauv lub computer hauv zos, koj tuaj yeem nkag mus rau daim ntawv thov los ntawm lub khoos phis tawj no ntawm localhost:80. Yog tias koj lub kaw lus tsis txhawb Docker, koj tuaj yeem khiav daim ntawv thov ntawm Docker virtual tshuab, qhov chaw nyob yuav zoo li <docker-machine ip>:80. Txhawm rau nrhiav qhov chaw nyob IP ntawm Docker virtual tshuab, koj tuaj yeem siv cov lus txib docker-machine ip.

Txij ntawm no mus, thaum lub thawv app pem hauv ntej tau ua tiav tiav, koj yuav tsum tuaj yeem qhib nws nplooj ntawv hauv browser.

▍.dockerignore cov ntaub ntawv

Tsim daim duab thov SA-Frontend, peb tuaj yeem pom tias cov txheej txheem no qeeb heev. Qhov no yog vim cov duab tsim cov ntsiab lus yuav tsum raug xa mus rau Docker daemon. Cov npe uas sawv cev rau cov ntsiab lus tsim yog muab los ua qhov kev sib cav zaum kawg rau cov lus txib docker build. Nyob rau hauv peb rooj plaub, muaj ib tug dot nyob rau hauv lub kawg ntawm cov lus txib no. Qhov no ua rau cov qauv hauv qab no suav nrog hauv cov ntsiab lus sib dhos:

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

Tab sis ntawm tag nrho cov folders tam sim no, peb tsuas xav tau ib daim nplaub tshev build. Downloading lwm yam yog nkim sij hawm. Koj tuaj yeem txhim kho qhov tsim los ntawm kev qhia Docker uas cov npe yuav tsis quav ntsej. Txhawm rau ua qhov no, peb xav tau ib daim ntawv .dockerignore. Koj, yog koj paub cov ntaub ntawv .gitignore, cov qauv ntawm cov ntaub ntawv no tej zaum yuav zoo li paub. Nws teev cov npe uas cov duab tsim system tuaj yeem tsis quav ntsej. Hauv peb cov ntaub ntawv, cov ntsiab lus ntawm cov ntaub ntawv no zoo li no:

node_modules
src
public

cov ntaub ntawv .dockerignore yuav tsum nyob rau hauv tib lub nplaub tshev raws li cov ntaub ntawv Dockerfile. Tam sim no lub rooj sib txoos ntawm daim duab yuav siv li ob peb feeb.

Cia peb tam sim no nrog cov duab rau ib daim ntawv thov Java.

▍ Tsim lub thawv duab rau daim ntawv thov Java

Koj paub dab tsi, thiab koj twb kawm txhua yam koj xav tau los tsim cov duab thawv. Yog vim li cas ntu no yuav luv heev.

Qhib cov ntawv Dockerfile, uas yog nyob rau hauv qhov project folder sa-webapp. Yog tias koj nyeem cov ntawv ntawm cov ntaub ntawv no, tom qab ntawd hauv nws koj yuav ntsib tsuas yog ob qho kev tsim kho tshiab uas pib nrog cov ntsiab lus ENV ΠΈ EXPOSE:

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

Lo lus tseem ceeb ENV tso cai rau koj tshaj tawm qhov hloov pauv ib puag ncig hauv Docker ntim. Tshwj xeeb, hauv peb rooj plaub, nws tso cai rau koj los teeb tsa URL kom nkag mus rau API ntawm daim ntawv thov uas ua cov ntawv txheeb xyuas.

Lo lus tseem ceeb EXPOSE tso cai rau koj qhia Docker qhib qhov chaw nres nkoj. Peb yuav siv qhov chaw nres nkoj no thaum ua haujlwm nrog daim ntawv thov. Ntawm no koj tuaj yeem pom qhov ntawd hauv Dockerfile rau daim ntawv thov SA-Frontend tsis muaj ib lo lus txib. Qhov no tsuas yog siv rau cov ntaub ntawv nkaus xwb, hauv lwm lo lus, qhov kev tsim no yog rau cov neeg nyeem Dockerfile.

Tsim cov duab thiab thawb nws mus rau qhov chaw cia khoom zoo li qhov piv txwv yav dhau los. Yog tias koj tseem tsis tau muaj kev ntseeg siab hauv koj lub peev xwm, cov lus txib sib raug tuaj yeem pom hauv cov ntaub ntawv README.md hauv nplaub tshev sa-webapp.

▍ Tsim lub thawv duab rau daim ntawv thov Python

Yog tias koj saib cov ntsiab lus ntawm cov ntaub ntawv Dockerfile hauv nplaub tshev sa-logickoj yuav tsis pom dab tsi tshiab nyob ntawd. Cov lus txib rau kev tsim cov duab thiab thawb nws mus rau qhov chaw cia khoom yuav tsum tau paub rau koj, tab sis, zoo li peb lwm cov ntawv thov, lawv tuaj yeem pom hauv cov ntaub ntawv. README.md hauv nplaub tshev sa-logic.

▍ Kuaj cov ntawv thov ntim khoom

Koj puas ntseeg tej yam uas koj tsis tau sim? Kuv ua tsis tau thiab. Cia peb sim peb lub thawv.

  1. Cia peb pib lub thawv ntawv thov sa-logic thiab teeb tsa nws kom mloog ntawm qhov chaw nres nkoj 5050:
    docker run -d -p 5050:5000 $DOCKER_USER_ID/sentiment-analysis-logic
  2. Cia peb pib lub thawv ntawv thov sa-webapp thiab teeb tsa nws kom mloog ntawm qhov chaw nres nkoj 8080. Tsis tas li ntawd, peb yuav tsum tau teeb tsa qhov chaw nres nkoj uas daim ntawv thov Python yuav mloog rau kev thov los ntawm Java daim ntawv thov los ntawm kev rov muab cov kev hloov pauv ib puag ncig 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

Txhawm rau kawm paub yuav ua li cas thiaj nrhiav tau tus IP chaw nyob ntawm lub thawv lossis Docker VM, xa mus rau cov ntaub ntawv NYEEM.

Cia peb pib lub thawv ntawv thov sa-frontend:

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

Tam sim no txhua yam yog npaj txhij mus rau hauv qhov browser mus rau qhov chaw nyob localhost:80 thiab sim lub app.

Thov nco ntsoov tias yog koj hloov chaw nres nkoj rau sa-webapp, lossis yog tias koj tab tom khiav Docker VM, koj yuav tau hloov cov ntaub ntawv App.js los ntawm ib daim ntawv tais ceev tseg sa-frontendlos ntawm kev hloov tus IP chaw nyob lossis tus lej chaw nres nkoj hauv txoj kev analyzeSentence()los ntawm kev hloov cov ntaub ntawv tam sim no es tsis txhob cov ntaub ntawv siv tsis tau. Tom qab ntawd, koj yuav tsum rov ua cov duab thiab siv nws.

Nov yog qhov peb daim ntawv thov daim duab zoo li tam sim no.

Kubernetes Tutorial Part 1: Daim Ntawv Thov, Microservices, thiab Ntim
Microservices khiav hauv ntim

Summary: Vim li cas peb thiaj xav tau Kubernetes pawg?

Peb nyuam qhuav tshuaj xyuas cov ntaub ntawv Dockerfile, tham txog yuav ua li cas tsim cov duab thiab thawb lawv mus rau Docker repository. Tsis tas li ntawd, peb tau kawm yuav ua li cas kom ceev lub rooj sib txoos ntawm cov duab siv cov ntaub ntawv .dockerignore. Yog li ntawd, peb cov microservices tam sim no tau khiav hauv Docker ntim. Ntawm no koj tuaj yeem muaj cov lus nug tseeb txog vim li cas peb xav tau Kubernetes. Cov lus teb rau lo lus nug no yuav mob siab rau qhov thib ob ntawm cov khoom siv no. Lub sijhawm no, xav txog cov lus nug hauv qab no:
Cia peb xav tias peb cov ntawv txheeb xyuas lub vev xaib tau dhau los ua neeg nyiam thoob ntiaj teb. Ntau lab qhov kev thov tuaj rau nws txhua feeb. Qhov no txhais tau tias microservices sa-webapp ΠΈ sa-logic yuav raug kev nyuaj siab loj. Yuav ua li cas ntsuas cov thawv uas khiav microservices?

Kubernetes Tutorial Part 1: Daim Ntawv Thov, Microservices, thiab Ntim

Tau qhov twg los: www.hab.com

Ntxiv ib saib