Kubernetes үйрөткүчү 1-бөлүк: Тиркемелер, микросервистер жана контейнерлер

Биздин өтүнүчүбүз боюнча Хабр хаб түздү Kubernetes жана ага биринчи басылманы жайгаштырууга кубанычтабыз. Жазылыңыз!

Kubernetes жеңил. Эмне үчүн банктар мага бул тармакта иштөө үчүн көп акча төлөшөт, ал эми кимдир бирөө бул технологияны бир нече сааттын ичинде өздөштүрүп алат?

Kubernetes үйрөткүчү 1-бөлүк: Тиркемелер, микросервистер жана контейнерлер

Эгер сиз Кубернетести ушунчалык тез үйрөнүүгө шектенсеңиз, анда мен аны өзүңүз сынап көрүүнү сунуштайм. Тактап айтканда, бул материалды өздөштүргөндөн кийин, сиз Kubernetes кластериндеги микросервистерге негизделген тиркемени иштете аласыз. Мен буга кепилдик бере алам, анткени бул жерде так ошол эле методология мен кардарларыбызды Kubernetes менен иштөөгө үйрөтөм. Бул колдонмо башкалардан эмнеси менен айырмаланат? Чынында, көп нерселер бар. Ошентип, бул материалдардын көпчүлүгү жөнөкөй нерселерди - Kubernetes түшүнүктөрүн жана kubectl буйругунун өзгөчөлүктөрүн түшүндүрүү менен башталат. Бул материалдардын авторлору алардын окурмандары тиркемелерди иштеп чыгуу, микросервистер жана Docker контейнерлери менен тааныш деп ойлошот. Биз башка жол менен кетебиз. Биринчиден, биз компьютерде микросервистерге негизделген тиркемени кантип иштетүү керектиги жөнүндө сүйлөшөбүз. Андан кийин биз ар бир микросервис үчүн контейнер сүрөттөрүн курууну карайбыз. Ошондон кийин биз Kubernetes менен таанышып, микросервистерге негизделген тиркемени Kubernetes башкарган кластерде жайгаштырууну карайбыз.

Бул мамиле, Кубернетеске акырындык менен мамиле кылуу менен, Кубернетесте бардыгы кандайча жөнөкөй иштээрин түшүнүү үчүн орточо адам үчүн эмне болуп жатканын түшүнүүнүн тереңдигин берет. Kubernetes, албетте, жөнөкөй технология, аны үйрөнүүнү каалагандар кайда жана кантип колдонуларын билишсе.

Эми, көпкө созулбай, баштайлы жана биз иштей турган тиркеме жөнүндө сүйлөшөлү.

Эксперименталдык колдонмо

Биздин колдонмо бир гана функцияны аткарат. Киргизүү катары бир сүйлөмдү алат, андан кийин текстти талдоо куралдарын колдонуу менен бул сүйлөмдүн сентименттик анализин жүргүзөт, сүйлөмдүн авторунун белгилүү бир объектиге эмоционалдык мамилесине баа алат.

Бул колдонмонун негизги терезеси ушундай көрүнөт.

Kubernetes үйрөткүчү 1-бөлүк: Тиркемелер, микросервистер жана контейнерлер
Тексттердин сезимдерин талдоо үчүн веб-тиркеме

Техникалык көз караштан алганда, колдонмо үч микросервистен турат, алардын ар бири көйгөйлөрдүн белгилүү бир топтомун чечет:

  • SA-Frontend статикалык React файлдарын тейлеген 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, Биз Жаздын негизинде веб-тиркемени иштетүү керек.

Kubernetes үйрөткүчү 1-бөлүк: Тиркемелер, микросервистер жана контейнерлер
Бизге POST өтүнүчүн кабыл ала турган Жаз колдонмосу керек

▍Жазга негизделген веб тиркемесин орнотуу

