Kubernetes Tutorial Apá 1: Awọn ohun elo, Microservices, ati awọn apoti

Ni ibeere wa, Habr ṣẹda ibudo kan Kubernetes inú wa sì dùn láti fi ìtẹ̀jáde àkọ́kọ́ sínú rẹ̀. Alabapin!

Kubernetes jẹ rọrun. Kini idi ti awọn banki n san owo pupọ fun mi lati ṣiṣẹ ni agbegbe yii, lakoko ti ẹnikẹni le ṣakoso imọ-ẹrọ yii ni awọn wakati diẹ?

Kubernetes Tutorial Apá 1: Awọn ohun elo, Microservices, ati awọn apoti

Ti o ba ṣiyemeji pe Kubernetes le kọ ẹkọ ni kiakia, Mo daba pe o gbiyanju funrararẹ. Eyun, ti o ti ni oye ohun elo yii, iwọ yoo ni anfani lati ṣiṣẹ ohun elo kan ti o da lori awọn iṣẹ microservices ninu iṣupọ Kubernetes kan. Mo le ṣe iṣeduro eyi, nitori pe o jẹ deede ilana kanna ti a lo nibi ti Mo kọ awọn alabara wa lati ṣiṣẹ pẹlu Kubernetes. Kini o mu ki itọsọna yii yatọ si awọn miiran? Ni otitọ, ọpọlọpọ awọn nkan lo wa. Nitorinaa, pupọ julọ awọn ohun elo wọnyi bẹrẹ pẹlu alaye ti awọn nkan ti o rọrun - awọn imọran ti Kubernetes ati awọn ẹya ti aṣẹ kubectl. Awọn onkọwe ti awọn ohun elo wọnyi ro pe awọn oluka wọn faramọ idagbasoke ohun elo, awọn iṣẹ microservices, ati awọn apoti Docker. A yoo lọ ni ọna miiran. Ni akọkọ, a yoo sọrọ nipa bi o ṣe le ṣiṣẹ ohun elo kan ti o da lori awọn iṣẹ microservices lori kọnputa kan. Lẹhinna a yoo wo awọn aworan eiyan ile fun microservice kọọkan. Ati lẹhin naa, a yoo faramọ Kubernetes ati ki o wo ni gbigbe ohun elo kan ti o da lori awọn iṣẹ microservices ninu iṣupọ ti iṣakoso nipasẹ Kubernetes.

Ọna yii, pẹlu ọna mimu si Kubernetes, yoo fun ijinle oye ti ohun ti n ṣẹlẹ ti o jẹ pataki fun eniyan apapọ lati ni oye bi ohun gbogbo ṣe n ṣiṣẹ ni Kubernetes. Dajudaju Kubernetes jẹ imọ-ẹrọ ti o rọrun, ti o ba jẹ pe awọn ti o fẹ kọ ẹkọ mọ ibiti ati bii o ṣe nlo.

Bayi, laisi ado siwaju, jẹ ki a bẹrẹ ki a sọrọ nipa ohun elo ti a yoo ṣiṣẹ pẹlu.

Ohun elo esiperimenta

Ohun elo wa yoo ṣe iṣẹ kan nikan. O gba gbolohun kan gẹgẹbi titẹ sii, lẹhin eyi, ni lilo awọn irinṣẹ itusilẹ ọrọ, o ṣe itupalẹ itara ti gbolohun yii, gbigba igbelewọn ti ihuwasi ẹdun ti onkọwe ti gbolohun ọrọ si ohun kan.

Eyi ni ohun ti window akọkọ ti ohun elo yii dabi.

Kubernetes Tutorial Apá 1: Awọn ohun elo, Microservices, ati awọn apoti
Ohun elo wẹẹbu fun itupalẹ itara ti awọn ọrọ

Lati oju wiwo imọ-ẹrọ, ohun elo naa ni awọn iṣẹ microservice mẹta, ọkọọkan eyiti o yanju awọn iṣoro kan pato:

  • SA-Frontend jẹ olupin wẹẹbu Nginx ti o nṣe iranṣẹ awọn faili React aimi.
  • SA-WebApp jẹ ohun elo wẹẹbu ti a kọ ni Java ti o ṣe ilana awọn ibeere lati iwaju iwaju.
  • SA-Logic jẹ ohun elo Python ti o ṣe itupalẹ itara lori ọrọ.

O ṣe pataki lati ṣe akiyesi pe awọn iṣẹ microservices ko si ni ipinya. Wọn ṣe imuse imọran ti “ipinya awọn ojuse”, ṣugbọn ni akoko kanna wọn nilo lati ṣe ajọṣepọ pẹlu ara wọn.

