Kubernetes Tutorial Pati 1: Aplikasyon, Microservices, ak Containers

Sou demann nou an, Habr te kreye yon sant Kubernetes e nou kontan mete premye piblikasyon an ladan l. Abònman!

Kubernetes fasil. Poukisa bank yo peye m anpil lajan pou travay nan zòn sa a, pandan ke nenpòt moun ka metrize teknoloji sa a nan jis kèk èdtan?

Kubernetes Tutorial Pati 1: Aplikasyon, Microservices, ak Containers

Si ou gen dout ke Kubernetes ka aprann byen vit, mwen sijere ou eseye li tèt ou. Savwa, lè w fin metrize materyèl sa a, ou pral kapab kouri yon aplikasyon ki baze sou mikwosèvis nan yon gwoup Kubernetes. Mwen ka garanti sa a, paske se jisteman menm metodoloji yo itilize isit la ke mwen anseye kliyan nou yo travay ak Kubernetes. Ki sa ki fè gid sa a diferan de lòt moun? An reyalite, gen anpil bagay. Se konsa, pi fò nan materyèl sa yo kòmanse ak yon eksplikasyon sou bagay ki senp - konsèp Kubernetes ak karakteristik yo nan lòd kubectl la. Otè materyèl sa yo sipoze ke lektè yo abitye ak devlopman aplikasyon, mikwosèvis, ak resipyan Docker. Nou pral ale nan lòt fason. Premyèman, ann pale sou ki jan yo kouri yon aplikasyon ki baze sou mikwosèvis sou yon òdinatè. Lè sa a, nou pral gade nan bati imaj veso pou chak mikwosèvis. Apre sa, nou pral fè konesans ak Kubernetes epi gade nan deplwaye yon aplikasyon ki baze sou mikwosèvis nan yon gwoup ki jere pa Kubernetes.

Apwòch sa a, ak yon apwòch gradyèl nan Kubernetes, pral bay pwofondè konpreyansyon yo genyen sou sa k ap pase ki nesesè pou moun an mwayèn yo nan lòd yo konprann ki jan tou senpleman tout bagay ap travay nan Kubernetes. Kubernetes se sètènman yon teknoloji senp, bay moun ki vle aprann li konnen ki kote ak ki jan yo itilize li.

Kounye a, san plis, ann kòmanse epi pale sou aplikasyon nou pral travay avèk li.

Aplikasyon eksperimantal

Aplikasyon nou an pral fè yon sèl fonksyon. Li pran yon fraz kòm opinyon, apre sa, lè l sèvi avèk zouti analiz tèks, li fè analiz santiman fraz sa a, pou jwenn yon evalyasyon sou atitid emosyonèl otè fraz la nan yon sèten objè.

Sa a se sa fenèt prensipal aplikasyon sa a sanble.

Kubernetes Tutorial Pati 1: Aplikasyon, Microservices, ak Containers
Aplikasyon entènèt pou analiz santiman tèks yo

Soti nan yon pwen de vi teknik, aplikasyon an konsiste de twa mikwosèvis, yo chak rezoud yon seri travay espesifik:

  • SA-Frontend se yon sèvè entènèt Nginx ki sèvi fichye estatik React.
  • SA-WebApp se yon aplikasyon entènèt ki ekri an Java ki trete demann ki soti nan frontend la.
  • SA-Logic se yon aplikasyon Python ki fè analiz santiman sou tèks.

Li enpòtan sonje ke mikwosèvis pa egziste nan izolasyon. Yo aplike lide "separasyon responsablite", men an menm tan yo bezwen kominike youn ak lòt.

Kubernetes Tutorial Pati 1: Aplikasyon, Microservices, ak Containers
Done ap koule nan aplikasyon an

Nan dyagram ki anwo a, ou ka wè etap yo nimewote nan sistèm nan, ilistre koule yo done nan aplikasyon an. Ann gade yo:

  1. Navigatè a mande yon fichye nan sèvè a index.html (ki, nan vire, telechaje pake aplikasyon React la).
  2. Itilizatè a kominike avèk aplikasyon an, sa lakòz yon apèl nan aplikasyon wèb la ki baze sou Spring.
  3. Aplikasyon entènèt la voye demann lan pou fè analiz tèks bay aplikasyon Python.
  4. Aplikasyon Python fè analiz santiman tèks la epi retounen rezilta a kòm yon repons a demann lan.
  5. Aplikasyon Spring voye yon repons nan aplikasyon React (ki, nan vire, montre rezilta analiz tèks la bay itilizatè a).

