Kubernetes оқулығы 1-бөлім: қолданбалар, микросервистер және контейнерлер

Біздің өтінішіміз бойынша Хабр хаб құрды Kubernetes және біз оған алғашқы жарияланымды орналастыруға қуаныштымыз. Жазылу!

Кубернетес оңай. Неліктен банктер маған осы салада жұмыс істеу үшін көп ақша төлейді, ал кез келген адам бұл технологияны бірнеше сағатта меңгере алады?

Kubernetes оқулығы 1-бөлім: қолданбалар, микросервистер және контейнерлер

Егер сіз Кубернетесті тез үйренуге болатынына күмәндансаңыз, мен оны өзіңіз сынап көруді ұсынамын. Атап айтқанда, осы материалды меңгергеннен кейін сіз Kubernetes кластеріндегі микросервистерге негізделген қолданбаны іске қоса аласыз. Мен бұған кепілдік бере аламын, өйткені мұнда дәл сол әдістеме мен клиенттерімізге Кубернетеспен жұмыс істеуді үйретемін. Бұл нұсқаулықтың басқалардан айырмашылығы неде? Шындығында, көп нәрсе бар. Сонымен, бұл материалдардың көпшілігі қарапайым нәрселерді - Кубернетес түсініктерін және kubectl командасының мүмкіндіктерін түсіндіруден басталады. Бұл материалдардың авторлары олардың оқырмандары қолданбаларды әзірлеумен, микросервистермен және Docker контейнерлерімен таныс деп есептейді. Біз басқа жолмен жүреміз. Біріншіден, біз компьютердегі микросервистерге негізделген қолданбаны қалай іске қосу туралы айтатын боламыз. Содан кейін біз әрбір микросервис үшін контейнер кескіндерін құруды қарастырамыз. Осыдан кейін біз Kubernetes-пен танысамыз және Kubernetes басқаратын кластерде микросервистерге негізделген қосымшаны орналастыруды қарастырамыз.

Бұл тәсіл, Кубернетеске бірте-бірте жақындай отырып, Кубернетесте бәрі қалай жұмыс істейтінін түсіну үшін қарапайым адамға не болып жатқанын түсінудің тереңдігін береді. Кубернетес, әрине, қарапайым технология, егер оны білгісі келетіндер оның қайда және қалай қолданылатынын білсе.

Енді көп ұзамай, бастайық және біз жұмыс істейтін қолданба туралы сөйлесейік.

Эксперименттік қолдану

Біздің қолданба тек бір функцияны орындайды. Ол кіріс ретінде бір сөйлемді алады, содан кейін мәтінді талдау құралдарын пайдалана отырып, сөйлем авторының белгілі бір объектіге эмоционалдық қатынасының бағасын ала отырып, осы сөйлемге сентименттік талдау жасайды.

Бұл қолданбаның негізгі терезесі осылай көрінеді.

Kubernetes оқулығы 1-бөлім: қолданбалар, микросервистер және контейнерлер
Мәтіндерді сезімдік талдауға арналған веб-қосымша

Техникалық тұрғыдан алғанда, қосымша үш микросервистен тұрады, олардың әрқайсысы белгілі бір тапсырмалар жинағын шешеді:

  • SA-Frontend - статикалық реакция файлдарына қызмет көрсететін Nginx веб-сервері.
  • SA-WebApp — Java тілінде жазылған веб-бағдарлама, ол фронтендік сұрауларды өңдейді.
  • SA-Logic — мәтіндегі сезімді талдауды жүзеге асыратын Python қолданбасы.

Микросервистердің оқшауланбағанын ескеру маңызды. Олар «жауапкершілікті бөлу» идеясын жүзеге асырады, бірақ сонымен бірге олар бір-бірімен өзара әрекеттесуі керек.

Kubernetes оқулығы 1-бөлім: қолданбалар, микросервистер және контейнерлер
Қолданбадағы деректер ағындары