Kubernetes Tutorial Apá 1: Awọn ohun elo, Microservices, ati awọn apoti
Awọn ṣiṣan data ninu ohun elo

Ninu aworan atọka ti o wa loke, o le wo awọn ipele nọmba ti eto naa, ti n ṣapejuwe awọn ṣiṣan data ninu ohun elo naa. Jẹ ki a wo wọn:

  1. Aṣàwákiri naa beere faili kan lati ọdọ olupin naa index.html (eyiti, lapapọ, ṣe igbasilẹ package ohun elo React).
  2. Olumulo nlo pẹlu ohun elo naa, eyi fa ipe si ohun elo wẹẹbu orisun orisun omi.
  3. Ohun elo wẹẹbu n gbe ibeere siwaju lati ṣe itupalẹ ọrọ si ohun elo Python.
  4. Ohun elo Python ṣe itupalẹ itara ti ọrọ ati da abajade pada bi idahun si ibeere naa.
  5. Ohun elo Orisun omi fi esi ranṣẹ si ohun elo React (eyiti, lapapọ, ṣafihan abajade ti itupalẹ ọrọ si olumulo).

Awọn koodu fun gbogbo awọn wọnyi ohun elo le ṣee ri nibi. Mo ṣeduro pe ki o daakọ ibi ipamọ yii fun ararẹ ni bayi, nitori ọpọlọpọ awọn adanwo ti o nifẹ si wa niwaju wa.

Nṣiṣẹ ohun elo orisun microservices lori ẹrọ agbegbe rẹ

Ni ibere fun ohun elo lati ṣiṣẹ, a nilo lati bẹrẹ gbogbo awọn microservices mẹta. Jẹ ká bẹrẹ pẹlu awọn cutest ti gbogbo wọn - iwaju-opin elo.

▍ Ṣeto React fun idagbasoke agbegbe

Lati le ṣiṣẹ ohun elo React, o nilo lati fi sori ẹrọ Node.js Syeed ati NPM lori kọnputa rẹ. Ni kete ti o ba ti fi sori ẹrọ gbogbo eyi, lo ebute naa lati lọ kiri si folda ise agbese rẹ sa-frontend ati ṣiṣe aṣẹ wọnyi:

npm install

Nipa ṣiṣe aṣẹ yii ni folda node_modules awọn igbẹkẹle ti ohun elo React yoo jẹ fifuye, awọn igbasilẹ eyiti o wa ninu faili naa package.json. Ni kete ti awọn igbẹkẹle ti ṣe igbasilẹ ni folda kanna, ṣiṣe aṣẹ wọnyi:

npm start

Gbogbo ẹ niyẹn. Bayi ohun elo React n ṣiṣẹ, o le wọle si nipa lilọ si adirẹsi atẹle ni ẹrọ aṣawakiri rẹ: localhost:3000. O le yi ohun kan pada ninu koodu rẹ. Iwọ yoo rii lẹsẹkẹsẹ ipa ti awọn ayipada wọnyi ni ẹrọ aṣawakiri. Eyi ṣee ṣe ọpẹ si ohun ti a npe ni "gbona" ​​rirọpo ti awọn modulu. Eyi jẹ ki idagbasoke iwaju-opin jẹ iriri ti o rọrun ati igbadun.

▍ Ngbaradi ohun elo React fun iṣelọpọ

Fun idi ti lilo ohun elo React nitootọ, a nilo lati yi pada si akojọpọ awọn faili aimi ati sin wọn si awọn alabara ni lilo olupin wẹẹbu kan.

Lati kọ ohun elo React, lẹẹkansi nipa lilo ebute, lilö kiri si folda naa sa-frontend ati ṣiṣe aṣẹ wọnyi:

npm run build

Eyi yoo ṣẹda itọsọna kan ninu folda ise agbese build. Yoo ni gbogbo awọn faili aimi pataki fun ohun elo React lati ṣiṣẹ.

Nṣiṣẹ awọn faili aimi nipa lilo Nginx

Ni akọkọ o nilo lati fi sori ẹrọ ati ṣiṣẹ olupin wẹẹbu Nginx. o ti wa ni o le ṣe igbasilẹ rẹ ki o wa awọn ilana lori bi o ṣe le fi sori ẹrọ ati ṣiṣẹ. Lẹhinna o nilo lati daakọ awọn akoonu inu folda naa sa-frontend/build si folda [your_nginx_installation_dir]/html.

Pẹlu ọna yii, faili ti ipilẹṣẹ lakoko ilana kikọ ohun elo React index.html yoo wa ni [your_nginx_installation_dir]/html/index.html. Eyi ni faili ti, nipasẹ aiyipada, olupin Nginx gbejade nigbati o wọle si. Awọn olupin ti wa ni tunto lati gbọ lori ibudo 80, ṣugbọn o le ṣe adani ni ọna ti o nilo nipa ṣiṣatunṣe faili naa [your_nginx_installation_dir]/conf/nginx.conf.

