Kubernetes Dərsliyi Hissə 1: Proqramlar, Mikroservislər və Konteynerlər

Bizim istəyimizlə Habr bir mərkəz yaratdı Kubernetes və biz burada ilk nəşri yerləşdirməkdən məmnunuq. Abunə ol!

Kubernetes asandır. Niyə banklar bu sahədə işləmək üçün mənə çox pul verirlər, halbuki hər kəs bu texnologiyanı bir neçə saat ərzində mənimsəyə bilər?

Kubernetes Dərsliyi Hissə 1: Proqramlar, Mikroservislər və Konteynerlər

Kubernetes-in bu qədər tez öyrənilə biləcəyinə şübhə edirsinizsə, bunu özünüz etməyə cəhd etməyi təklif edirəm. Məhz bu materialı mənimsədikdən sonra siz Kubernetes klasterində mikroservislərə əsaslanan proqram işlədə biləcəksiniz. Mən buna zəmanət verə bilərəm, çünki burada istifadə etdiyim eyni metodologiyada müştərilərimizə Kubernetes ilə işləməyi öyrədirəm. Bu bələdçini digərlərindən nə ilə fərqləndirir? Əslində çox şey. Beləliklə, bu materialların əksəriyyəti sadə şeylərin izahı ilə başlayır - Kubernetes anlayışları və kubectl əmrinin xüsusiyyətləri. Bu məqalələrin müəllifləri hesab edirlər ki, onların oxucuları proqram inkişafı, mikroservislər və Docker konteynerləri ilə tanışdır. Biz başqa yolla gedəcəyik. Əvvəlcə kompüterdə mikroservislərə əsaslanan proqramın necə işlədilməsi barədə danışaq. Sonra hər bir mikroservis üçün konteyner şəkillərinin qurulmasına baxacağıq. Bundan sonra biz Kubernetes ilə tanış olacağıq və Kubernetes tərəfindən idarə olunan klasterdə mikroservislər əsasında tətbiqin yerləşdirilməsini təhlil edəcəyik.

Kubernetesə tədricən yanaşma ilə bu yanaşma, Kubernetes-də hər şeyin necə sadə şəkildə qurulduğunu anlamaq üçün adi bir insanın ehtiyac duyduğu baş verənləri başa düşmək dərinliyini verəcəkdir. Kubernetes, şübhəsiz ki, sadə texnologiyadır, bir şərtlə ki, onu mənimsəmək istəyənlər harada və necə istifadə olunduğunu bilsinlər.

İndi isə çox uzatmadan işə keçək və işləyəcəyimiz proqram haqqında danışaq.

Eksperimental proqram

Tətbiqimiz yalnız bir funksiyanı yerinə yetirəcək. Giriş kimi bir cümlə götürür, bundan sonra mətn təhlili vasitələrindən istifadə edərək, cümlə müəllifinin müəyyən bir obyektə emosional münasibətinin qiymətləndirilməsini əldə edərək, bu cümlənin sentiment təhlilini aparır.

Bu proqramın əsas pəncərəsi belə görünür.

Kubernetes Dərsliyi Hissə 1: Proqramlar, Mikroservislər və Konteynerlər
Sentiment Analizi Veb Tətbiqi

Texniki nöqteyi-nəzərdən proqram hər biri müəyyən tapşırıqlar toplusunu həll edən üç mikroservisdən ibarətdir:

  • SA-Frontend React statik fayllarına xidmət edən Nginx veb serveridir.
  • SA-WebApp Java-da yazılmış və frontenddən gələn sorğuları idarə edən veb proqramdır.
  • SA-Logic mətn əhval-ruhiyyəsini təhlil edən Python proqramıdır.

Mikroservislərin ayrı-ayrılıqda mövcud olmadığını qeyd etmək vacibdir. Onlar "vəzifələrin ayrılması" ideyasını həyata keçirirlər, lakin eyni zamanda bir-biri ilə qarşılıqlı əlaqədə olmalıdırlar.