Жоғарыдағы диаграммада қолданбадағы деректер ағындарын бейнелейтін жүйенің нөмірленген кезеңдерін көруге болады. Оларды қарастырайық:

  1. Браузер серверден файлды сұрайды index.html (ол өз кезегінде React қолданбалы пакетін жүктейді).
  2. Пайдаланушы қолданбамен әрекеттеседі, бұл көктемгі веб-бағдарламаға қоңырау шалуды тудырады.
  3. Веб-бағдарлама мәтіндік талдауды орындау сұранысын Python қолданбасына жібереді.
  4. Python қолданбасы мәтіннің сезімдік талдауын орындайды және нәтижені сұрауға жауап ретінде қайтарады.
  5. Spring қолданбасы React қолданбасына жауап жібереді (ол өз кезегінде пайдаланушыға мәтінді талдау нәтижесін көрсетеді).

Барлық осы қолданбалардың кодын табуға болады осында. Мен сізге дәл қазір осы репозиторийді өзіңіз үшін көшіріп алуды ұсынамын, өйткені алдымызда онымен көптеген қызықты эксперименттер бар.

Жергілікті компьютерде микросервистерге негізделген қолданбаны іске қосу

Қолданба жұмыс істеуі үшін біз барлық үш микросервисті іске қосуымыз керек. Олардың ішіндегі ең сүйкімдісі - фронтальды қосымшадан бастайық.

▍Жергілікті даму үшін React орнатыңыз

React қолданбасын іске қосу үшін компьютерде Node.js платформасын және NPM орнату керек. Мұның барлығын орнатқаннан кейін жоба қалтасына өту үшін терминалды пайдаланыңыз sa-frontend және келесі пәрменді іске қосыңыз:

npm install

Бұл пәрменді қалтада іске қосу арқылы node_modules React қолданбасының тәуелділіктері жүктеледі, олардың жазбалары файлда болады package.json. Тәуелділіктер бір қалтаға жүктелгеннен кейін келесі пәрменді орындаңыз:

npm start

Осымен болды. Қазір React қолданбасы жұмыс істеп тұр, оған браузерде келесі мекенжайға өту арқылы қол жеткізуге болады: localhost:3000. Оның кодындағы бір нәрсені өзгертуге болады. Бұл өзгерістердің әсерін браузерде бірден көресіз. Бұл модульдерді «ыстық» ауыстырудың арқасында мүмкін болды. Бұл фронтальды әзірлеуді қарапайым және жағымды тәжірибе етеді.

▍React қосымшасын өндіруге дайындау

React қолданбасын нақты пайдалану үшін біз оны статикалық файлдар жинағына түрлендіруіміз және веб-сервер арқылы клиенттерге қызмет көрсетуіміз керек.

Терминалды пайдаланып, React қолданбасын жасау үшін қалтаға өтіңіз sa-frontend және келесі пәрменді іске қосыңыз:

npm run build

Бұл жоба қалтасында каталог жасайды build. Онда React қолданбасының іске қосылуы үшін қажетті барлық статикалық файлдар болады.

▍Nginx көмегімен статикалық файлдарға қызмет көрсету

Алдымен Nginx веб-серверін орнату және іске қосу қажет. Бұл сіз оны жүктеп алып, орнату және іске қосу туралы нұсқауларды таба аласыз. Содан кейін қалтаның мазмұнын көшіру керек sa-frontend/build қалтаға [your_nginx_installation_dir]/html.

Бұл тәсілмен React қолданбасының құрастыру процесі кезінде жасалған файл index.html мекенжайында қолжетімді болады [your_nginx_installation_dir]/html/index.html. Бұл Nginx сервері оған кіру кезінде әдепкі бойынша шығаратын файл. Сервер портты тыңдау үшін конфигурацияланған 80, бірақ оны файлды өңдеу арқылы қажет етіп реттеуге болады [your_nginx_installation_dir]/conf/nginx.conf.

