Кубернетес туториал Дел 1: Апликации, микроуслуги и контејнери

На наше барање, Хабр создаде центар Кубернети и со задоволство ја пласираме првата публикација во неа. Претплатете се!

Кубернетес е лесен. Зошто банките ми плаќаат многу пари за да работам во оваа област, додека секој може да ја совлада оваа технологија за само неколку часа?

Кубернетес туториал Дел 1: Апликации, микроуслуги и контејнери

Ако се сомневате дека Kubernetes може да се научи толку брзо, предлагам да го пробате сами. Имено, откако ќе го совладате овој материјал, ќе можете да стартувате апликација базирана на микросервиси во кластерот Kubernetes. Можам да го гарантирам ова, бидејќи токму истата методологија што се користи овде ги учам нашите клиенти да работат со Kubernetes. Што го прави овој водич различен од другите? Всушност, има многу работи. Значи, повеќето од овие материјали започнуваат со објаснување на едноставни работи - концептите на Kubernetes и карактеристиките на командата kubectl. Авторите на овие материјали претпоставуваат дека нивните читатели се запознаени со развојот на апликации, микросервисите и контејнерите на Docker. Ќе одиме по другата страна. Прво, ќе разговараме за тоа како да извршите апликација базирана на микросервис на компјутер. Потоа ќе ги разгледаме градењето слики од контејнери за секоја микросервис. И после тоа, ќе се запознаеме со Kubernetes и ќе разгледаме распоредување на апликација базирана на микросервиси во кластер управуван од Kubernetes.

Овој пристап, со постепен пристап кон Kubernetes, ќе даде длабочина на разбирање на она што се случува што е неопходно за просечниот човек за да разбере колку едноставно сè функционира во Kubernetes. Kubernetes е секако едноставна технологија, под услов оние кои сакаат да ја научат да знаат каде и како се користи.

Сега, без понатамошно одложување, да започнеме и да разговараме за апликацијата со која ќе работиме.

Експериментална апликација

Нашата апликација ќе извршува само една функција. Потребна е една реченица како влез, по што со помош на алатки за анализа на текст врши сентиментална анализа на оваа реченица, добивајќи оценка за емотивниот однос на авторот на реченицата кон одреден предмет.

Вака изгледа главниот прозорец на оваа апликација.

Кубернетес туториал Дел 1: Апликации, микроуслуги и контејнери
Веб апликација за сентиментална анализа на текстови

Од техничка гледна точка, апликацијата се состои од три микросервиси, од кои секоја решава одреден сет на задачи:

  • SA-Frontend е веб-сервер Nginx кој опслужува статични React датотеки.
  • SA-WebApp е веб-апликација напишана во Java која обработува барања од предниот дел.
  • SA-Logic е апликација за Python која врши анализа на чувствата на текстот.

Важно е да се напомене дека микросервисите не постојат изолирано. Тие ја спроведуваат идејата за „поделба на одговорностите“, но во исто време треба да комуницираат едни со други.

Кубернетес туториал Дел 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.

Кубернетес туториал Дел 1: Апликации, микроуслуги и контејнери
Реакт апликација сервирана од серверот Nginx

Ако сега внесете нешто во полето 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. URL-адресата на која е поднесено барањето POST. Се претпоставува дека на оваа адреса има апликација која очекува такви барања.

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.

Кубернетес туториал Дел 1: Апликации, микроуслуги и контејнери
Ни треба пролетна апликација која може да прифати барање POST

▍Поставување веб-апликација базирана на пролет

За да распоредите пролетна апликација, ќе ви требаат 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 апликација.

Со негово конфигурирање, и кажуваме на веб-апликацијата Spring каде треба да оди за да изврши барања за анализа на текст.

За да не ни го комплицираме животот, ќе одлучиме апликацијата Python да биде достапна на localhost:5000 и да се обидеме да не заборавиме на тоа. Како резултат на тоа, командата за стартување на апликацијата Spring ќе изгледа вака:

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