Bayi ṣii ẹrọ aṣawakiri rẹ ki o lọ si localhost:80. Iwọ yoo wo oju-iwe ohun elo React.

Kubernetes Tutorial Apá 1: Awọn ohun elo, Microservices, ati awọn apoti
Ohun elo fesi nipasẹ olupin Nginx

Ti o ba bayi tẹ nkankan sinu awọn aaye Type your sentence ki o si tẹ bọtini naa Send - ko si ohun ti yoo ṣẹlẹ. Ṣugbọn, ti o ba wo console, o le rii awọn ifiranṣẹ aṣiṣe nibẹ. Lati le ni oye ibiti awọn aṣiṣe wọnyi ti waye, jẹ ki a ṣe itupalẹ koodu ohun elo naa.

▍Itupalẹ koodu ohun elo iwaju-opin

Wiwo koodu faili naa App.js, a le rii pe titẹ bọtini naa Send Awọn ipe ọna kan analyzeSentence(). Awọn koodu fun yi ọna ti wa ni fun ni isalẹ. Jọwọ ṣe akiyesi pe fun laini kọọkan ti o ni asọye ti fọọmu naa # Номер, alaye wa ti a fun ni isalẹ koodu naa. A yoo ṣe itupalẹ awọn ajẹkù koodu miiran ni ọna kanna.

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 ti o ṣe ibeere POST si. A ro pe ohun elo kan wa ni adirẹsi yii ti o nireti iru awọn ibeere bẹẹ.

2.Ara ìbéèrè ti a fi ranṣẹ si ohun elo naa. Eyi ni apẹẹrẹ ara ibeere:

{
    sentence: "I like yogobella!"
}

3.Nigbati idahun si ibeere kan ba gba, ipo paati ti ni imudojuiwọn. Eyi jẹ ki paati lati tun ṣe. Ti a ba gba data (iyẹn ni, ohun JSON kan ti o ni data titẹ sii ati Dimegilio ọrọ ti a ṣe iṣiro), a yoo jade paati naa. Polarity, niwon awọn ipo ti o yẹ yoo pade. Eyi ni bi a ṣe ṣe apejuwe paati:

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

Awọn koodu han lati ṣiṣẹ daradara daradara. Kini aṣiṣe pẹlu eyi, lonakona? Ti o ba ro pe ni adirẹsi ti ohun elo naa n gbiyanju lati fi ibeere POST ranṣẹ, ko si nkankan sibẹsibẹ ti o le gba ati ṣe ilana ibeere yii, lẹhinna o yoo jẹ ẹtọ. Eyun, lati ilana awọn ibeere gba ni http://localhost:8080/sentiment, a nilo lati ṣiṣẹ ohun elo wẹẹbu kan ti o da lori Orisun omi.

Kubernetes Tutorial Apá 1: Awọn ohun elo, Microservices, ati awọn apoti
A nilo ohun elo orisun omi ti o le gba ibeere POST kan

▍ Ṣiṣeto ohun elo wẹẹbu orisun orisun omi

Lati le ran ohun elo orisun omi kan lọ, iwọ yoo nilo JDK8 ati Maven ati awọn oniyipada ayika ti a tunto daradara. Ni kete ti o ba ti fi sori ẹrọ gbogbo eyi, o le tẹsiwaju ṣiṣẹ lori iṣẹ akanṣe wa.

▍ Iṣakojọpọ ohun elo sinu faili idẹ kan

Lilọ kiri, ni lilo ebute kan, si folda naa sa-webapp ki o si tẹ aṣẹ wọnyi sii:

mvn install

Lẹhin ṣiṣe aṣẹ yii ninu folda sa-webapp a liana yoo wa ni da target. Eyi ni ibiti ohun elo Java yoo wa, ti a ṣajọ sinu faili idẹ kan, ti o jẹ aṣoju nipasẹ faili naa sentiment-analysis-web-0.0.1-SNAPSHOT.jar.

▍Ṣiṣe ohun elo Java kan

Lọ si folda target ati ṣiṣe ohun elo pẹlu aṣẹ atẹle:

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

Aṣiṣe yoo waye lakoko ṣiṣe pipaṣẹ yii. Lati bẹrẹ atunṣe rẹ, a le ṣe itupalẹ awọn alaye iyasọtọ ninu data itọpa akopọ:

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