Ou ka jwenn kòd pou tout aplikasyon sa yo isit la. Mwen rekòmande pou ou kopye depo sa a pou tèt ou kounye a, paske gen anpil eksperyans enteresan ak li devan nou.

Kouri yon aplikasyon ki baze sou mikwosèvis sou machin lokal ou a

Pou aplikasyon an fonksyone, nou bezwen kòmanse tout twa mikwosèvis yo. Ann kòmanse ak pi bèl nan yo tout - aplikasyon an front-end.

▍Fikse React pou devlopman lokal

Pou w ka kouri yon aplikasyon React, ou bezwen enstale platfòm Node.js ak NPM sou òdinatè w lan. Yon fwa ou gen tout bagay sa yo enstale, sèvi ak tèminal la pou navige nan katab pwojè ou a sa-frontend epi kouri lòd sa a:

npm install

Lè w kouri lòd sa a nan katab la node_modules depandans aplikasyon React yo pral chaje, dosye ki nan dosye a package.json. Yon fwa ke depandans yo telechaje nan menm katab la, kouri lòd sa a:

npm start

Se tout. Koulye a, aplikasyon React la ap kouri, ou ka jwenn aksè nan li lè w ale nan adrès sa a nan navigatè ou a: localhost:3000. Ou ka chanje yon bagay nan kòd li a. Ou pral imedyatman wè efè chanjman sa yo nan navigatè a. Sa a se posib gras a sa yo rele ranplasman "cho" nan modil yo. Sa fè devlopman front-end yon eksperyans senp epi agreyab.

▍Prepare yon aplikasyon React pou pwodiksyon an

Nan bi pou yo sèvi ak yon aplikasyon React, nou bezwen konvèti li nan yon seri fichye estatik epi sèvi yo bay kliyan lè l sèvi avèk yon sèvè entènèt.

Pou konstwi aplikasyon React, ankò lè l sèvi avèk tèminal la, navige nan katab la sa-frontend epi kouri lòd sa a:

npm run build

Sa a pral kreye yon anyè nan katab pwojè a build. Li pral genyen tout fichye estatik ki nesesè pou aplikasyon React la travay.

▍ Sèvi fichye estatik lè l sèvi avèk Nginx

Premye ou bezwen enstale epi kouri sèvè wèb Nginx la. Isit la ou ka telechaje li epi jwenn enstriksyon sou kòman yo enstale ak kouri li. Lè sa a, ou bezwen kopye sa ki nan katab la sa-frontend/build nan katab [your_nginx_installation_dir]/html.

Avèk apwòch sa a, dosye a te pwodwi pandan pwosesis konstriksyon aplikasyon React la index.html ap disponib nan [your_nginx_installation_dir]/html/index.html. Sa a se dosye a ke, pa default, sèvè a Nginx pwodui lè gen aksè a li. Se sèvè a configuré pou koute sou pò a 80, men li ka Customized fason ou bezwen an pa koreksyon dosye a [your_nginx_installation_dir]/conf/nginx.conf.

Koulye a, louvri navigatè ou a epi ale nan localhost:80. Ou pral wè paj aplikasyon React la.

Kubernetes Tutorial Pati 1: Aplikasyon, Microservices, ak Containers
Reyaksyon aplikasyon ki sèvi pa sèvè Nginx

Si ou kounye a antre yon bagay nan jaden an Type your sentence epi peze bouton an Send - pa gen anyen ki pral rive. Men, si ou gade nan konsole a, ou ka wè mesaj erè la. Pou nou konprann ki kote egzakteman erè sa yo rive, se pou nou analize kòd aplikasyon an.

▍Analiz kòd aplikasyon Front-end

Pran yon gade nan kòd dosye a App.js, nou ka wè ke peze bouton an Send rele yon metòd analyzeSentence(). Kòd pou metòd sa a bay anba a. Tanpri sonje ke pou chak liy ki gen yon kòmantè nan fòm lan # Номер, gen yon eksplikasyon yo bay anba kòd la. Nou pral analize lòt fragman kòd nan menm fason an.

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 kote demann POST la fèt. Yo sipoze gen yon aplikasyon nan adrès sa a ki espere demann sa yo.