Кубернетес туториал Дел 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).

Микросервисите што ја сочинуваат апликацијата сега работат. Тие се подесени за да комуницираат едни со други. Вака изгледа дијаграмот за апликација во оваа фаза на работа.

Кубернетес туториал Дел 1: Апликации, микроуслуги и контејнери
Сите микросервиси кои ја сочинуваат апликацијата се ставени во работна состојба

Сега, пред да продолжите, отворете ја апликацијата React во прелистувач и обидете се да анализирате некоја реченица со неа. Ако сè е направено правилно - по притискање на копчето Send ќе ги видите резултатите од анализата под полето за текст.

Во следниот дел, ќе зборуваме за тоа како да ги извршуваме нашите микроуслуги во контејнерите на Docker. Ова е неопходно за да се подготви апликацијата да работи на кластерот Kubernetes.

Докер контејнери

Кубернети е систем за автоматизирање на распоредувањето, скалирањето и управувањето со контејнеризирани апликации. Се нарекува и „оркестратор на контејнери“. Ако Kubernetes работи со контејнери, тогаш пред да го користиме овој систем прво мора да ги набавиме овие контејнери. Но, прво, да разговараме за тоа што се контејнери. Можеби најдобриот одговор на прашањето што е тоа може да се најде во документација до Докер:

Сликата на контејнер е лесен, самостоен, извршен пакет кој содржи апликација, која вклучува сè што е потребно за нејзино извршување: код на апликација, животна средина за извршување, системски алатки и библиотеки, поставки. Контејнеризираните програми може да се користат во околини на Linux и Windows, и тие секогаш ќе работат исто без оглед на инфраструктурата.

Ова значи дека контејнерите може да се извршуваат на кој било компјутер, вклучувајќи ги и производствените сервери, а апликациите содржани во нив ќе работат исто во која било средина.

За да ги истражиме карактеристиките на контејнерите и да ги споредиме со други начини за извршување на апликации, ајде да погледнеме пример за опслужување на апликацијата React со помош на виртуелна машина и контејнер.

▍Служување статични датотеки на апликација React со помош на виртуелна машина

Обидувајќи се да ја организираме услугата на статични датотеки користејќи виртуелни машини, ќе наидеме на следните недостатоци:

  1. Неефикасно користење на ресурсите, бидејќи секоја виртуелна машина е полноправен оперативен систем.
  2. Зависност од платформа. Она што работи на локален компјутер може да не работи на производствен сервер.
  3. Бавно и интензивно скалирање на ресурси на решение засновано на виртуелна машина.

Кубернетес туториал Дел 1: Апликации, микроуслуги и контејнери
Веб-сервер Nginx кој служи статични датотеки што работат на виртуелна машина

Ако контејнерите се користат за решавање на сличен проблем, тогаш, во споредба со виртуелните машини, може да се забележат следните јаки страни:

  1. Ефикасно користење на ресурсите: работа со оперативниот систем користејќи Docker.
  2. Независна платформа. Контејнер што развивачот може да го работи на својот компјутер ќе работи насекаде.
  3. Лесно распоредување преку употреба на слоеви на слика.

Кубернетес туториал Дел 1: Апликации, микроуслуги и контејнери
Веб-сервер Nginx кој служи статични датотеки што работат во контејнер

Ги споредивме виртуелните машини и контејнерите само на неколку точки, но и тоа е доволно за да се почувствуваат силните страни на контејнерите. Тука Можете да најдете детали за контејнерите на Docker.

▍Градење слика на контејнер за апликацијата React

Основниот градежен блок на контејнерот Docker е датотеката Dockerfile. На почетокот на оваа датотека, се прави запис од основната слика на контејнерот, потоа има низа инструкции што укажуваат на тоа како да се создаде контејнер што ќе ги задоволи потребите на одредена апликација.