Spring тиркемесин жайылтуу үчүн сизге JDK8 жана Maven жана туура конфигурацияланган чөйрө өзгөрмөлөрү керек болот. Мунун бардыгы орнотулгандан кийин, сиз биздин долбоордун үстүндө иштөөнү уланта аласыз.

▍Тиркемени jar файлына таңгактоо

Терминалды колдонуп, папкага өтүңүз sa-webapp жана төмөнкү буйрукту киргизиңиз:

mvn install

Папкада бул буйрукту иштеткенден кийин sa-webapp каталог түзүлөт target. Бул жерде Java тиркемеси жайгашкан, файл менен көрсөтүлгөн jar файлында пакеттелген 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 тиркемесинин дарегин көрсөтүшү керек.

Аны конфигурациялоо менен, жазгы веб-тиркемеге текстти талдоо өтүнүчтөрүн аткаруу үчүн кайда барышы керек экенин айтабыз.

Жашообузду татаалдаштырбоо үчүн, биз Python тиркемесинин жеткиликтүү болушун чечебиз localhost:5000 жана аны унутпоого аракет кылалы. Натыйжада, Жазгы тиркемени ишке киргизүү буйругу төмөнкүдөй болот:

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/

▍Code Research

Сурамдарга кандай жооп берерин түшүнүү үчүн 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. Ресурстарды эффективдүү пайдалануу: Докерди колдонуу менен операциялык система менен иштөө.
  2. Платформа көз карандысыз. Иштеп чыгуучу өзүнүн компьютеринде иштей турган контейнер каалаган жерде иштейт.
  3. Сүрөт катмарларын колдонуу аркылуу жеңил жайылтуу.

Kubernetes үйрөткүчү 1-бөлүк: Тиркемелер, микросервистер жана контейнерлер
Контейнерде иштеген статикалык файлдарды тейлеген Nginx веб-сервери

Биз виртуалдык машиналарды жана контейнерлерди бир нече пункттар боюнча гана салыштырдык, бирок бул контейнерлердин күчтүү жактарын сезүү үчүн жетиштүү. бул Сиз Docker контейнерлери жөнүндө маалымат таба аласыз.

▍React тиркемеси үчүн контейнер сүрөтүн түзүү

Докер контейнеринин негизги курулуш блогу файл болуп саналат Dockerfile. Бул файлдын башында контейнердин негизги сүрөтү жазылат, андан кийин белгилүү бир тиркеменин муктаждыктарын канааттандыра турган контейнерди кантип түзүү керектиги көрсөтүлгөн көрсөтмөлөрдүн ырааттуулугу бар.

Файл менен иштөөдөн мурун Dockerfile, келгиле, Nginx серверине жүктөө үчүн React тиркемесинин файлдарын даярдоо үчүн эмне кылганыбызды эстейли:

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

Төмөндө сиз контейнерди түзүү менен жергиликтүү компьютериңизде аткарылган жогорудагы кадамдардын ортосундагы параллелдерди көрө аласыз.

▍SA-Frontend тиркемеси үчүн Докер файлын даярдоо

Анда камтылган көрсөтмөлөр 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 контейнерлеринде иштейт. Бул жерде сизде эмне үчүн бизге Kubernetes керек деген сурооңуз болушу мүмкүн. Бул материалдын экинчи бөлүгү бул суроого жооп берүүгө арналат. Ошол эле учурда, төмөнкү суроону карап көрөлү:
Текст талдоо үчүн биздин веб-тиркеме дүйнөлүк популярдуу болуп калды деп ойлойлу. Ага мүнөт сайын миллиондогон кайрылуулар келип турат. Бул микросервис дегенди билдирет sa-webapp и sa-logic зор жүк астында болот. Микросервистерди иштеткен контейнерлерди кантип масштабдоо керек?

Kubernetes үйрөткүчү 1-бөлүк: Тиркемелер, микросервистер жана контейнерлер

Source: www.habr.com

Комментарий кошуу