2.Kò demann lan voye nan aplikasyon an. Isit la se yon egzanp kò demann:

{
    sentence: "I like yogobella!"
}

3.Lè yo resevwa yon repons a yon demann, eta a nan eleman yo mete ajou. Sa lakòz eleman an dwe re-rann. Si nou resevwa done (ki vle di, yon objè JSON ki gen done antre ak nòt tèks kalkile a), nou pral pwodiksyon eleman an. Polarity, depi kondisyon ki apwopriye yo pral satisfè. Men ki jan nou dekri eleman an:

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

Kòd la parèt byen travay. Ki sa ki mal nan sa a, de tout fason? Si ou sipoze ke nan adrès kote aplikasyon an ap eseye voye yon demann POST, pa gen anyen ankò ki ka aksepte ak trete demann sa a, Lè sa a, ou pral absoliman dwa. Savwa, pou trete demann ou resevwa nan http://localhost:8080/sentiment, nou bezwen kouri yon aplikasyon entènèt ki baze sou Spring.

Kubernetes Tutorial Pati 1: Aplikasyon, Microservices, ak Containers
Nou bezwen yon aplikasyon Spring ki ka aksepte yon demann POST

▍Fikse yon aplikasyon entènèt ki baze sou Spring

Yo nan lòd yo deplwaye yon aplikasyon Spring, w ap bezwen JDK8 ak Maven ak byen konfigirasyon varyab anviwònman. Yon fwa ou gen tout bagay sa yo enstale, ou ka kontinye travay sou pwojè nou an.

▍Anbalaj yon aplikasyon nan yon dosye bokal

Navige, lè l sèvi avèk yon tèminal, nan katab la sa-webapp epi antre lòd sa a:

mvn install

Apre kouri lòd sa a nan katab la sa-webapp yo pral kreye yon anyè target. Sa a se kote aplikasyon Java a pral lokalize, pake nan yon fichye bokal, ki reprezante pa dosye a sentiment-analysis-web-0.0.1-SNAPSHOT.jar.

▍Kouri yon aplikasyon Java

Ale nan katab target epi kouri aplikasyon an ak lòd sa a:

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

Yon erè ap fèt pandan w ap egzekite lòd sa a. Pou kòmanse repare li, nou ka analize detay eksepsyon yo nan done trase pil yo:

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

Pou nou, bagay ki pi enpòtan isit la se mansyone nan enposib pou klarifye siyifikasyon an sa.logic.api.url. Ann analize kòd kote erè a rive.

▍Analiz kòd aplikasyon Java

Isit la se fragment kòd kote erè a rive.

@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. Nan SentimentController gen yon jaden saLogicApiUrl. Se valè li yo espesifye pa pwopriyete a sa.logic.api.url.
  2. Fisèl saLogicApiUrl konkatene ak valè a /analyse/sentiment. Ansanm yo fòme adrès la pou fè yon apèl nan mikwosèvis ki fè analiz tèks.

▍Fikse yon valè pwopriyete

Nan sezon prentan, sous estanda valè pwopriyete a se yon dosye application.properties, ki ka jwenn nan sa-webapp/src/main/resources. Men, itilizasyon li se pa sèl fason pou mete valè pwopriyete yo. Sa a ka fè tou lè l sèvi avèk lòd sa a:

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

Valè pwopriyete sa a ta dwe montre adrès aplikasyon Python nou an.

Lè nou konfigirasyon li, nou di aplikasyon entènèt Spring ki kote li bezwen ale pou fè demann analiz tèks.

Pou nou pa konplike lavi nou, nou pral deside ke aplikasyon an Python ap disponib nan localhost:5000 epi ann eseye pa bliye sou li. Kòm yon rezilta, lòd pou lanse aplikasyon Prentan an pral sanble sa a:

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

Kubernetes Tutorial Pati 1: Aplikasyon, Microservices, ak Containers
Sistèm nou an manke yon aplikasyon Python

Koulye a, tout sa nou dwe fè se kouri aplikasyon an Python ak sistèm nan ap travay jan yo espere.

▍ Mete kanpe yon aplikasyon Python