Енді браузерді ашып, өтіңіз localhost:80. Сіз React қолданбасының бетін көресіз.

Kubernetes оқулығы 1-бөлім: қолданбалар, микросервистер және контейнерлер
Nginx сервері қызмет көрсететін React қолданбасы

Енді өріске бірдеңе енгізсеңіз Type your sentence және түймесін басыңыз Send - ештеңе болмайды. Бірақ, егер сіз консольге қарасаңыз, онда қате туралы хабарларды көре аласыз. Бұл қателердің қай жерде пайда болатынын түсіну үшін қолданба кодын талдап көрейік.

▍Алдыңғы қатардағы қолданба кодын талдау

Файл кодын қарастыру App.js, біз түймені басқанда көреміз Send әдісті шақырады analyzeSentence(). Бұл әдістің коды төменде берілген. Пішіннің түсіндірмесі бар әрбір жол үшін екенін ескеріңіз # Номер, кодтың астында берілген түсініктеме бар. Біз басқа код фрагменттерін дәл осылай талдаймыз.

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. POST сұрауы жасалған URL мекенжайы. Бұл мекенжайда осындай сұрауларды күтетін қосымша бар деп болжануда.

2.Сұраныс органы өтінішке жіберілді. Міне мысал сұрау органы:

{
    sentence: "I like yogobella!"
}

3.Сұранысқа жауап алынған кезде құрамдастың күйі жаңартылады. Бұл құрамдастың қайта көрсетілуіне әкеледі. Егер біз деректерді алсақ (яғни, кіріс деректері мен есептелген мәтін ұпайы бар JSON нысаны), құрамдас бөлікті шығарамыз. Polarity, өйткені тиісті шарттар орындалады. Компонентті осылай сипаттаймыз:

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

Код өте жақсы жұмыс істейтін сияқты. Бұл не болды? Қолданба POST сұрауын жіберуге тырысатын мекенжайда бұл сұрауды қабылдайтын және өңдейтін ештеңе жоқ деп ойласаңыз, онда сіз мүлдем дұрыс боласыз. Атап айтқанда, алынған сұрауларды өңдеу үшін http://localhost:8080/sentiment, бізге Spring негізіндегі веб-қосымшаны іске қосу керек.

Kubernetes оқулығы 1-бөлім: қолданбалар, микросервистер және контейнерлер
Бізге POST сұрауын қабылдай алатын Spring қолданбасы қажет

▍ Spring негізіндегі веб-қосымшаны орнату

Spring қолданбасын қолдану үшін сізге JDK8 және Maven және дұрыс конфигурацияланған орта айнымалылары қажет. Осының барлығын орнатқаннан кейін жобамызбен жұмысты жалғастыра аласыз.

▍Қолданбаны jar файлына орау

Терминалды пайдаланып қалтаға өтіңіз sa-webapp және келесі пәрменді енгізіңіз:

mvn install

Осы пәрменді қалтада іске қосқаннан кейін sa-webapp каталог құрылады target. Бұл файл арқылы ұсынылған jar файлына оралған Java қолданбасы осы жерде орналасады sentiment-analysis-web-0.0.1-SNAPSHOT.jar.

▍Java қолданбасын іске қосу

Папкаға өтіңіз target және қолданбаны келесі пәрменмен іске қосыңыз:

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

Бұл пәрменді орындау кезінде қате пайда болады. Оны түзетуді бастау үшін стектің бақылау деректеріндегі ерекшелік мәліметтерін талдай аламыз:

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

Біз үшін бұл жерде ең маңыздысы – мағынаны нақтылау мүмкін еместігін айту sa.logic.api.url. Қате орын алған кодты талдап көрейік.

▍Java қолданбасының кодын талдау

Міне, қате орын алатын код үзіндісі.