Kubernetes Dərsliyi Hissə 1: Proqramlar, Mikroservislər və Konteynerlər
Tətbiqdə məlumat axını

Yuxarıdakı diaqramda siz proqramdakı məlumat axınını göstərən sistemin nömrələnmiş mərhələlərini görə bilərsiniz. Gəlin onları parçalayaq:

  1. Brauzer serverdən fayl tələb edir index.html (bu da öz növbəsində React proqram paketini yükləyir).
  2. İstifadəçi proqramla qarşılıqlı əlaqə qurur, bu, Bahara əsaslanan veb tətbiqinə zəngə səbəb olur.
  3. Veb tətbiqi mətni təhlil etmək sorğusunu Python tətbiqinə yönləndirir.
  4. Python tətbiqi mətnin əhval-ruhiyyəsini təhlil edir və sorğuya cavab olaraq nəticəni qaytarır.
  5. Spring tətbiqi React tətbiqinə cavab göndərir (bu da öz növbəsində istifadəçiyə təhlil edilmiş mətnin nəticəsini göstərir).

Bütün bu proqramlar üçün kod tapıla bilər burada. Mən sizə bu anbarı özünüzə köçürməyi tövsiyə edirəm, çünki qarşıda onunla bağlı çoxlu maraqlı təcrübələr var.

Yerli maşında mikroxidmətlərə əsaslanan proqramın işlədilməsi

Tətbiqin işləməsi üçün hər üç mikroxidməti işə salmalıyıq. Onların ən gözəli ilə başlayaq - front-end tətbiqi.

▍Yerli inkişaf üçün React-in qurulması

React proqramını işə salmaq üçün kompüterinizdə Node.js çərçivəsini və NPM-ni quraşdırmalısınız. Bütün bunları quraşdırdıqdan sonra terminaldan istifadə edərək layihə qovluğuna keçin sa-frontend və aşağıdakı əmri yerinə yetirin:

npm install

Bu əmri qovluqda yerinə yetirməklə node_modules Qeydləri faylda olan React tətbiqinin asılılıqları yüklənəcək package.json. Eyni qovluqdakı asılılıqları yüklədikdən sonra aşağıdakı əmri yerinə yetirin:

npm start

Hamısı budur. React proqramı hazırda işləyir və brauzer ünvanına keçməklə daxil olmaq olar localhost:3000. Onun kodunda nəyisə dəyişə bilərsiniz. Brauzerdə bu dəyişikliklərin təsirini dərhal görəcəksiniz. Bu, modulların sözdə "isti" dəyişdirilməsi sayəsində mümkündür. Bunun sayəsində front-end inkişafı sadə və xoş təcrübəyə çevrilir.

▍React proqramının istehsal üçün hazırlanması

React proqramından həqiqətən istifadə etmək üçün biz onu bir sıra statik fayllara çevirməli və veb serverdən istifadə edərək müştərilərə xidmət etməliyik.

React proqramını qurmaq üçün yenidən terminaldan istifadə edərək qovluğa keçin sa-frontend və aşağıdakı əmri yerinə yetirin:

npm run build

Bu, layihə qovluğunda bir kataloq yaradacaqdır build. O, React tətbiqinin işləməsi üçün lazım olan bütün statik faylları ehtiva edəcək.

▍Nginx ilə statik fayllara xidmət göstərmək

Əvvəlcə Nginx veb serverini quraşdırıb işə salmalısınız. Burada onu yükləyə və quraşdırmaq və işə salmaq üçün təlimatları tapa bilərsiniz. Sonra qovluğun məzmununu kopyalamalısınız sa-frontend/build qovluğa [your_nginx_installation_dir]/html.

Bu yanaşma ilə React tətbiqinin montajı zamanı yaradılan fayl index.html ünvanında mövcud olacaq [your_nginx_installation_dir]/html/index.html. Bu, standart olaraq Nginx serverinin ona daxil olduqda problem yaradan fayldır. Server portu dinləmək üçün konfiqurasiya edilib 80, lakin siz faylı redaktə etməklə onu istədiyiniz kimi fərdiləşdirə bilərsiniz [your_nginx_installation_dir]/conf/nginx.conf.