Pou kouri yon aplikasyon Python, ou dwe gen Python 3 ak Pip enstale, epi varyab anviwònman ki apwopriye yo dwe mete kòrèkteman.

▍Enstale depandans

Ale nan katab pwojè ou a sa-logic/sa epi kouri kòmandman sa yo:

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

▍Lanse aplikasyon an

Apre enstale depandans yo, nou pare pou kouri aplikasyon an:

python sentiment_analysis.py

Apre yo fin kouri lòd sa a nou pral di sa ki annapre yo:

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

Sa vle di ke aplikasyon an ap kouri epi li ap tann pou demann nan localhost:5000/

▍Rechèch Kòd

Ann gade kòd aplikasyon Python pou konprann kijan li reponn a demann yo:

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. Inisyalize yon objè Flask.
  2. Espesifye yon adrès pou fè demann POST ba li.
  3. Rekipere yon pwopriyete sentence soti nan kò demann lan.
  4. Inisyalize yon objè anonim TextBlob ak jwenn valè a polarity pou premye fraz ki resevwa nan kò demann lan (nan ka nou an, sa a se sèl fraz voye pou analiz).
  5. Retounen yon repons ki gen kò ki gen tèks fraz la ak endikatè kalkile pou li polarity.
  6. Lanse yon aplikasyon Flask, ki pral disponib nan 0.0.0.0:5000 (ou ka jwenn aksè nan li tou lè l sèvi avèk yon konstriksyon fòm nan localhost:5000).

Mikwosèvis ki fòme aplikasyon an ap kouri kounye a. Yo branche pou kominike youn ak lòt. Sa a se sa dyagram aplikasyon an sanble nan etap sa a nan travay.

Kubernetes Tutorial Pati 1: Aplikasyon, Microservices, ak Containers
Tout mikwo-sèvis ki fòme aplikasyon an vin anfòm

Koulye a, anvan ou kontinye, louvri aplikasyon React ou a nan yon navigatè epi eseye analize kèk fraz ak li. Si tout bagay fèt kòrèkteman - apre w fin peze bouton an Send ou pral wè rezilta analiz yo anba jaden tèks la.

Nan pwochen seksyon an, nou pral pale sou ki jan yo kouri mikwosèvis nou yo nan resipyan Docker. Sa a se nesesè yo nan lòd yo prepare aplikasyon an kouri sou yon gwoup Kubernetes.

Docker kontenè

Kubernetes se yon sistèm pou otomatize deplwaman, echèl ak jesyon aplikasyon pou kontenè. Yo rele li tou yon "orchestrator veso". Si Kubernetes travay ak resipyan, Lè sa a, anvan ou sèvi ak sistèm sa a nou dwe premye jwenn resipyan sa yo. Men, anvan, ann pale sou ki resipyan yo ye. Petèt pi bon repons lan nan kesyon an sou sa li ye ka jwenn nan dokiman pou Docker:

Yon imaj veso se yon pake ki lejè, endepandan, ègzèkutabl ki gen yon aplikasyon, ki gen ladan tout bagay ki nesesè pou kouri li: kòd aplikasyon, anviwònman ekzekisyon, zouti sistèm ak bibliyotèk, paramèt. Pwogram kontenè yo ka itilize nan anviwònman Linux ak Windows, epi yo ap toujou travay menm jan kèlkeswa enfrastrikti a.

Sa vle di ke kontenè yo ka kouri sou nenpòt òdinatè, ki gen ladan sèvè pwodiksyon, ak aplikasyon ki genyen nan yo ap travay menm jan an nan nenpòt anviwònman.

Pou eksplore karakteristik resipyan yo epi konpare yo ak lòt fason pou kouri aplikasyon yo, ann gade yon egzanp pou sèvi yon aplikasyon React lè l sèvi avèk yon machin vityèl ak yon veso.

▍Sèvi fichye estatik nan yon aplikasyon React lè l sèvi avèk yon machin vityèl

Eseye òganize sèvis la nan fichye estatik lè l sèvi avèk machin vityèl, nou pral rankontre dezavantaj sa yo:

  1. Itilizasyon resous ki pa efikas, paske chak machin vityèl se yon sistèm operasyon plen véritable.
  2. Depandans platfòm. Sa ki travay sou yon òdinatè lokal pa ka travay sou yon sèvè pwodiksyon.
  3. Echèl ralanti ak resous entansif nan yon solisyon vityèl ki baze sou machin.