Fun wa, ohun pataki julọ nibi ni mẹnuba ti ko ṣeeṣe lati ṣalaye itumọ naa sa.logic.api.url. Jẹ ki a ṣe itupalẹ koodu ninu eyiti aṣiṣe waye.

▍ Iṣiro koodu ohun elo Java

Eyi ni snippet koodu nibiti aṣiṣe ba waye.

@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. Ninu SentimentController oko kan wa saLogicApiUrl. Iye rẹ jẹ pato nipasẹ ohun-ini sa.logic.api.url.
  2. Laini saLogicApiUrl concatenates pẹlu iye /analyse/sentiment. Papọ wọn dagba adirẹsi fun ṣiṣe ipe si microservice ti o ṣe itupalẹ ọrọ.

▍ Ṣeto iye ohun-ini kan

Ni orisun omi, orisun boṣewa ti awọn iye ohun-ini jẹ faili kan application.properties, eyi ti o le ri ni sa-webapp/src/main/resources. Ṣugbọn lilo rẹ kii ṣe ọna nikan lati ṣeto awọn iye ohun-ini. Eyi tun le ṣee ṣe nipa lilo aṣẹ atẹle:

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

Iye ohun-ini yii yẹ ki o tọka si adirẹsi ti ohun elo Python wa.

Nipa atunto rẹ, a sọ fun ohun elo wẹẹbu orisun omi nibiti o nilo lati lọ lati ṣe awọn ibeere itupalẹ ọrọ.

Ni ibere ki o má ba ṣe idiju igbesi aye wa, a yoo pinnu pe ohun elo Python yoo wa ni localhost:5000 ki a si gbiyanju lati ma gbagbe nipa re. Bi abajade, aṣẹ lati ṣe ifilọlẹ ohun elo orisun omi yoo dabi eyi:

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

Kubernetes Tutorial Apá 1: Awọn ohun elo, Microservices, ati awọn apoti
Eto wa padanu ohun elo Python kan

Bayi gbogbo ohun ti a ni lati ṣe ni ṣiṣe ohun elo Python ati eto naa yoo ṣiṣẹ bi o ti ṣe yẹ.

▍ Ṣiṣeto ohun elo Python kan

Lati ṣiṣẹ ohun elo Python, o gbọdọ ni Python 3 ati Pip ti fi sori ẹrọ, ati pe awọn oniyipada ayika ti o yẹ gbọdọ ṣeto ni deede.

▍ Fifi awọn igbẹkẹle sori ẹrọ

Lọ si folda ise agbese rẹ sa-logic/sa ati ṣiṣe awọn aṣẹ wọnyi:

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

▍ Lọlẹ ohun elo

Lẹhin fifi awọn igbẹkẹle sii, a ti ṣetan lati ṣiṣẹ ohun elo naa:

python sentiment_analysis.py

Lẹhin ṣiṣe aṣẹ yii a yoo sọ fun atẹle naa:

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

Eyi tumọ si pe ohun elo naa nṣiṣẹ ati pe o nduro fun awọn ibeere ni localhost:5000/

▍ Iwadi koodu

Jẹ ki a wo koodu ohun elo Python lati loye bii o ṣe dahun si awọn ibeere:

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. Bibẹrẹ ohun kan Flask.
  2. Pato adirẹsi kan fun ṣiṣe awọn ibeere POST si rẹ.
  3. Gbigba ohun-ini pada sentence lati ara ìbéèrè.
  4. Bibẹrẹ Nkan Ailorukọ TextBlob ati gbigba iye polarity fun gbolohun akọkọ ti a gba ninu ara ti ibeere (ninu ọran wa, eyi nikan ni gbolohun ọrọ ti a firanṣẹ fun itupalẹ).
  5. Idahun pada ti ara rẹ ni ọrọ ti gbolohun ọrọ naa ati itọkasi iṣiro fun rẹ polarity.
  6. Ṣe ifilọlẹ ohun elo Flask kan, eyiti yoo wa ni 0.0.0.0:5000 (o tun le wọle si rẹ nipa lilo ikole ti fọọmu naa localhost:5000).

Awọn iṣẹ microservices ti o jẹ ohun elo naa nṣiṣẹ ni bayi. Wọn ti wa ni aifwy lati ṣe ajọṣepọ pẹlu ara wọn. Eyi ni ohun ti aworan apẹrẹ ohun elo dabi ni ipele iṣẹ yii.

Kubernetes Tutorial Apá 1: Awọn ohun elo, Microservices, ati awọn apoti
Gbogbo awọn iṣẹ microservices ti o jẹ ohun elo naa ni a mu wa sinu iṣẹ ṣiṣe