@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. СentimentController алаңы бар saLogicApiUrl. Оның мәні сипатпен анықталады sa.logic.api.url.
  2. Жол saLogicApiUrl мәнімен біріктіреді /analyse/sentiment. Олар бірге мәтінді талдауды жүзеге асыратын микросервиске қоңырау шалу мекенжайын құрайды.

▍Сипат мәнін орнатыңыз

Көктемде сипат мәндерінің стандартты көзі файл болып табылады application.properties, оны мына жерден табуға болады sa-webapp/src/main/resources. Бірақ оны пайдалану сипат мәндерін орнатудың жалғыз жолы емес. Мұны келесі пәрмен арқылы да жасауға болады:

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

Бұл сипаттың мәні Python қолданбасының мекенжайын көрсетуі керек.

Оны конфигурациялау арқылы біз Spring веб-қосымшасына мәтінді талдау сұрауларын орындау үшін қайда бару керектігін айтамыз.

Біздің өмірімізді қиындатпау үшін біз Python қосымшасы қол жетімді болады деп шешеміз localhost:5000 және оны ұмытпауға тырысайық. Нәтижесінде Spring қосымшасын іске қосу пәрмені келесідей болады:

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

Kubernetes оқулығы 1-бөлім: қолданбалар, микросервистер және контейнерлер
Жүйеде Python қолданбасы жоқ

Енді бізге тек Python қолданбасын іске қосу жеткілікті және жүйе күткендей жұмыс істейді.

▍Python қолданбасын орнату

Python қолданбасын іске қосу үшін сізде Python 3 және Pip орнатылған болуы керек және сәйкес орта айнымалылары дұрыс орнатылуы керек.

▍Тәуелділіктерді орнату

Жоба қалтаңызға өтіңіз sa-logic/sa және келесі пәрмендерді іске қосыңыз:

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

▍Қолданбаны іске қосыңыз

Тәуелділіктерді орнатқаннан кейін біз қолданбаны іске қосуға дайынбыз:

python sentiment_analysis.py

Бұл пәрменді іске қосқаннан кейін бізге келесі хабар беріледі:

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

Бұл қолданба жұмыс істеп тұрғанын және сұрауларды күтіп тұрғанын білдіреді localhost:5000/

▍Кодты зерттеу

Оның сұрауларға қалай жауап беретінін түсіну үшін Python қолданбасының кодын қарастырайық:

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. Объектіні инициализациялау Flask.
  2. Оған POST сұрауларын орындау үшін мекенжайды көрсету.
  3. Мүлікті шығарып алу sentence сұрау органынан.
  4. Анонимді нысанды инициализациялау TextBlob және құндылықты алу polarity сұрау мәтінінде алынған бірінші сөйлем үшін (біздің жағдайда бұл талдауға жіберілген жалғыз сөйлем).
  5. Денесінде сөйлем мәтіні және ол үшін есептелген көрсеткіш бар жауапты қайтару polarity.
  6. Қолжетімді болатын Flask қолданбасын іске қосыңыз 0.0.0.0:5000 (сондай-ақ оған пішін құрылысы арқылы қол жеткізуге болады localhost:5000).

Қолданбаны құрайтын микросервистер қазір жұмыс істейді. Олар бір-бірімен араласуға бейімделген. Жұмыстың осы кезеңінде қолданбалы диаграмма осылай көрінеді.

Kubernetes оқулығы 1-бөлім: қолданбалар, микросервистер және контейнерлер
Қолданбаны құрайтын барлық микросервистер жұмыс тәртібіне келтірілді

Енді, жалғастырмас бұрын, шолғышта React қолданбасын ашып, онымен кейбір сөйлемдерді талдап көріңіз. Егер бәрі дұрыс орындалса - түймені басқаннан кейін Send талдау нәтижелерін мәтін өрісінің астында көресіз.

Келесі бөлімде біз микросервистерді Docker контейнерлерінде қалай іске қосу керектігі туралы айтатын боламыз. Бұл бағдарламаны Kubernetes кластерінде іске қосуға дайындау үшін қажет.