İndi brauzerinizi açın və gedin localhost:80. React tətbiq səhifəsini görəcəksiniz.

Kubernetes Dərsliyi Hissə 1: Proqramlar, Mikroservislər və Konteynerlər
Nginx serveri tərəfindən xidmət edilən React proqramı

İndi sahəyə bir şey daxil etsəniz Type your sentence və düyməni basın Send - heç nə olmayacaq. Ancaq konsola baxsanız, orada səhv mesajlarını görə bilərsiniz. Bu səhvlərin harada baş verdiyini dəqiq başa düşmək üçün tətbiq kodunu təhlil edək.

▍Front-end proqram kodunun təhlili

Fayl koduna baxırıq App.js, düyməni basdıqda bunu görə bilərik Send metodu çağırır analyzeSentence(). Bu metodun kodu aşağıda göstərilmişdir. Eyni zamanda, hər bir sətir üçün formanın şərhinin olmasına diqqət yetirin # Номер, kodun altında verilmiş bir izahat var. Eyni şəkildə digər kod fraqmentlərini də təhlil edəcəyik.

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 sorğusunun edildiyi URL. Bu ünvanın belə sorğuları gözləyən proqram olduğu güman edilir.

2.Sorğu orqanı ərizəyə göndərildi. Budur nümunə sorğu orqanı:

{
    sentence: "I like yogobella!"
}

3.Sorğuya cavab alındıqda, komponentin vəziyyəti yenilənir. Bu, komponentin yenidən göstərilməsinə səbəb olur. Məlumat alsaq (yəni daxil edilmiş məlumatları və hesablanmış mətn xalını ehtiva edən JSON obyekti), biz komponenti çıxaracağıq. Polarityşərtlər yerinə yetirildiyi müddətcə. Komponenti necə təsvir edirik:

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

Kod olduqca yaxşı işləyir. Hər halda, burada səhv nədir? Tətbiqin POST sorğusu göndərməyə çalışdığı ünvanda hələ bu sorğunu qəbul edə və emal edə biləcək heç bir şey olmadığını güman edirsinizsə, onda siz tamamilə haqlı olacaqsınız. Yəni ünvana gələn sorğuları emal etmək http://localhost:8080/sentiment, biz Bahara əsaslanan veb proqram işlətməliyik.

Kubernetes Dərsliyi Hissə 1: Proqramlar, Mikroservislər və Konteynerlər
POST sorğusunu qəbul edə bilən Bahar tətbiqinə ehtiyacımız var

▍Bahara əsaslanan veb tətbiqinin qurulması

Spring tətbiqini yerləşdirmək üçün sizə JDK8 və Maven və düzgün konfiqurasiya edilmiş mühit dəyişənləri lazımdır. Bütün bunları quraşdırdıqdan sonra layihəmiz üzərində işləməyə davam edə bilərsiniz.

▍Tətbiqin jar faylına yığılması

Terminaldan istifadə edərək qovluğa gedin sa-webapp və aşağıdakı əmri daxil edin:

mvn install

Bu əmri qovluqda yerinə yetirdikdən sonra sa-webapp kataloqu yaradılacaq target. Bu, fayl tərəfindən təmsil olunan jar faylında paketlənmiş Java tətbiqinin yerləşəcəyi yerdir sentiment-analysis-web-0.0.1-SNAPSHOT.jar.

▍Java Proqramının işə salınması

Qovluğa keçin target və aşağıdakı əmrlə proqramı işə salın:

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

Bu əmri yerinə yetirərkən xəta baş verəcək. Onu düzəltməyə başlamaq üçün biz yığın izləmə məlumatında istisna təfərrüatlarını təhlil edə bilərik:

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

Bizim üçün burada ən önəmlisi mənanın aydınlaşdırılmasının mümkünsüzlüyünün qeyd olunmasıdır sa.logic.api.url. Gəlin xətanın baş verdiyi kodu təhlil edək.