Ni bayi, ṣaaju ki o to tẹsiwaju, ṣii ohun elo React rẹ ninu ẹrọ aṣawakiri kan ki o gbiyanju lati sọ diẹ ninu awọn gbolohun ọrọ pẹlu rẹ. Ti ohun gbogbo ba ṣe ni deede - lẹhin titẹ bọtini naa Send iwọ yoo rii awọn abajade itupalẹ ni isalẹ aaye ọrọ.

Ni apakan atẹle, a yoo sọrọ nipa bii a ṣe le ṣiṣẹ awọn iṣẹ microservice wa ni awọn apoti Docker. Eyi jẹ pataki lati ṣeto ohun elo lati ṣiṣẹ lori iṣupọ Kubernetes.

Awọn apoti Docker

Kubernetes jẹ eto fun adaṣe imuṣiṣẹ, iwọn ati iṣakoso awọn ohun elo ti a fi sinu apoti. O tun npe ni "orchestrator eiyan". Ti Kubernetes ba ṣiṣẹ pẹlu awọn apoti, lẹhinna ṣaaju lilo eto yii a gbọdọ kọkọ gba awọn apoti wọnyi. Ṣugbọn akọkọ, jẹ ki a sọrọ nipa kini awọn apoti jẹ. Boya idahun ti o dara julọ si ibeere ohun ti o jẹ ni a le rii ninu iwe si Docker:

Aworan eiyan jẹ iwuwo fẹẹrẹ, ti ara ẹni, package ti o ṣiṣẹ ti o ni ohun elo kan, eyiti o pẹlu ohun gbogbo ti o nilo lati ṣiṣẹ: koodu ohun elo, agbegbe ipaniyan, awọn irinṣẹ eto ati awọn ile ikawe, awọn eto. Awọn eto inu inu le ṣee lo ni Linux ati awọn agbegbe Windows, ati pe wọn yoo ṣiṣẹ nigbagbogbo kanna laibikita awọn amayederun.

Eyi tumọ si pe awọn apoti le ṣee ṣiṣẹ lori kọnputa eyikeyi, pẹlu awọn olupin iṣelọpọ, ati awọn ohun elo ti o wa ninu wọn yoo ṣiṣẹ kanna ni eyikeyi agbegbe.

Lati ṣawari awọn ẹya ara ẹrọ ti awọn apoti ati ṣe afiwe wọn pẹlu awọn ọna miiran lati ṣiṣe awọn ohun elo, jẹ ki a wo apẹẹrẹ ti ṣiṣe ohun elo React nipa lilo ẹrọ foju kan ati eiyan kan.

▍Siṣẹ awọn faili aimi ti ohun elo React nipa lilo ẹrọ foju kan

Gbiyanju lati ṣeto iṣẹ ti awọn faili aimi nipa lilo awọn ẹrọ foju, a yoo pade awọn aila-nfani wọnyi:

  1. Lilo awọn ohun elo ti ko ni aiṣedeede, nitori ẹrọ foju kọọkan jẹ ẹrọ iṣẹ ṣiṣe ni kikun.
  2. Igbẹkẹle Platform. Ohun ti n ṣiṣẹ lori kọnputa agbegbe le ma ṣiṣẹ lori olupin iṣelọpọ kan.
  3. O lọra ati igbelosoke orisun orisun ti ojutu orisun ẹrọ foju kan.

Kubernetes Tutorial Apá 1: Awọn ohun elo, Microservices, ati awọn apoti
Olupin wẹẹbu Nginx n ṣiṣẹ awọn faili aimi ti n ṣiṣẹ lori ẹrọ foju kan

Ti a ba lo awọn apoti lati yanju iṣoro kanna, lẹhinna, ni afiwe pẹlu awọn ẹrọ foju, awọn agbara wọnyi le ṣe akiyesi:

  1. Lilo daradara ti awọn orisun: ṣiṣẹ pẹlu ẹrọ ṣiṣe nipa lilo Docker.
  2. Platform ominira. Apoti ti olupilẹṣẹ le ṣiṣẹ lori kọnputa rẹ yoo ṣiṣẹ nibikibi.
  3. Ifilọlẹ iwuwo fẹẹrẹ nipasẹ lilo awọn fẹlẹfẹlẹ aworan.

Kubernetes Tutorial Apá 1: Awọn ohun elo, Microservices, ati awọn apoti
Olupin wẹẹbu Nginx ti n ṣiṣẹ awọn faili aimi ti n ṣiṣẹ ninu apoti kan

A ṣe afiwe awọn ẹrọ foju nikan ati awọn apoti lori awọn aaye diẹ, ṣugbọn paapaa eyi to lati ni rilara fun awọn agbara ti awọn apoti. o ti wa ni O le wa awọn alaye nipa awọn apoti Docker.

▍ Ṣiṣe aworan eiyan kan fun ohun elo React