Докер контейнерлері

Kubernetes контейнерлік қосымшаларды орналастыруды, масштабтауды және басқаруды автоматтандыру жүйесі болып табылады. Оны «контейнер оркестрі» деп те атайды. Егер Kubernetes контейнерлермен жұмыс істесе, онда бұл жүйені пайдаланбас бұрын, біз алдымен осы контейнерлерді алуымыз керек. Бірақ алдымен контейнерлердің не екенін айтайық. Мүмкін, бұл не деген сұраққа ең жақсы жауапты табуға болады құжаттама Докерге:

Контейнер кескіні – бұл қолданбаны іске қосу үшін қажеттінің барлығын қамтитын жеңіл, дербес, орындалатын бума: қолданба коды, орындау ортасы, жүйелік құралдар мен кітапханалар, параметрлер. Контейнерленген бағдарламаларды Linux және Windows орталарында пайдалануға болады және олар инфрақұрылымға қарамастан әрқашан бірдей жұмыс істейді.

Бұл контейнерлерді кез келген компьютерде, соның ішінде өндірістік серверлерде іске қосуға болатынын және олардағы қолданбалардың кез келген ортада бірдей жұмыс істейтінін білдіреді.

Контейнерлердің мүмкіндіктерін зерттеу және оларды қолданбаларды іске қосудың басқа жолдарымен салыстыру үшін виртуалды машина мен контейнер арқылы React қолданбасына қызмет көрсету мысалын қарастырайық.

▍Виртуалды машина арқылы React қолданбасының статикалық файлдарына қызмет көрсету

Виртуалды машиналар арқылы статикалық файлдарға қызмет көрсетуді ұйымдастыруға тырысып, біз келесі кемшіліктерге тап боламыз:

  1. Ресурстарды тиімсіз пайдалану, өйткені әрбір виртуалды машина толыққанды операциялық жүйе болып табылады.
  2. Платформаға тәуелділік. Жергілікті компьютерде жұмыс істейтін нәрсе өндіріс серверінде жұмыс істемеуі мүмкін.
  3. Виртуалды машина негізіндегі шешімді баяу және ресурсты қажет ететін масштабтау.

Kubernetes оқулығы 1-бөлім: қолданбалар, микросервистер және контейнерлер
Виртуалды машинада жұмыс істейтін статикалық файлдарға қызмет көрсететін Nginx веб-сервері

Егер контейнерлер ұқсас мәселені шешу үшін пайдаланылса, виртуалды машиналармен салыстырғанда келесі күшті жақтарын атап өтуге болады:

  1. Ресурстарды тиімді пайдалану: Docker көмегімен операциялық жүйемен жұмыс істеу.
  2. Платформа тәуелсіз. Әзірлеуші ​​өз компьютерінде іске қоса алатын контейнер кез келген жерде жұмыс істейді.
  3. Кескін қабаттарын пайдалану арқылы жеңіл орналастыру.

Kubernetes оқулығы 1-бөлім: қолданбалар, микросервистер және контейнерлер
Контейнерде жұмыс істейтін статикалық файлдарға қызмет көрсететін Nginx веб-сервері

Біз виртуалды машиналар мен контейнерлерді бірнеше тармақ бойынша ғана салыстырдық, бірақ бұл контейнерлердің күшті жақтарын сезіну үшін жеткілікті. Бұл Docker контейнерлері туралы мәліметтерді таба аласыз.

▍React қолданбасы үшін контейнер кескінін құру

Docker контейнерінің негізгі құрылыс блогы файл болып табылады Dockerfile. Бұл файлдың басында контейнердің негізгі кескіні бойынша жазба жасалады, содан кейін белгілі бір қолданбаның қажеттіліктерін қанағаттандыратын контейнерді құру жолын көрсететін нұсқаулар тізбегі бар.