▍Java proqram kodu analizi

Budur, səhvin baş verdiyi kod parçası.

@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. S.-dəentimentController sahə var saLogicApiUrl. Onun dəyəri əmlak tərəfindən müəyyən edilir sa.logic.api.url.
  2. Sətir saLogicApiUrl dəyərlə əlaqələndirir /analyse/sentiment. Onlar birlikdə mətn analizini həyata keçirən mikroservisə zəng etmək üçün ünvan təşkil edirlər.

▍Əmlak dəyərinin təyin edilməsi

Baharda əmlak dəyərlərinin standart mənbəyi bir fayldır application.properties, bu ünvanda tapa bilərsiniz sa-webapp/src/main/resources. Lakin ondan istifadə əmlak dəyərlərini təyin etməyin yeganə yolu deyil. Bunu aşağıdakı əmrlə də edə bilərsiniz:

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

Bu əmlakın dəyəri Python tətbiqimizin ünvanını göstərməlidir.

Onu konfiqurasiya etməklə, biz Bahar veb tətbiqinə mətn təhlili sorğuları etmək üçün hara getməli olduğunu bildiririk.

Həyatımızı çətinləşdirməmək üçün Python tətbiqinin burada mövcud olacağına qərar verəcəyik localhost:5000 və bunu unutmamağa çalışın. Nəticədə, Spring tətbiqini işə salmaq əmri belə görünəcək:

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

Kubernetes Dərsliyi Hissə 1: Proqramlar, Mikroservislər və Konteynerlər
Sistemimizdə Python proqramı çatışmır

İndi sadəcə Python tətbiqini işə salmalıyıq və sistem gözlənildiyi kimi işləyəcək.

▍Python tətbiqinin qurulması

Python proqramını işə salmaq üçün sizdə Python 3 və Pip quraşdırılmalı və uyğun mühit dəyişənləri düzgün qurulmalıdır.

▍Asılılıqları quraşdırın

Layihə qovluğuna keçin sa-logic/sa və aşağıdakı əmrləri yerinə yetirin:

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

▍Tətbiqin işə salınması

Quraşdırılmış asılılıqlarla biz proqramı işə salmağa hazırıq:

python sentiment_analysis.py

Bu əmri yerinə yetirdikdən sonra bizə aşağıdakılar deyiləcək:

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

Bu o deməkdir ki, proqram işləyir və sorğuları gözləyir localhost:5000/

▍Kod araşdırması

İstəklərə necə cavab verdiyini başa düşmək üçün Python proqram koduna baxaq:

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. Obyektin işə salınması Flask.
  2. Ona POST sorğuları etmək üçün ünvanın təyin edilməsi.
  3. Əmlakın alınması sentence sorğu orqanından.
  4. Anonim obyektin işə salınması TextBlob və dəyəri əldə etmək polarity sorğunun mətnində daxil olan ilk təklif üçün (bizim halda bu, təhlil üçün təqdim edilən yeganə təklifdir).
  5. Məqsədində təklifin mətni və onun üçün hesablanmış göstərici olan cavabın qaytarılması polarity.
  6. Bu ünvanda mövcud olacaq Flask tətbiqinin işə salınması 0.0.0.0:5000 (formanın konstruksiyası ilə də daxil ola bilərsiniz localhost:5000).

İndi tətbiqi təşkil edən mikroservislər işləyir. Onlar bir-biri ilə qarşılıqlı əlaqə qurmağa hazırdırlar. İşin bu mərhələsində tətbiq diaqramının necə göründüyü budur.

Kubernetes Dərsliyi Hissə 1: Proqramlar, Mikroservislər və Konteynerlər
Tətbiqi təşkil edən bütün mikroservislər sağlam vəziyyətə gətirilir

İndi, davam etməzdən əvvəl, brauzerdə React tətbiqini açın və onunla bəzi cümlələri təhlil etməyə çalışın. Hər şey düzgün aparılırsa - düyməni basdıqdan sonra Send mətn qutusunun altında təhlil nəticələrini görəcəksiniz.