Àkọsílẹ ipilẹ ile ti apoti Docker ni faili naa Dockerfile. Ni ibẹrẹ ti faili yii, a ṣe igbasilẹ ti aworan ipilẹ ti eiyan naa, lẹhinna ilana kan wa ti o nfihan bi o ṣe le ṣẹda eiyan kan ti yoo pade awọn iwulo ohun elo kan.

Ṣaaju ki a to bẹrẹ ṣiṣẹ pẹlu faili naa Dockerfile, jẹ ki a ranti ohun ti a ṣe lati ṣeto awọn faili ohun elo React fun ikojọpọ si olupin Nginx:

  1. Ṣiṣe akojọpọ ohun elo React kan (npm run build).
  2. Bibẹrẹ olupin Nginx.
  3. Didaakọ awọn akoonu liana build lati folda ise agbese sa-frontend si folda olupin nginx/html.

Ni isalẹ o le wo awọn afiwera laarin ṣiṣẹda apoti kan ati awọn igbesẹ ti o wa loke ti a ṣe lori kọnputa agbegbe rẹ.

▍ Ngbaradi Dockerfile fun ohun elo SA-Frontend

Awọn ilana ti yoo wa ninu Dockerfile fun ohun elo SA-Frontend, ni awọn ẹgbẹ meji nikan. Otitọ ni pe ẹgbẹ idagbasoke Nginx ti pese ipilẹ kan aworan kan fun Nginx, eyiti a yoo lo lati ṣẹda aworan wa. Iwọnyi ni awọn igbesẹ meji ti a nilo lati ṣapejuwe:

  1. Ipilẹ aworan yẹ ki o jẹ aworan Nginx.
  2. Awọn akoonu folda sa-frontend/build nilo lati daakọ si folda aworan nginx/html.

Ti o ba lọ lati apejuwe yii si faili naa Dockerfile, lẹhinna o yoo dabi eyi:

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

Bii o ti le rii, ohun gbogbo nibi rọrun pupọ, ati pe awọn akoonu inu faili paapaa tan lati jẹ kika ati oye. Faili yii sọ fun eto lati ya aworan naa nginx pẹlu ohun gbogbo ti o jẹ tẹlẹ ninu rẹ, ki o si da awọn awọn akoonu ti awọn liana build si liana nginx/html.

Nibi o le ni ibeere kan nipa bawo ni MO ṣe mọ ibiti o nilo lati daakọ awọn faili lati folda naa build, ìyẹn ni pé, ibi tí ọ̀nà náà ti wá /usr/share/nginx/html. Ni otitọ, ko si ohun idiju nibi boya. Otitọ ni pe alaye ti o yẹ ni a le rii ninu apejuwe aworan.

▍ Ṣiṣe aworan naa ati ikojọpọ si ibi ipamọ

Ṣaaju ki a to ṣiṣẹ pẹlu aworan ti o pari, a nilo lati Titari si ibi ipamọ aworan. Lati ṣe eyi, a yoo lo aaye ayelujara alejo gbigba aworan awọsanma ọfẹ Docker Hub. Ni ipele yii o nilo lati ṣe awọn atẹle: +

  1. Fi sori ẹrọ Docker.
  2. Forukọsilẹ lori oju opo wẹẹbu Docker Hub.
  3. Wọle si akọọlẹ rẹ nipa ṣiṣe pipaṣẹ atẹle ni ebute naa:
    docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"

Bayi o nilo lati lo ebute lati lọ si liana sa-frontend ati ṣiṣe aṣẹ wọnyi nibẹ:

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

Nibi ati siwaju ni iru awọn aṣẹ $DOCKER_USER_ID yẹ ki o rọpo pẹlu orukọ olumulo Docker Hub rẹ. Fun apẹẹrẹ, apakan aṣẹ yii le dabi eyi: rinormaloku/sentiment-analysis-frontend.

Ni idi eyi, aṣẹ yii le kuru nipa yiyọ kuro ninu rẹ -f Dockerfile, niwọn bi faili yii ti wa tẹlẹ ninu folda ninu eyiti a n ṣe pipaṣẹ yii.

Lati fi aworan ti o pari ranṣẹ si ibi ipamọ, a nilo aṣẹ atẹle:

docker push $DOCKER_USER_ID/sentiment-analysis-frontend

Lẹhin ipari rẹ, ṣayẹwo atokọ ti awọn ibi ipamọ rẹ lori Docker Hub lati le loye boya ikojọpọ aworan si ibi ipamọ awọsanma jẹ aṣeyọri.

▍Ṣiṣe apoti kan