Файлмен жұмысты бастамас бұрын Dockerfile, Nginx серверіне жүктеп салу үшін React қолданбасының файлдарын дайындау үшін не істегенімізді еске түсірейік:

  1. React қолданбалы пакетін құру (npm run build).
  2. Nginx серверін іске қосу.
  3. Каталог мазмұнын көшіру build жоба қалтасынан sa-frontend сервер қалтасына nginx/html.

Төменде контейнерді жасау мен жергілікті компьютерде орындалған жоғарыдағы қадамдар арасындағы параллельді көре аласыз.

▍SA-Frontend қолданбасы үшін Docker файлын дайындау

Онда қамтылатын нұсқаулар Dockerfile қолдану үшін SA-Frontend, тек екі командадан тұрады. Шын мәнінде, Nginx әзірлеу тобы негізгі дайындады сурет Nginx үшін, біз оны кескінді жасау үшін қолданамыз. Бұл екі қадамды сипаттауымыз керек:

  1. Кескіннің негізі Nginx кескіні болуы керек.
  2. Қалта мазмұны sa-frontend/build сурет қалтасына көшіру керек nginx/html.

Егер сіз осы сипаттамадан файлға өтсеңіз Dockerfile, онда ол келесідей болады:

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

Көріп отырғаныңыздай, мұнда бәрі өте қарапайым, ал файлдың мазмұны тіпті оқылатын және түсінікті болып шығады. Бұл файл жүйеге суретті алуды ұсынады nginx онда бар барлық нәрселермен және каталогтың мазмұнын көшіріңіз build каталогқа nginx/html.

Бұл жерде сізде қалтадан файлдарды қай жерде көшіру керек екенін қайдан білемін деген сұрақ туындауы мүмкін build, яғни жол қайдан келді /usr/share/nginx/html. Шындығында, мұнда да күрделі ештеңе жоқ. Өйткені, тиісті ақпаратты мына жерден табуға болады сипаттамасы сурет.

▍Суретті құрастыру және оны репозиторийге жүктеп салу

Дайын суретпен жұмыс жасамас бұрын, оны сурет репозиторийіне итеру керек. Ол үшін біз Docker Hub тегін бұлттық кескін хостинг платформасын қолданамыз. Жұмыстың осы кезеңінде келесі әрекеттерді орындау қажет:

  1. Орнату Докер.
  2. Docker Hub веб-сайтында тіркеліңіз.
  3. Терминалда келесі пәрменді іске қосу арқылы тіркелгіңізге кіріңіз:
    docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"

Енді каталогқа өту үшін терминалды пайдалану керек sa-frontend және сол жерде келесі пәрменді іске қосыңыз:

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

Осы жерде және одан әрі ұқсас командаларда $DOCKER_USER_ID Docker Hub пайдаланушы атымен ауыстырылуы керек. Мысалы, пәрменнің бұл бөлігі келесідей болуы мүмкін: rinormaloku/sentiment-analysis-frontend.

Бұл жағдайда бұл пәрменді одан алып тастау арқылы қысқартуға болады -f Dockerfile, өйткені бұл файл біз осы пәрменді орындап жатқан қалтада бұрыннан бар.

Дайын суретті репозиторийге жіберу үшін бізге келесі пәрмен қажет:

docker push $DOCKER_USER_ID/sentiment-analysis-frontend

Оны аяқтағаннан кейін кескіннің бұлттық қоймаға жүктеп салу сәтті болғанын түсіну үшін Docker Hub жүйесіндегі репозиторийлер тізімін тексеріңіз.

▍Контейнерді іске қосу

Енді кез келген адам ретінде белгілі кескінді жүктеп алып, іске қоса алады $DOCKER_USER_ID/sentiment-analysis-frontend. Мұны істеу үшін келесі пәрмендер тізбегін орындау керек:

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