Növbəti bölmədə mikroservislərimizi Docker konteynerlərində necə işlətmək barədə danışacağıq. Bu, tətbiqi Kubernetes klasterində işləməyə hazırlamaq üçün lazımdır.

Docker konteynerləri

Kubernetes konteynerləşdirilmiş proqramların yerləşdirilməsi, miqyası və idarə edilməsinin avtomatlaşdırılması sistemidir. Buna "konteyner orkestratoru" da deyilir. Kubernetes konteynerlərlə işləyirsə, bu sistemdən istifadə etməzdən əvvəl ilk növbədə bu konteynerləri əldə etməliyik. Ancaq əvvəlcə konteynerlərin nə olduğundan danışaq. Nə olduğu sualına bəlkə də ən yaxşı cavabı burada tapmaq olar sənədləşdirmə Docker-ə:

Konteyner şəkli yüngül, müstəqil, icra edilə bilən bir paketdir və onun işə salınması üçün lazım olan hər şeyi ehtiva edir: proqram kodu, iş mühiti, sistem alətləri və kitabxanalar, parametrlər. Konteynerləşdirilmiş proqramlar həm Linux, həm də Windows mühitlərində istifadə oluna bilər və infrastrukturdan asılı olmayaraq həmişə eyni işləyəcək.

Bu o deməkdir ki, konteynerlər istənilən kompüterdə, o cümlədən istehsal serverlərində işlədilə bilər və istənilən mühitdə onlarda olan proqramlar eyni şəkildə işləyəcək.

Konteynerlərin xüsusiyyətlərini araşdırmaq və onları tətbiqləri işə salmağın digər üsulları ilə müqayisə etmək üçün virtual maşın və konteynerdən istifadə edərək React proqramına xidmət göstərmək nümunəsinə baxaq.

▍Virtual maşından istifadə edərək React tətbiqinin statik fayllarına xidmət göstərmək

Virtual maşınlardan istifadə edərək statik faylların saxlanmasını təşkil etməyə çalışarkən aşağıdakı çatışmazlıqlarla qarşılaşacağıq:

  1. Resurslardan səmərəsiz istifadə, çünki hər bir virtual maşın tam əməliyyat sistemidir.
  2. Platforma asılılığı. Bəzi yerli kompüterlərdə işləyənlər istehsal serverində işləməyə bilər.
  3. Virtual maşın həllinin yavaş və resurs intensiv miqyası.

Kubernetes Dərsliyi Hissə 1: Proqramlar, Mikroservislər və Konteynerlər
Virtual maşında işləyən statik fayllara xidmət göstərən Nginx veb serveri

Bənzər bir problemi həll etmək üçün konteynerlərdən istifadə edilərsə, virtual maşınlarla müqayisədə aşağıdakı güclü cəhətləri qeyd etmək olar:

  1. Resurslardan səmərəli istifadə: Docker-dən istifadə edərək əməliyyat sistemi ilə işləmək.
  2. Platformanın müstəqilliyi. Tərtibatçının öz kompüterində işlədə biləcəyi konteyner istənilən yerdə işləyəcək.
  3. Şəkil təbəqələrinin istifadəsi ilə yüngül yerləşdirmə.

Kubernetes Dərsliyi Hissə 1: Proqramlar, Mikroservislər və Konteynerlər
Konteynerdə işləyən statik fayllara xidmət edən Nginx veb serveri

Biz yalnız virtual maşınları və konteynerləri bir neçə məqamda müqayisə etdik, lakin bu, konteynerlərin güclü tərəflərini hiss etmək üçün kifayətdir. Burada Docker konteynerləri haqqında ətraflı məlumat tapa bilərsiniz.

▍React proqramı üçün konteyner təsvirinin yaradılması

Docker konteynerinin əsas tikinti bloku fayldır Dockerfile. Bu faylın əvvəlində konteynerin əsas təsviri qeyd olunur, sonra proqramın ehtiyaclarına cavab verəcək konteynerin necə yaradılacağını göstərən təlimatlar ardıcıllığı daxil edilir.