Kubernetes Tutorial Pati 1: Aplikasyon, Microservices, ak Containers
Sèvè entènèt Nginx k ap sèvi fichye estatik ki kouri sou yon machin vityèl

Si yo itilize resipyan pou rezoud yon pwoblèm menm jan an, lè sa a, an konparezon ak machin vityèl, ou ka remake fòs sa yo:

  1. Itilizasyon efikas nan resous: travay ak sistèm operasyon an lè l sèvi avèk Docker.
  2. Platfòm endepandan. Yon veso ke yon pwomotè ka kouri sou òdinatè l 'ap travay nenpòt kote.
  3. Deplwaman ki lejè atravè itilizasyon kouch imaj.

Kubernetes Tutorial Pati 1: Aplikasyon, Microservices, ak Containers
Sèvè entènèt Nginx k ap sèvi fichye estatik k ap kouri nan yon veso

Nou sèlman konpare machin vityèl ak resipyan sou kèk pwen, men menm sa a se ase yo jwenn yon santiman pou fòs yo nan resipyan yo. Isit la Ou ka jwenn detay sou resipyan Docker.

▍Konstwi yon imaj veso pou yon aplikasyon React

Blòk debaz la nan yon veso Docker se dosye a Dockerfile. Nan kòmansman dosye sa a, se yon dosye ki fèt sou imaj de baz veso a, Lè sa a, gen yon sekans enstriksyon ki endike ki jan yo kreye yon veso ki pral satisfè bezwen yo nan yon aplikasyon sèten.

Anvan nou kòmanse travay ak dosye a Dockerfile, Ann sonje sa nou te fè pou prepare fichye aplikasyon React pou telechaje sou sèvè Nginx la:

  1. Bati yon pake aplikasyon React (npm run build).
  2. Kòmanse sèvè Nginx la.
  3. Kopi kontni anyè build soti nan katab pwojè a sa-frontend nan katab sèvè a nginx/html.

Anba a ou ka wè paralèl ki genyen ant kreye yon veso ak etap ki anwo yo fèt sou òdinatè lokal ou a.

▍Prepare Dockerfile pou aplikasyon SA-Frontend la

Enstriksyon yo ki pral genyen nan Dockerfile pou aplikasyon SA-Frontend, konpoze de sèlman de ekip. Reyalite a se ke ekip devlopman Nginx te prepare yon debaz imaj pou Nginx, ke nou pral itilize pou kreye imaj nou an. Sa yo se de etap sa yo nou bezwen dekri:

  1. Baz imaj la ta dwe imaj Nginx la.
  2. Kontni Dosye sa-frontend/build bezwen kopye nan katab imaj la nginx/html.

Si w ale soti nan deskripsyon sa a nan dosye a Dockerfile, Lè sa a, li pral sanble tankou sa a:

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

Kòm ou ka wè, tout bagay isit la se trè senp, ak sa ki nan dosye a menm vire yo dwe byen lizib ak konprann. Fichye sa a di sistèm nan pran imaj la nginx ak tout sa ki deja ladan l, epi kopye sa ki nan anyè a build nan anyè a nginx/html.

Isit la ou ka gen yon kesyon konsènan ki jan mwen konnen ki kote egzakteman ou bezwen kopye dosye ki soti nan katab la build, se sa ki, kote chemen an soti /usr/share/nginx/html. An reyalite, pa gen anyen konplike isit la tou. Reyalite a se ke enfòmasyon ki enpòtan yo ka jwenn nan deskripsyon imaj.

▍Konstwi imaj la ak telechaje li nan repozitwa a

Anvan nou ka travay ak imaj la fini, nou bezwen pouse li nan depo imaj la. Pou fè sa, nou pral itilize gratis platfòm hosting imaj nwaj Docker Hub la. Nan etap sa a nan travay ou bezwen fè bagay sa yo:

  1. Enstale Koupre.
  2. Enskri sou sit entènèt Docker Hub la.
  3. Konekte nan kont ou lè w ap kouri lòd sa a nan tèminal la:
    docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"

Koulye a, ou bezwen sèvi ak tèminal la pou ale nan anyè a sa-frontend epi kouri lòd sa a la:

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