Қазір контейнер жұмыс істеп тұр, біз басқа қажетті кескіндерді жасау арқылы жұмысты жалғастыра аламыз. Бірақ жалғастырмас бұрын, дизайнды түсінейік 80:80, ол кескінді іске қосу пәрменінде пайда болады және түсініксіз болып көрінуі мүмкін.

  • Бірінші нөмір 80 — бұл хост портының нөмірі (яғни жергілікті компьютер).
  • Екінші нөмір 80 сұрау жіберілетін контейнер порты болып табылады.

Келесі мысалды қарастырайық.

Kubernetes оқулығы 1-бөлім: қолданбалар, микросервистер және контейнерлер
Портты бағыттау

Жүйе сұрауларды порттан қайта бағыттайды <hostPort> портқа <containerPort>. Яғни портқа қол жеткізу 80 компьютер портқа қайта бағытталады 80 контейнер.

Порттан бері 80 жергілікті компьютерде ашылған, содан кейін қолданбаға осы компьютерден қол жеткізуге болады localhost:80. Егер сіздің жүйеңіз Docker қолданбасын қолдамаса, қолданбаны мекенжайы келесідей болатын Docker виртуалды машинасында іске қосуға болады. <docker-machine ip>:80. Docker виртуалды машинасының IP мекенжайын білу үшін пәрменді пайдалануға болады docker-machine ip.

Осы кезде, алдыңғы қатардағы қолданба контейнерін сәтті іске қосқаннан кейін, оның бетін браузерде аша алуыңыз керек.

▍.dockerignore файлы

Қолданба кескінін жинау SA-Frontend, біз бұл процестің өте баяу жүретінін байқадық. Бұл кескін құрастыру мәтінмәнін Docker демонына жіберу керек болғандықтан орын алады. Құрастыру мәтінмәнін көрсететін каталог пәрменнің соңғы аргументі ретінде көрсетіледі docker build. Біздің жағдайда бұл команданың соңында нүкте бар. Бұл құрастыру контекстіне келесі құрылымды қосуға себеп болады:

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

Бірақ мұндағы барлық қалталардың ішінде бізге тек қалта қажет build. Басқа нәрсені жүктеу - уақытты босқа өткізу. Докерге қай каталогтарды елемеу керектігін айту арқылы құрастыруды жылдамдатуға болады. Мұны істеу үшін бізге файл қажет .dockerignore. Сіз, егер сіз файлмен таныс болсаңыз .gitignore, бұл файлдың құрылымы таныс болып көрінуі мүмкін. Ол кескін құрастыру жүйесі елемеуі мүмкін каталогтарды тізімдейді. Біздің жағдайда бұл файлдың мазмұны келесідей болады:

node_modules
src
public

файл .dockerignore файлмен бір қалтада болуы керек Dockerfile. Енді кескінді құру бірнеше секундты алады.

Енді Java қолданбасына арналған кескінмен жұмыс жасайық.

▍Java қолданбасы үшін контейнер кескінін құру

Сіз контейнерлік кескіндерді жасау үшін білуіңіз керек нәрсенің бәрін үйрендіңіз. Сондықтан бұл бөлім өте қысқа болады.

Файлды ашыңыз Dockerfileол жоба қалтасында орналасқан sa-webapp. Бұл файлдың мәтінін оқысаңыз, онда кілт сөздерден бастап тек екі жаңа конструкцияны көресіз ENV и EXPOSE:

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

Кілт сөз ENV Docker контейнерлерінің ішінде орта айнымалы мәндерін жариялауға мүмкіндік береді. Атап айтқанда, біздің жағдайда мәтіндік талдауды жүзеге асыратын қолданбаның API интерфейсіне кіру үшін URL мекенжайын көрсетуге мүмкіндік береді.

Кілт сөз EXPOSE Docker портты ашуды айтуға мүмкіндік береді. Біз бұл портты қолданбаны іске қосу кезінде қолданамыз. Мұнда сіз мұны байқай аласыз Dockerfile қолдану үшін SA-Frontend мұндай бұйрық жоқ. Бұл тек құжаттамалық мақсатта, басқаша айтқанда, бұл құрылыс оқитын адамға арналған Dockerfile.