Faylla işləməyə başlamazdan əvvəl Dockerfile, React tətbiqinin fayllarını Nginx serverinə yükləmək üçün hazırlamaq üçün nə etdiyimizi xatırlayın:

  1. React proqram paketinin yaradılması (npm run build).
  2. Nginx serverinin işə salınması.
  3. Kataloqun məzmununun kopyalanması build layihə qovluğundan sa-frontend server qovluğuna nginx/html.

Aşağıda bir konteyner yaratmaq və yerli kompüterdə yerinə yetirilən yuxarıdakı hərəkətlər arasındakı paralelləri görə bilərsiniz.

▍SA-Frontend Tətbiqi üçün Dockerfile hazırlanması

Daxil edilməli olan təlimatlar Dockerfile tətbiqi üçün SA-Frontend, yalnız iki əmrdən ibarətdir. Fakt budur ki, Nginx inkişaf komandası əsas hazırladı şəkil imicimizi yaratmaq üçün istifadə edəcəyimiz Nginx üçün. Burada təsvir etməmiz lazım olan iki addımdır:

  1. Nginx şəklini görüntünün əsasına çevirməlisiniz.
  2. Qovluq məzmunu sa-frontend/build şəkil qovluğuna köçürmək lazımdır nginx/html.

Bu təsvirdən fayla keçsək Dockerfile, onda belə görünəcək:

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

Gördüyünüz kimi, burada hər şey çox sadədir, halbuki faylın məzmunu hətta olduqca oxunaqlı və başa düşülən olur. Bu fayl sistemə şəkil çəkməyi əmr edir nginx artıq mövcud olan hər şeylə və kataloqun məzmununu kopyalayın build kataloqa nginx/html.

Burada faylları qovluqdan haradan kopyalayacağımı necə bildiyimlə bağlı sualınız ola bilər build, yəni yol haradan gəldi /usr/share/nginx/html. Əslində burada da mürəkkəb bir şey yoxdur. Fakt budur ki, müvafiq məlumatları burada tapa bilərsiniz təsviri şəkil.

▍Şəklin yığılması və depoya yüklənməsi

Tamamlanmış bir şəkil ilə işləməzdən əvvəl onu şəkil deposuna təqdim etməliyik. Bunun üçün biz pulsuz bulud əsaslı şəkil hostinq platforması Docker Hub-dan istifadə edəcəyik. İşin bu mərhələsində aşağıdakıları etməlisiniz:

  1. Quraşdırın yükvuran.
  2. Docker Hub saytında qeydiyyatdan keçin.
  3. Terminalda aşağıdakı əmri işlətməklə hesabınıza daxil olun:
    docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"

İndi terminaldan istifadə edərək qovluğa getməlisiniz sa-frontend və orada aşağıdakı əmri işlədin:

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

Oxşar əmrlərdə burada və aşağıda $DOCKER_USER_ID Docker Hub-da istifadəçi adınızla əvəz edilməlidir. Məsələn, komandanın bu hissəsi belə görünə bilər: rinormaloku/sentiment-analysis-frontend.

Bu halda, bu əmri ondan çıxarmaqla qısaltmaq olar -f Dockerfile, çünki bu əmri yerinə yetirdiyimiz qovluqda artıq bu fayl var.

Bitmiş şəkli depoya göndərmək üçün bizə aşağıdakı əmr lazımdır:

docker push $DOCKER_USER_ID/sentiment-analysis-frontend

Onu tamamladıqdan sonra, şəklin bulud yaddaşına uğurla köçürüldüyünü görmək üçün Docker Hub-da depolar siyahısını yoxlayın.

▍Konteynerin işə salınması

İndi hər kəs kimi tanınan şəkli yükləyə və işlədə bilər $DOCKER_USER_ID/sentiment-analysis-frontend. Bunu etmək üçün aşağıdakı əmrlər ardıcıllığını yerinə yetirməlisiniz:

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