Isit la ak pi lwen nan kòmandman menm jan an $DOCKER_USER_ID ta dwe ranplase ak non itilizatè Docker Hub ou a. Pou egzanp, pati sa a nan lòd la ta ka sanble sa a: rinormaloku/sentiment-analysis-frontend.

Nan ka sa a, lòd sa a ka vin pi kout pa retire li -f Dockerfile, piske dosye sa a deja egziste nan katab kote n ap egzekite lòd sa a.

Yo nan lòd yo voye imaj la fini nan repozitwa a, nou bezwen lòd sa a:

docker push $DOCKER_USER_ID/sentiment-analysis-frontend

Apre w fin ranpli li, tcheke lis depo ou yo sou Docker Hub pou w ka konprann si telechaje imaj la nan depo nwaj la te reyisi.

▍Kouri yon veso

Koulye a, nenpòt moun ka telechaje epi kouri imaj la, ke yo rekonèt kòm $DOCKER_USER_ID/sentiment-analysis-frontend. Pou fè sa, ou bezwen kouri sekans sa a nan kòmandman:

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

Koulye a, veso a ap kouri, nou ka kontinye travay pa kreye lòt imaj nou bezwen. Men, anvan nou kontinye, ann konprann konsepsyon an 80:80, ki parèt nan lòd lanse imaj la epi li ka sanble konfizyon.

  • Premye nimewo a 80 — sa a se nimewo pò lame a (ki se, òdinatè lokal la).
  • Dezyèm nimewo 80 se pò veso a kote yo ta dwe voye demann lan.

Konsidere egzanp sa a.

Kubernetes Tutorial Pati 1: Aplikasyon, Microservices, ak Containers
Port Forwarding

Sistèm nan redireksyon demann ki soti nan pò a <hostPort> pou chak pò <containerPort>. Sa vle di, aksè nan pò a 80 òdinatè a redireksyon nan pò a 80 veso.

Depi pò a 80 louvri sou òdinatè lokal la, Lè sa a, ou ka jwenn aksè nan aplikasyon an nan òdinatè sa a nan localhost:80. Si sistèm ou a pa sipòte Docker, aplikasyon an ka kouri sou yon machin vityèl Docker, adrès ki pral sanble. <docker-machine ip>:80. Pou chèche konnen adrès IP machin vityèl Docker la, ou ka itilize lòd la docker-machine ip.

Nan pwen sa a, apre yo fin lanse avèk siksè veso aplikasyon front-end la, ou ta dwe kapab louvri paj li a nan navigatè a.

▍Fisye .dockerignore la

Kolekte yon imaj aplikasyon an SA-Frontend, nou te kapab remake ke pwosesis sa a vire soti yo dwe trè dousman. Sa rive paske kontèks bati imaj la dwe voye bay demon Docker la. Anyè ki reprezante kontèks konstriksyon an espesifye kòm dènye agiman kòmandman an docker build. Nan ka nou an, gen yon pwen nan fen lòd sa a. Sa lakòz estrikti sa a yo dwe enkli nan kontèks la bati:

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

Men, nan tout dosye yo prezan isit la, nou sèlman bezwen katab la build. Chaje nenpòt lòt bagay se yon fatra nan tan. Ou ka akselere bati a lè w di Docker ki anyè pou inyore. Se pou nou fè sa nou bezwen dosye a .dockerignore. Ou menm, si ou abitye ak dosye a .gitignore, estrikti nan dosye sa a pral pwobableman sanble abitye. Li bay lis anyè ke sistèm nan bati imaj ka inyore. Nan ka nou an, sa ki nan dosye sa a sanble tankou sa a:

node_modules
src
public

dosye .dockerignore dwe nan menm katab ak dosye a Dockerfile. Koulye a, bati imaj la pral pran yon kesyon de segonn.

Ann travay kounye a sou imaj la pou aplikasyon Java a.

▍Konstwi yon imaj veso pou yon aplikasyon Java

Ou konnen sa, ou te deja aprann tout sa ou bezwen konnen pou kreye imaj veso. Se poutèt sa seksyon sa a pral trè kout.

Louvri fichye a Dockerfileki nan katab pwojè a sa-webapp. Si ou li tèks dosye sa a, ou pral wè sèlman de nouvo konstriksyon ladan l, kòmanse ak mo kle yo ENV и EXPOSE:

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