Bayi ẹnikẹni le ṣe igbasilẹ ati ṣiṣẹ aworan naa, ti a mọ si $DOCKER_USER_ID/sentiment-analysis-frontend. Lati ṣe eyi, o nilo lati ṣiṣẹ awọn ilana atẹle wọnyi:

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

Bayi eiyan naa nṣiṣẹ, a le tẹsiwaju ṣiṣẹ nipa ṣiṣẹda awọn aworan miiran ti a nilo. Ṣugbọn ṣaaju ki a tẹsiwaju, jẹ ki a loye apẹrẹ naa 80:80, eyi ti o han ni pipaṣẹ ifilọlẹ aworan ati pe o le dabi airoju.

  • Nọmba akọkọ 80 — eyi ni nọmba ibudo ogun (iyẹn, kọnputa agbegbe).
  • Nọmba keji 80 ni ibudo ti eiyan si eyi ti awọn ìbéèrè yẹ ki o wa dari.

Gbé àpèjúwe tó tẹ̀ lé e yìí yẹ̀ wò.

Kubernetes Tutorial Apá 1: Awọn ohun elo, Microservices, ati awọn apoti
Port Ndari

Awọn eto àtúnjúwe awọn ibeere lati ibudo <hostPort> si ibudo <containerPort>. Iyẹn ni, wiwọle si ibudo 80 kọmputa ti wa ni darí si ibudo 80 eiyan.

Niwon ibudo 80 ṣii lori kọnputa agbegbe, lẹhinna o le wọle si ohun elo lati kọnputa yii ni localhost:80. Ti eto rẹ ko ba ṣe atilẹyin Docker, ohun elo le ṣee ṣiṣẹ lori ẹrọ foju Docker, adirẹsi eyiti yoo dabi <docker-machine ip>:80. Lati wa adiresi IP ti ẹrọ foju Docker, o le lo aṣẹ naa docker-machine ip.

Ni aaye yii, lẹhin ti o ṣe ifilọlẹ aṣeyọri ohun elo iwaju-opin eiyan, o yẹ ki o ni anfani lati ṣii oju-iwe rẹ ni ẹrọ aṣawakiri.

▍ Faili .dockerignore

Gbigba aworan ohun elo SA-Frontend, a le ṣe akiyesi pe ilana yii yoo jade lọra pupọ. Eyi ṣẹlẹ nitori ipo kikọ aworan gbọdọ wa ni fifiranṣẹ si Docker daemon. Liana ti o nsoju itumọ ọrọ jẹ pato bi ariyanjiyan ti o kẹhin ti aṣẹ naa docker build. Ninu ọran wa, aami kan wa ni opin aṣẹ yii. Eyi fa igbekalẹ atẹle lati wa ninu ọrọ-ọrọ kikọ:

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

Ṣugbọn ti gbogbo awọn folda ti o wa nibi, a nilo folda nikan build. Ikojọpọ ohunkohun miiran jẹ egbin ti akoko. O le yara kikọ sii nipa sisọ Docker iru awọn ilana lati foju. O jẹ lati ṣe eyi ti a nilo faili naa .dockerignore. Iwọ, ti o ba faramọ faili naa .gitignore, ọna ti faili yii yoo dabi ẹni ti o mọ. O ṣe atokọ awọn ilana ti eto kikọ aworan le foju kọju si. Ninu ọran wa, awọn akoonu inu faili yii dabi eyi:

node_modules
src
public

Ọna .dockerignore gbọdọ wa ni folda kanna bi faili naa Dockerfile. Bayi kikọ aworan naa yoo gba ọrọ ti awọn iṣẹju-aaya.

Jẹ ki a ṣiṣẹ bayi lori aworan fun ohun elo Java.

▍ Ṣiṣe aworan eiyan fun ohun elo Java kan

O mọ kini, o ti kọ ohun gbogbo ti o nilo lati mọ lati ṣẹda awọn aworan apoti. Ti o ni idi ti apakan yii yoo jẹ kukuru pupọ.

Ṣii faili naa Dockerfileeyi ti o wa ninu folda ise agbese sa-webapp. Ti o ba ka ọrọ ti faili yii, iwọ yoo rii awọn iṣelọpọ tuntun meji nikan ninu rẹ, bẹrẹ pẹlu awọn koko ENV и EXPOSE:

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

Koko-ọrọ ENV Gba ọ laaye lati kede awọn oniyipada ayika inu awọn apoti Docker. Ni pataki, ninu ọran wa, o gba ọ laaye lati pato URL kan lati wọle si API ti ohun elo ti o ṣe itupalẹ ọrọ.