İndi konteyner işləyir və biz lazım olan digər şəkilləri yaradaraq işə davam edə bilərik. Ancaq davam etməzdən əvvəl dizaynı anlayaq 80:80, təsviri işə salmaq əmrində tapılan və çaşqın görünə bilər.

  • Birinci nömrə 80 hostun (yəni yerli kompüterin) port nömrəsidir.
  • İkinci nömrə 80 sorğunun yönləndirilməli olduğu konteynerin limanıdır.

Aşağıdakı təsviri nəzərdən keçirək.

Kubernetes Dərsliyi Hissə 1: Proqramlar, Mikroservislər və Konteynerlər
Port Yönləndirmə

Sistem portdan sorğuları yönləndirir <hostPort> limana <containerPort>. Yəni porta daxil olmaq 80 kompüter porta yönləndirilir 80 konteyner.

Limandan bəri 80 yerli kompüterdə açılmışsa, proqrama bu kompüterdən daxil ola bilərsiniz localhost:80. Sisteminiz Docker-i dəstəkləmirsə, siz proqramı ünvanı kimi görünən Docker virtual maşınında işlədə bilərsiniz. <docker-machine ip>:80. Docker virtual maşınının IP ünvanını öyrənmək üçün əmrdən istifadə edə bilərsiniz docker-machine ip.

Bu nöqtədə, ön proqram konteyneri uğurla işə salındıqdan sonra onun səhifəsini brauzerdə aça bilməlisiniz.

▍.dockerignore faylı

Tətbiq şəklinin qurulması SA-Frontend, bu prosesin son dərəcə yavaş olduğunu fərq edə bilərik. Bunun səbəbi, təsvirin qurulması kontekstinin Docker demonuna göndərilməsidir. Quraşdırma kontekstini təmsil edən kataloq əmrin son arqumenti kimi verilir docker build. Bizim vəziyyətimizdə bu əmrin sonunda bir nöqtə var. Bu, montaj kontekstinə aşağıdakı strukturun daxil edilməsi ilə nəticələnir:

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

Ancaq burada mövcud olan bütün qovluqlardan bizə yalnız bir qovluq lazımdır build. Başqa bir şey yükləmək vaxt itkisidir. Docker-ə hansı qovluqlara məhəl qoymamağı söyləməklə, quruluşu sürətləndirə bilərsiniz. Bunu etmək üçün bizə bir fayl lazımdır .dockerignore. Siz faylla tanışsınızsa .gitignore, bu faylın strukturu yəqin ki, tanış görünəcək. Şəkil qurma sisteminin görməməzlikdən gələ biləcəyi qovluqları sadalayır. Bizim vəziyyətimizdə bu faylın məzmunu belə görünür:

node_modules
src
public

Файл .dockerignore fayl ilə eyni qovluqda olmalıdır Dockerfile. İndi şəklin yığılması bir neçə saniyə çəkəcək.

İndi Java proqramı üçün təsvirlə məşğul olaq.

▍Java proqramı üçün konteyner təsvirinin yaradılması

Siz nə bilirsiniz və konteyner şəkilləri yaratmaq üçün lazım olan hər şeyi artıq öyrənmisiniz. Ona görə də bu bölmə çox qısa olacaq.

Faylı açın Dockerfile, layihə qovluğunda yerləşir sa-webapp. Bu faylın mətnini oxusanız, onda siz açar sözlərlə başlayan yalnız iki yeni konstruksiyaya rast gələcəksiniz ENV и EXPOSE:

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

Açar söz ENV Docker konteynerlərində mühit dəyişənlərini elan etməyə imkan verir. Xüsusilə, bizim vəziyyətimizdə mətn təhlilini həyata keçirən tətbiqin API-yə daxil olmaq üçün URL təyin etməyə imkan verir.