Кескінді құрастыру және оны репозиторийге итеру алдыңғы мысалдағыдай көрінеді. Егер сіз өзіңіздің қабілеттеріңізге әлі сенімді болмасаңыз, сәйкес командаларды файлдан табуға болады README.md қалтада sa-webapp.

▍Python қолданбасы үшін контейнер кескінін құру

Егер сіз файлдың мазмұнын қарасаңыз Dockerfile қалтада sa-logic, сонда сіз ол жерден өзіңіз үшін жаңа ештеңе таба алмайсыз. Кескінді құру және оны репозиторийге жіберу пәрмендері сізге бұрыннан таныс болуы керек, бірақ біздің басқа қолданбаларымыз сияқты оларды файлдан табуға болады. README.md қалтада sa-logic.

▍Контейнерленген қолданбаларды сынау

Сіз сынамаған нәрсеге сене аласыз ба? мен де алмаймын. Контейнерлерімізді сынап көрейік.

  1. Қолданбалар контейнерін іске қосайық sa-logic және оны портта тыңдау үшін конфигурациялаңыз 5050:
    docker run -d -p 5050:5000 $DOCKER_USER_ID/sentiment-analysis-logic
  2. Қолданбалар контейнерін іске қосайық sa-webapp және оны портта тыңдау үшін конфигурациялаңыз 8080. Оған қоса, орта айнымалы мәнін қайта тағайындау арқылы Python қолданбасы Java қолданбасынан сұрауларды тыңдайтын портты конфигурациялауымыз керек. 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

Docker контейнерінің немесе виртуалды машинаның IP мекенжайын білу үшін файлды қараңыз README.

Қолданбалар контейнерін іске қосайық sa-frontend:

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

Енді бәрі браузердегі мекенжайға өтуге дайын localhost:80 және қолданбаны қолданып көріңіз.

Егер сіз портты өзгерткен болсаңыз, ескеріңіз sa-webapp, немесе Docker виртуалды машинасын іске қосып жатсаңыз, файлды өңдеу қажет болады App.js қалтадан sa-frontendәдістегі IP мекенжайын немесе порт нөмірін өзгерту арқылы analyzeSentence(), ескірген деректердің орнына ағымдағы ақпаратты ауыстыру. Осыдан кейін кескінді қайта жинап, оны пайдалану керек.

Біздің қолданбалы диаграммамыз қазір осылай көрінеді.

Kubernetes оқулығы 1-бөлім: қолданбалар, микросервистер және контейнерлер
Микросервис контейнерлерде жұмыс істейді

Түйіндеме: неге бізге Kubernetes кластері қажет?

Біз файлдарды жаңа ғана зерттедік Dockerfile, кескіндерді қалай құру және оларды Docker репозиторийіне итеру туралы айтты. Сонымен қатар, біз файлды пайдаланып кескінді құрастыруды қалай жылдамдатуға болатынын білдік .dockerignore. Нәтижесінде біздің микросервистер енді Docker контейнерлерінде жұмыс істейді. Мұнда сізде Кубернетес не үшін қажет екендігі туралы толық негізделген сұрақ туындауы мүмкін. Бұл материалдың екінші бөлімі осы сұраққа жауап беруге арналады. Осы арада келесі сұрақты қарастырыңыз:
Мәтінді талдауға арналған веб-қосымшамыз дүние жүзінде танымал болды делік. Оған минут сайын миллиондаған өтініштер түседі. Бұл микросервистерді білдіреді sa-webapp и sa-logic үлкен жүктеме болады. Микросервистермен жұмыс істейтін контейнерлерді қалай масштабтауға болады?

Kubernetes оқулығы 1-бөлім: қолданбалар, микросервистер және контейнерлер

Ақпарат көзі: www.habr.com

пікір қалдыру