Mo kle ENV Pèmèt ou deklare varyab anviwònman andedan resipyan Docker. An patikilye, nan ka nou an, li pèmèt ou presize yon URL jwenn aksè nan API aplikasyon an ki fè analiz tèks.

Mo kle EXPOSE pèmèt ou di Docker louvri yon pò. Nou pral sèvi ak pò sa a pandan w ap kouri aplikasyon an. Isit la ou ka remake ke nan Dockerfile pou aplikasyon SA-Frontend pa gen okenn lòd konsa. Sa a se sèlman pou rezon dokimantasyon, nan lòt mo, konstriksyon sa a fèt pou moun ki pral li Dockerfile.

Bati imaj la ak pouse li nan depo a sanble egzakteman menm jan ak nan egzanp anvan an. Si ou poko gen anpil konfyans nan kapasite w, yo ka jwenn kòmandman korespondan yo nan dosye a README.md nan katab sa-webapp.

▍Konstwi yon imaj veso pou yon aplikasyon Python

Si w gade sa ki nan dosye a Dockerfile nan katab sa-logic, Lè sa a, ou pa pral jwenn anyen nouvo pou tèt ou la. Kòmandman yo pou bati imaj la epi voye li nan repozitwa a ta dwe deja abitye pou ou, men, menm jan ak lòt aplikasyon nou yo, yo ka jwenn yo nan dosye a. README.md nan katab sa-logic.

▍Tès aplikasyon ki nan kontenè

Èske ou ka fè konfyans yon bagay ou pa te teste? Mwen pa kapab tou. Ann teste kontenè nou yo.

  1. Ann lanse veso aplikasyon an sa-logic ak konfigirasyon li pou koute sou pò a 5050:
    docker run -d -p 5050:5000 $DOCKER_USER_ID/sentiment-analysis-logic
  2. Ann lanse veso aplikasyon an sa-webapp ak konfigirasyon li pou koute sou pò a 8080. Anplis de sa, nou bezwen konfigirasyon pò a sou kote aplikasyon an Python pral koute demann ki soti nan aplikasyon an Java pa reassigning varyab anviwònman an. 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

Pou aprann kijan pou jwenn adrès IP yon veso Docker oswa yon machin vityèl, al gade nan dosye a README.

Ann lanse veso aplikasyon an sa-frontend:

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

Koulye a, tout bagay pare pou ale nan adrès la nan navigatè a localhost:80 epi eseye aplikasyon an.

Tanpri sonje ke si ou chanje pò a pou sa-webapp, oswa si w ap kouri yon machin vityèl Docker, w ap bezwen edite fichye a App.js soti nan yon katab sa-frontendpa chanje adrès IP oswa nimewo pò nan metòd la analyzeSentence(), ranplase enfòmasyon aktyèl olye de done demode. Apre sa, ou bezwen rasanble imaj la epi sèvi ak li.

Sa a se sa dyagram aplikasyon nou an sanble kounye a.

Kubernetes Tutorial Pati 1: Aplikasyon, Microservices, ak Containers
Microservices kouri nan kontenè

Rezime: poukisa nou bezwen yon gwoup Kubernetes?

Nou sot egzamine dosye yo Dockerfile, te pale sou fason pou konstwi imaj epi pouse yo nan yon depo Docker. Anplis de sa, nou te aprann ki jan yo pi vit asanble imaj lè l sèvi avèk dosye a .dockerignore. Kòm yon rezilta, mikwosèvis nou yo kounye a kouri nan resipyan Docker. Isit la ou ka gen yon kesyon konplètman jistifye sou poukisa nou bezwen Kubernetes. Dezyèm pati nan materyèl sa a pral konsakre nan reponn kesyon sa a. Antretan, konsidere kesyon sa a:
Ann sipoze ke aplikasyon entènèt nou an pou analiz tèks te vin popilè atravè lemond. Dè milyon de demann vin jwenn li chak minit. Sa vle di ke microservices sa-webapp и sa-logic pral anba chaj menmen. Ki jan yo echèl resipyan kap kouri mikwo-sèvis?

Kubernetes Tutorial Pati 1: Aplikasyon, Microservices, ak Containers

Sous: www.habr.com

Add nouvo kòmantè