Açar söz EXPOSE Dockerə port açmağı söyləməyə imkan verir. Proqramla işləyərkən bu portdan istifadə edəcəyik. Burada bunu görə bilərsiniz Dockerfile tətbiqi üçün SA-Frontend belə bir əmr yoxdur. Bu, yalnız sənədləşdirmə məqsədləri üçündür, başqa sözlə, bu konstruksiya oxucu üçündür Dockerfile.

Şəklin qurulması və depoya itələnməsi əvvəlki nümunəyə bənzəyir. Qabiliyyətlərinizə hələ çox əmin deyilsinizsə, müvafiq əmrləri faylda tapa bilərsiniz README.md qovluqda sa-webapp.

▍Python tətbiqi üçün konteyner təsvirinin yaradılması

Faylın məzmununa nəzər salsanız Dockerfile qovluqda sa-logicorada yeni heç nə tapa bilməzsən. Şəklin qurulması və onu depoya itələmək əmrləri də sizə tanış olmalıdır, lakin digər tətbiqlərimizdə olduğu kimi, onları faylda tapmaq olar. README.md qovluqda sa-logic.

▍Konteynerləşdirilmiş proqramların sınaqdan keçirilməsi

Test etmədiyiniz bir şeyə etibar edə bilərsinizmi? mən də bacarmıram. Gəlin qablarımızı sınaqdan keçirək.

  1. Tətbiq konteynerinə başlayaq sa-logic və onu portda dinləmək üçün konfiqurasiya edin 5050:
    docker run -d -p 5050:5000 $DOCKER_USER_ID/sentiment-analysis-logic
  2. Tətbiq konteynerinə başlayaq sa-webapp və onu portda dinləmək üçün konfiqurasiya edin 8080. Bundan əlavə, mühit dəyişənini yenidən təyin etməklə Python tətbiqinin Java proqramından gələn sorğuları dinləyəcəyi portu təyin etməliyik. 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

Konteynerin və ya Docker VM-nin IP ünvanını öyrənmək üçün fayla müraciət edin README.

Tətbiq konteynerinə başlayaq sa-frontend:

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

İndi hər şey brauzerdə ünvana getməyə hazırdır localhost:80 və proqramı sınayın.

Nəzərə alın ki, portu dəyişdirsəniz sa-webapp, və ya Docker VM işlədirsinizsə, faylı redaktə etməlisiniz App.js qovluqdan sa-frontendmetodda IP ünvanını və ya port nömrəsini dəyişdirməklə analyzeSentence()köhnəlmiş məlumatların əvəzinə cari məlumatları əvəz etməklə. Bundan sonra, təsviri yenidən yığmaq və istifadə etmək lazımdır.

Tətbiq diaqramımız indi belə görünür.

Kubernetes Dərsliyi Hissə 1: Proqramlar, Mikroservislər və Konteynerlər
Mikroservislər konteynerlərdə işləyir

Xülasə: niyə bizə Kubernetes klasteri lazımdır?

Biz sadəcə olaraq faylları nəzərdən keçirdik Dockerfile, şəkilləri necə qurmaq və onları Docker repozitoriyasına köçürmək haqqında danışdı. Bundan əlavə, fayldan istifadə edərək şəkillərin yığılmasını sürətləndirməyi öyrəndik .dockerignore. Nəticədə, mikroservislərimiz indi Docker konteynerlərində işləyir. Burada Kubernetesə nə üçün ehtiyacımız olduğuna dair tamamilə əsaslandırılmış bir sualınız ola bilər. Bu sualın cavabı bu materialın ikinci hissəsinə həsr olunacaq. Bu arada, aşağıdakı sualı nəzərdən keçirin:
Fərz edək ki, bizim mətn təhlili veb proqramımız bütün dünyada məşhurlaşıb. Hər dəqiqə ona milyonlarla müraciət gəlir. Bu o deməkdir ki, mikroservislər sa-webapp и sa-logic böyük stress altında olacaq. Mikroservisləri işlədən konteynerləri necə ölçmək olar?

Kubernetes Dərsliyi Hissə 1: Proqramlar, Mikroservislər və Konteynerlər

Mənbə: www.habr.com

Добавить комментарий