Пред да започнеме да работиме со датотеката Dockerfile, да се потсетиме што направивме за да ги подготвиме апликациските датотеки React за поставување на серверот Nginx:

  1. Изградба на пакет за апликација React (npm run build).
  2. Стартување на серверот Nginx.
  3. Копирање на содржината на директориумот build од проектната папка sa-frontend во папката на серверот nginx/html.

Подолу можете да ги видите паралелите помеѓу создавањето на контејнер и горенаведените чекори извршени на вашиот локален компјутер.

▍Подготовка на Dockerfile за апликацијата 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 е пристаништето на контејнерот до кое треба да се препрати барањето.

Размислете за следнава илустрација.

Кубернетес туториал Дел 1: Апликации, микроуслуги и контејнери
Port Forwarding

Системот ги пренасочува барањата од пристаништето <hostPort> до пристаништето <containerPort>. Тоа е, пристап до пристаништето 80 компјутерот се пренасочува кон пристаништето 80 контејнер.

Од пристаништето 80 отворена на локалниот компјутер, а потоа можете да пристапите до апликацијата од овој компјутер на localhost:80. Ако вашиот систем не поддржува Docker, апликацијата може да се изврши на виртуелна машина Docker, чија адреса ќе изгледа вака <docker-machine ip>:80. За да ја дознаете IP адресата на виртуелната машина Docker, можете да ја користите командата docker-machine ip.

Во овој момент, по успешното лансирање на контејнерот со предната апликација, треба да можете да ја отворите неговата страница во прелистувачот.

▍Датотеката .dockerignore

Собирање слика на апликација SA-Frontend, можевме да забележиме дека овој процес се покажува исклучително бавен. Ова се случува затоа што контекстот за изградба на сликата мора да се испрати до демонот на Docker. Директориумот што го претставува контекстот за изградба е наведен како последен аргумент на командата docker build. Во нашиот случај, на крајот од оваа команда има точка. Ова предизвикува следнава структура да биде вклучена во контекстот на изградбата:

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

Но, од сите папки присутни овде, ни треба само папката build. Вчитувањето на било што друго е губење време. Можете да го забрзате изработката со тоа што ќе му кажете на Docker кои директориуми да ги игнорира. За да го направиме ова, ни треба датотеката .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. Особено, во нашиот случај, ви овозможува да наведете URL за пристап до API на апликацијата што врши анализа на текст.

Клучен збор 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

За да дознаете како да ја дознаете IP адресата на контејнер или виртуелна машина Docker, погледнете ја датотеката 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(), заменувајќи ги тековните информации наместо застарените податоци. По ова, треба повторно да ја соберете сликата и да ја користите.

Вака изгледа нашиот дијаграм за апликација сега.

Кубернетес туториал Дел 1: Апликации, микроуслуги и контејнери
Микроуслугите работат во контејнери

Резиме: зошто ни е потребен кластер Kubernetes?

Само што ги разгледавме досиејата Dockerfile, зборуваше за тоа како да изградите слики и да ги туркате во складиштето на Docker. Дополнително, научивме како да го забрзаме склопувањето на сликата користејќи ја датотеката .dockerignore. Како резултат на тоа, нашите микроуслуги сега работат во контејнери на Docker. Овде може да имате сосема оправдано прашање за тоа зошто ни се потребни Kubernetes. Вториот дел од овој материјал ќе биде посветен на одговорот на ова прашање. Во меѓувреме, размислете за следново прашање:
Да претпоставиме дека нашата веб апликација за анализа на текст стана глобално популарна. Секоја минута до него доаѓаат милиони барања. Тоа значи дека микросервисите sa-webapp и sa-logic ќе биде под огромен товар. Како да се намалат контејнерите кои работат со микросервис?

Кубернетес туториал Дел 1: Апликации, микроуслуги и контејнери

Извор: www.habr.com

Додадете коментар