Koko-ọrọ EXPOSE gba ọ laaye lati sọ fun Docker lati ṣii ibudo kan. A yoo lo ibudo yii lakoko ṣiṣe ohun elo naa. Nibi o le ṣe akiyesi pe ni Dockerfile fun ohun elo SA-Frontend ko si iru aṣẹ bẹẹ. Eyi jẹ fun awọn idi iwe nikan, ni awọn ọrọ miiran, ikole yii jẹ ipinnu fun ẹni ti yoo ka Dockerfile.

Ṣiṣe aworan naa ati titari si ibi-ipamọ n wo deede kanna bi ninu apẹẹrẹ ti tẹlẹ. Ti o ko ba ni igboya pupọ ninu awọn agbara rẹ, awọn aṣẹ ti o baamu ni a le rii ninu faili naa README.md ninu folda naa sa-webapp.

▍ Ṣiṣe aworan apoti kan fun ohun elo Python kan

Ti o ba wo awọn akoonu ti faili naa Dockerfile ninu folda naa sa-logic, lẹhinna o ko ni ri nkankan titun fun ara rẹ nibẹ. Awọn aṣẹ fun kikọ aworan naa ati fifiranṣẹ si ibi ipamọ yẹ ki o tun mọ ọ tẹlẹ, ṣugbọn, bi pẹlu awọn ohun elo miiran, wọn le rii ninu faili naa. README.md ninu folda naa sa-logic.

▍ Idanwo awọn ohun elo ti a fi sinu apoti

Ṣe o le gbekele nkan ti o ko ti danwo? Emi ko le paapaa. Jẹ ki a ṣe idanwo awọn apoti wa.

  1. Jẹ ki ká lọlẹ awọn ohun elo eiyan sa-logic ati tunto rẹ lati gbọ lori ibudo 5050:
    docker run -d -p 5050:5000 $DOCKER_USER_ID/sentiment-analysis-logic
  2. Jẹ ki ká lọlẹ awọn ohun elo eiyan sa-webapp ati tunto rẹ lati gbọ lori ibudo 8080. Ni afikun, a nilo lati tunto ibudo lori eyiti ohun elo Python yoo tẹtisi awọn ibeere lati ohun elo Java nipa yiyipada oniyipada ayika. 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

Lati kọ ẹkọ bi o ṣe le wa adiresi IP ti apoti Docker tabi ẹrọ foju, tọka si faili naa README.

Jẹ ki ká lọlẹ awọn ohun elo eiyan sa-frontend:

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

Bayi ohun gbogbo ti šetan lati lọ si adirẹsi ninu ẹrọ aṣawakiri localhost:80 ati ki o gbiyanju ohun elo.

Jọwọ ṣe akiyesi pe ti o ba yipada ibudo fun sa-webapp, tabi ti o ba nṣiṣẹ ẹrọ foju Docker, iwọ yoo nilo lati ṣatunkọ faili naa App.js lati folda sa-frontendnipa yiyipada adiresi IP tabi nọmba ibudo ni ọna naa analyzeSentence(), rọpo alaye lọwọlọwọ dipo data ti igba atijọ. Lẹhin eyi, o nilo lati tun aworan naa jọ ki o lo.

Eyi ni apẹrẹ ohun elo wa dabi bayi.

Kubernetes Tutorial Apá 1: Awọn ohun elo, Microservices, ati awọn apoti
Microservices nṣiṣẹ ninu awọn apoti

Lakotan: kilode ti a nilo iṣupọ Kubernetes kan?

A ṣẹṣẹ ṣe ayẹwo awọn faili naa Dockerfile, ti sọrọ nipa bi o ṣe le kọ awọn aworan ati titari wọn si ibi ipamọ Docker kan. Ni afikun, a kọ ẹkọ bi o ṣe le yara apejọ aworan ni lilo faili naa .dockerignore. Bi abajade, awọn iṣẹ microservice wa ni bayi ṣiṣẹ ni awọn apoti Docker. Nibi o le ni ibeere idalare patapata nipa idi ti a nilo Kubernetes. Apa keji ohun elo yii yoo jẹ iyasọtọ si idahun ibeere yii. Ní báyìí ná, gbé ìbéèrè yìí yẹ̀ wò:
Jẹ ki a ro pe ohun elo wẹẹbu wa fun itupalẹ ọrọ ti di olokiki agbaye. Milionu awọn ibeere wa si ọdọ rẹ ni iṣẹju kọọkan. Eleyi tumo si wipe microservices sa-webapp и sa-logic yoo wa labẹ ẹru nla. Bawo ni lati ṣe iwọn awọn apoti ti nṣiṣẹ awọn iṣẹ microservices?

Kubernetes Tutorial Apá 1: Awọn ohun elo, Microservices, ati awọn apoti

orisun: www.habr.com

Fi ọrọìwòye kun