Kubernetes Tutorial Osa 1: Sovellukset, mikropalvelut ja säiliöt

Pyynnöstämme Habr loi keskuksen Kubernetes ja meillä on ilo julkaista ensimmäinen julkaisu siihen. Tilaa!

Kubernetes on helppoa. Miksi pankit maksavat minulle paljon rahaa työskennelläkseni tällä alalla, vaikka kuka tahansa voi hallita tämän tekniikan muutamassa tunnissa?

Kubernetes Tutorial Osa 1: Sovellukset, mikropalvelut ja säiliöt

Jos epäilet, että Kubernetes voidaan oppia niin nopeasti, suosittelen, että yrität tehdä sen itse. Nimittäin tämän materiaalin hallittuasi pystyt ajamaan mikropalveluihin perustuvan sovelluksen Kubernetes-klusterissa. Voin taata tämän, koska samalla menetelmällä, jota käytän täällä, opetan asiakkaillemme työskentelemään Kubernetesin kanssa. Mikä tekee tästä oppaasta erilaisen kuin muut? Itse asiassa paljon asioita. Joten suurin osa näistä materiaaleista alkaa selittämällä yksinkertaisia ​​asioita - Kubernetesin käsitteitä ja kubectl-komennon ominaisuuksia. Näiden artikkeleiden kirjoittajat olettavat, että heidän lukijansa tuntee sovelluskehityksen, mikropalvelut ja Docker-säiliöt. Menemme toiseen suuntaan. Puhutaanpa ensin mikropalveluihin perustuvan sovelluksen suorittamisesta tietokoneessa. Sitten tarkastellaan kunkin mikropalvelun konttikuvien rakentamista. Ja sen jälkeen tutustutaan Kubernetesiin ja analysoidaan mikropalveluihin perustuvan sovelluksen käyttöönottoa Kubernetesin hallinnoimassa klusterissa.

Tämä lähestymistapa, jossa on asteittainen lähestymistapa Kubernetesiin, antaa syventävän ymmärryksen siitä, mitä tapahtuu, mitä tavallinen ihminen tarvitsee ymmärtääkseen, kuinka yksinkertaisesti kaikki on järjestetty Kubernetesissa. Kubernetes on varmasti yksinkertainen tekniikka, kunhan se, joka haluaa hallita, tietää missä ja miten sitä käytetään.

Nyt, ilman pitkiä puheita, ryhdytään työhön ja puhutaan sovelluksesta, jonka kanssa työskentelemme.

Kokeellinen sovellus

Sovelluksemme suorittaa vain yhden toiminnon. Se ottaa syötteenä yhden lauseen, jonka jälkeen se suorittaa tekstianalyysityökalujen avulla tämän lauseen tunneanalyysin saadakseen arvion lauseen kirjoittajan emotionaalisesta asenteesta tiettyyn kohteeseen.

Tämän sovelluksen pääikkuna näyttää tältä.

Kubernetes Tutorial Osa 1: Sovellukset, mikropalvelut ja säiliöt
Sentimenttianalyysin verkkosovellus

Tekniseltä kannalta katsottuna sovellus koostuu kolmesta mikropalvelusta, joista jokainen ratkaisee tietyn joukon tehtäviä:

  • SA-Frontend on Nginx-verkkopalvelin, joka palvelee staattisia React-tiedostoja.
  • SA-WebApp on Java-kielellä kirjoitettu verkkosovellus, joka käsittelee käyttöliittymän pyyntöjä.
  • SA-Logic on Python-sovellus, joka suorittaa tekstin tunteiden analysointia.

On tärkeää huomata, että mikropalvelut eivät ole olemassa erillään. He toteuttavat ajatusta "tehtävien erottamisesta", mutta samalla heidän on oltava vuorovaikutuksessa toistensa kanssa.

Kubernetes Tutorial Osa 1: Sovellukset, mikropalvelut ja säiliöt
Data virtaa sovelluksessa

Yllä olevasta kaaviosta näet järjestelmän numeroidut vaiheet, jotka kuvaavat sovelluksen tietovirtoja. Puretaan ne:

  1. Selain pyytää tiedostoa palvelimelta index.html (joka puolestaan ​​lataa React-sovelluspaketin).
  2. Käyttäjä on vuorovaikutuksessa sovelluksen kanssa, mikä aiheuttaa kutsun Spring-pohjaiseen verkkosovellukseen.
  3. Verkkosovellus välittää tekstin jäsennyspyynnön Python-sovellukselle.
  4. Python-sovellus analysoi tekstin tunteen ja palauttaa tuloksen vastauksena pyyntöön.
  5. Spring-sovellus lähettää vastauksen React-sovellukselle (joka puolestaan ​​näyttää käyttäjälle jäsennetyn tekstin tuloksen).

Kaikkien näiden sovellusten koodi löytyy täällä. Suosittelen, että kopioit tämän arkiston itsellesi heti, sillä meillä on edessämme monia mielenkiintoisia kokeiluja sen kanssa.

Mikropalveluihin perustuvan sovelluksen suorittaminen paikallisessa koneessa

Jotta sovellus toimisi, meidän on käynnistettävä kaikki kolme mikropalvelua. Aloitetaan niistä kauneimmalla - käyttöliittymäsovelluksella.

▍Reactin perustaminen paikallista kehitystä varten

React-sovelluksen suorittamiseksi sinun on asennettava Node.js-kehys ja NPM tietokoneellesi. Kun olet asentanut kaiken tämän, siirry terminaalilla projektikansioon sa-frontend ja suorita seuraava komento:

npm install

Suorittamalla tämän komennon kansiossa node_modules latautuu React-sovelluksen riippuvuudet, joiden tietueet ovat tiedostossa package.json. Kun olet ladannut riippuvuudet samassa kansiossa, suorita seuraava komento:

npm start

Siinä kaikki. React-sovellus on nyt käynnissä ja siihen pääsee navigoimalla selaimen osoitteeseen localhost:3000. Voit muuttaa jotain hänen koodissaan. Näet heti näiden muutosten vaikutuksen selaimessa. Tämä on mahdollista moduulien niin kutsutun "kuuman" vaihdon ansiosta. Tämän ansiosta etupään kehitys muuttuu yksinkertaiseksi ja nautinnolliseksi kokemukseksi.

▍React-sovelluksen valmistelu tuotantoa varten

React-sovelluksen todellista käyttöä varten meidän on muunnettava se staattisiksi tiedostoiksi ja toimitettava ne asiakkaille verkkopalvelimen avulla.

Luodaksesi React-sovelluksen, siirry kansioon uudelleen päätelaitteen avulla sa-frontend ja suorita seuraava komento:

npm run build

Tämä luo hakemiston projektikansioon build. Se sisältää kaikki staattiset tiedostot, joita React-sovellus tarvitsee toimiakseen.

▍Staattisten tiedostojen palveleminen Nginxillä

Ensin sinun on asennettava ja suoritettava Nginx-verkkopalvelin. Täällä voit ladata sen ja löytää ohjeet sen asentamiseen ja käyttöön. Sitten sinun on kopioitava kansion sisältö sa-frontend/build kansioon [your_nginx_installation_dir]/html.

Tällä lähestymistavalla React-sovelluksen kokoonpanon aikana luotu tiedosto index.html on saatavilla osoitteessa [your_nginx_installation_dir]/html/index.html. Tämä on tiedosto, jonka Nginx-palvelin antaa oletusarvoisesti käyttäessään sitä. Palvelin on määritetty kuuntelemaan porttia 80, mutta voit muokata sitä haluamallasi tavalla muokkaamalla tiedostoa [your_nginx_installation_dir]/conf/nginx.conf.

Avaa nyt selain ja siirry kohtaan localhost:80. Näet React-sovellussivun.

Kubernetes Tutorial Osa 1: Sovellukset, mikropalvelut ja säiliöt
Nginx-palvelimen tarjoama React-sovellus

Jos nyt syötät jotain kenttään Type your sentence ja paina painiketta Send - mitään ei tule tapahtumaan. Mutta jos katsot konsolia, näet siellä virheilmoituksia. Ymmärtääksemme tarkalleen, missä nämä virheet tapahtuvat, analysoidaan sovelluskoodi.

▍Etuliittymäsovelluksen koodin analyysi

Katsotaan tiedoston koodia App.js, näemme sen napsauttamalla painiketta Send kutsuu menetelmää analyzeSentence(). Tämän menetelmän koodi on esitetty alla. Kiinnitä samalla huomiota siihen, että jokaiselle riville, johon on lomakkeen kommentti # Номер, koodin alla on selitys. Samalla tavalla jäsennämme muita koodinpätkiä.

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-osoite, johon POST-pyyntö tehdään. Tämän osoitteen oletetaan olevan sovellus, joka odottaa tällaisia ​​pyyntöjä.

2.Hakemukseen lähetetty pyyntöelin. Tässä on esimerkkipyynnön runko:

{
    sentence: "I like yogobella!"
}

3.Kun vastaus pyyntöön vastaanotetaan, komponentin tila päivitetään. Tämä saa komponentin hahmontamaan uudelleen. Jos saamme dataa (eli JSON-objektin, joka sisältää syötetyt tiedot ja lasketun tekstipisteen), tulostamme komponentin Polarityniin kauan kuin ehdot täyttyvät. Näin kuvailemme komponenttia:

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

Koodi näyttää toimivan varsin hyvin. Mikä tässä muuten on vialla? Jos oletat, että osoitteessa, johon sovellus yrittää lähettää POST-pyynnön, ei ole vielä mitään, joka voi hyväksyä ja käsitellä tämän pyynnön, olet täysin oikeassa. Nimittäin osoitteeseen tulevien pyyntöjen käsittelyyn http://localhost:8080/sentiment, meidän on suoritettava kevääseen perustuva verkkosovellus.

Kubernetes Tutorial Osa 1: Sovellukset, mikropalvelut ja säiliöt
Tarvitsemme keväthakemuksen, joka voi hyväksyä POST-pyynnön

▍Kevääseen perustuvan verkkosovelluksen määrittäminen

Spring-sovelluksen käyttöönottoon tarvitaan JDK8 ja Maven sekä oikein konfiguroidut ympäristömuuttujat. Kun olet asentanut tämän kaiken, voit jatkaa projektiamme.

▍ Sovelluksen pakkaaminen jar-tiedostoon

Navigoi kansioon päätelaitteen avulla sa-webapp ja kirjoita seuraava komento:

mvn install

Suoritettuasi tämän komennon kansiossa sa-webapp hakemisto luodaan target. Tämä on paikka, jossa Java-sovellus sijaitsee, pakattuna jar-tiedostoon, jota tiedosto edustaa sentiment-analysis-web-0.0.1-SNAPSHOT.jar.

▍Java-sovelluksen käynnistäminen

Siirry kansioon target ja suorita sovellus seuraavalla komennolla:

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

Tätä komentoa suoritettaessa tapahtuu virhe. Aloittaaksemme sen korjaamisen, voimme jäsentää poikkeuksen tiedot pinon jäljitystiedoissa:

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

Meille tärkeintä tässä on maininta merkityksen selkeyttämisen mahdottomuudesta sa.logic.api.url. Analysoidaan koodia, jossa virhe tapahtuu.

▍Java-sovelluskoodianalyysi

Tässä on koodinpätkä, jossa virhe tapahtuu.

@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. Kirjassa SentimentController siellä on kenttä saLogicApiUrl. Sen arvon määrää omaisuus sa.logic.api.url.
  2. Linja saLogicApiUrl ketjuttaa arvoa /analyse/sentiment. Yhdessä ne muodostavat osoitteen, jolla voidaan soittaa tekstianalyysiä tekevään mikropalveluun.

▍Ominaisuuden arvon asettaminen

Keväällä ominaisuusarvojen oletuslähde on tiedosto application.properties, joka löytyy osoitteesta sa-webapp/src/main/resources. Mutta sen käyttö ei ole ainoa tapa määrittää ominaisuusarvoja. Voit tehdä tämän myös seuraavalla komennolla:

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

Tämän ominaisuuden arvon tulee osoittaa Python-sovelluksemme osoitteeseen.

Määrittämällä sen kerromme Spring-verkkosovellukselle, minne sen on mentävä suorittaakseen tekstin jäsennyspyyntöjä.

Jotta emme vaikeuttaisi elämäämme, päätämme, että Python-sovellus on saatavilla osoitteessa localhost:5000 ja yritä olla unohtamatta sitä. Tämän seurauksena komento Spring-sovelluksen käynnistämiseksi näyttää tältä:

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

Kubernetes Tutorial Osa 1: Sovellukset, mikropalvelut ja säiliöt
Järjestelmästämme puuttuu Python-sovellus

Nyt meidän on vain suoritettava Python-sovellus ja järjestelmä toimii odotetusti.

▍Python-sovelluksen määrittäminen

Python-sovelluksen suorittaminen edellyttää, että Python 3 ja Pip ovat asennettuina ja asianmukaiset ympäristömuuttujat on asetettu oikein.

▍Asenna riippuvuudet

Siirry projektikansioon sa-logic/sa ja suorita seuraavat komennot:

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

▍ Sovelluksen käynnistys

Kun riippuvuudet on asennettu, olemme valmiita suorittamaan sovelluksen:

python sentiment_analysis.py

Tämän komennon suorittamisen jälkeen meille kerrotaan seuraavaa:

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

Tämä tarkoittaa, että sovellus on käynnissä ja odottaa pyyntöjä osoitteessa localhost:5000/

▍Kooditutkimus

Tarkastellaan Python-sovelluskoodia ymmärtääksemme, kuinka se vastaa pyyntöihin:

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. Objektin alustus Flask.
  2. Osoitteen määrittäminen POST-pyyntöjen lähettämistä varten.
  3. Omaisuuden hakeminen sentence pyynnön esittäneeltä elimeltä.
  4. Nimettömän objektin alustus TextBlob ja saada arvo polarity ensimmäiselle pyynnön tekstiosassa vastaanotetulle ehdotukselle (meidän tapauksessamme tämä on ainoa analysoitavaksi jätetty ehdotus).
  5. Palautetaan vastaus, jonka runko sisältää tarjouksen tekstin ja sille lasketun indikaattorin polarity.
  6. Flask-sovelluksen käynnistäminen, joka on saatavilla osoitteessa 0.0.0.0:5000 (pääset siihen myös käyttämällä lomakkeen rakennetta localhost:5000).

Nyt sovelluksen muodostavat mikropalvelut ovat käynnissä. Ne on asetettu olemaan vuorovaikutuksessa toistensa kanssa. Tältä sovelluskaavio näyttää tässä työvaiheessa.

Kubernetes Tutorial Osa 1: Sovellukset, mikropalvelut ja säiliöt
Kaikki sovelluksen muodostavat mikropalvelut saatetaan terveeseen tilaan

Ennen kuin jatkamme, avaa React-sovellus selaimessa ja yritä jäsentää lausetta sen avulla. Jos kaikki on tehty oikein - painikkeen painamisen jälkeen Send näet analyysitulokset tekstiruudun alla.

Seuraavassa osiossa puhumme mikropalveluidemme ajamisesta Docker-säiliöissä. Tämä on tarpeen sovelluksen valmistelemiseksi toimimaan Kubernetes-klusterissa.

Docker-kontit

Kubernetes on järjestelmä konttisovellusten käyttöönoton, skaalauksen ja hallinnan automatisointiin. Sitä kutsutaan myös "konttiorkesteriksi". Jos Kubernetes toimii säiliöiden kanssa, meidän on ensin hankittava nämä kontit ennen tämän järjestelmän käyttöä. Mutta ensin puhutaan siitä, mitä säiliöt ovat. Ehkä paras vastaus kysymykseen, mitä se on, löytyy dokumentointi Dockeriin:

Säilökuva on kevyt, itsenäinen, suoritettava paketti, joka sisältää sovelluksen, joka sisältää kaiken sen suorittamiseen tarvittavan: sovelluskoodin, ajonaikaisen ympäristön, järjestelmätyökalut ja kirjastot, asetukset. Säilöttyjä ohjelmia voidaan käyttää sekä Linux- että Windows-ympäristöissä ja ne toimivat aina samalla tavalla infrastruktuurista riippumatta.

Tämä tarkoittaa, että säiliöitä voidaan ajaa millä tahansa tietokoneella, myös tuotantopalvelimilla, ja missä tahansa ympäristössä niiden sisällä olevat sovellukset toimivat samalla tavalla.

Tutustuaksesi säilöjen ominaisuuksiin ja verrataksesi niitä muihin sovellusten ajamiseen, katsotaanpa esimerkkiä React-sovelluksen palvelemisesta virtuaalikoneen ja säilön avulla.

▍React-sovelluksen staattisten tiedostojen palveleminen virtuaalikoneen avulla

Kun yritetään järjestää staattisten tiedostojen ylläpito virtuaalikoneiden avulla, kohtaamme seuraavat haitat:

  1. Resurssien tehoton käyttö, koska jokainen virtuaalikone on täydellinen käyttöjärjestelmä.
  2. Alustariippuvuus. Se, mikä toimii joissakin paikallisissa tietokoneissa, ei välttämättä toimi tuotantopalvelimella.
  3. Virtuaalikoneratkaisun hidas ja resurssiintensiivinen skaalaus.

Kubernetes Tutorial Osa 1: Sovellukset, mikropalvelut ja säiliöt
Nginx-verkkopalvelin, joka palvelee staattisia tiedostoja virtuaalikoneessa

Jos säiliöitä käytetään samanlaisen ongelman ratkaisemiseen, virtuaalikoneisiin verrattuna voidaan havaita seuraavat vahvuudet:

  1. Tehokas resurssien käyttö: työskentele käyttöjärjestelmän kanssa Dockerin avulla.
  2. Alustan riippumattomuus. Säilö, jota kehittäjä voi käyttää omalla tietokoneella, toimii missä tahansa.
  3. Kevyt käyttöönotto kuvakerrosten avulla.

Kubernetes Tutorial Osa 1: Sovellukset, mikropalvelut ja säiliöt
Nginx-verkkopalvelin, joka palvelee staattisia tiedostoja, jotka ovat käynnissä säilössä

Olemme vertailleet virtuaalikoneita ja säiliöitä vain muutamassa kohdassa, mutta sekin riittää saamaan käsityksen konttien vahvuuksista. Täällä Löydät lisätietoja Docker-konteista.

▍Säilökuvan rakentaminen React-sovellukselle

Docker-säilön perusrakennuspalikka on tiedosto Dockerfile. Tämän tiedoston alkuun tallennetaan säilön peruskuva, jonka jälkeen mukana on ohjesarja, joka kertoo kuinka luodaan sovelluksen tarpeita vastaava säilö.

Ennen kuin alamme työskennellä tiedoston kanssa Dockerfile, muista mitä teimme valmistellaksemme React-sovelluksen tiedostot ladattavaksi Nginx-palvelimelle:

  1. React-sovelluspaketin rakentaminen (npm run build).
  2. Nginx-palvelimen käynnistäminen.
  3. Hakemiston sisällön kopioiminen build projektikansiosta sa-frontend palvelinkansioon nginx/html.

Alla näet yhtäläisyydet säilön luomisen ja yllä olevien paikallisella tietokoneella suoritettujen toimien välillä.

▍ Valmistellaan Docker-tiedosto SA-Frontend-sovellukselle

Mukana tulevat ohjeet Dockerfile soveltamista varten SA-Frontend, koostuu vain kahdesta komennosta. Tosiasia on, että Nginx-kehitystiimi on valmistellut perustiedot kuva Nginxille, jota käytämme imagomme rakentamiseen. Tässä on kaksi vaihetta, jotka meidän on kuvattava:

  1. Sinun täytyy tehdä Nginx-kuvasta kuvan perusta.
  2. Kansion sisältö sa-frontend/build täytyy kopioida kuvakansioon nginx/html.

Jos siirrymme tästä kuvauksesta tiedostoon Dockerfile, niin se näyttää tältä:

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

Kuten näet, kaikki täällä on hyvin yksinkertaista, kun taas tiedoston sisältö osoittautuu jopa melko luettavaksi ja ymmärrettäväksi. Tämä tiedosto käskee järjestelmän ottamaan kuvan nginx kaikella, mitä sillä jo on, ja kopioi hakemiston sisältö build hakemistoon nginx/html.

Täällä sinulla voi olla kysymys siitä, kuinka tiedän, mihin tarkalleen kopioin tiedostot kansiosta buildeli mistä polku tuli /usr/share/nginx/html. Itse asiassa tässäkään ei ole mitään monimutkaista. Tosiasia on, että asiaankuuluvat tiedot löytyvät osoitteesta kuvaus kuva.

▍Kuvan kokoaminen ja lataaminen arkistoon

Ennen kuin voimme työskennellä valmiin kuvan kanssa, meidän on lähetettävä se kuvavarastoon. Käytämme tähän ilmaista pilvipohjaista kuvanhallintaalustaa Docker Hub. Tässä työvaiheessa sinun on tehtävä seuraavat:

  1. perustaa Satamatyöläinen.
  2. Rekisteröidy Docker Hub -sivustolla.
  3. Kirjaudu tilillesi suorittamalla seuraava komento päätteessä:
    docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"

Nyt sinun on siirryttävä hakemistoon päätelaitteen avulla sa-frontend ja suorita siellä seuraava komento:

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

Tässä ja alla samanlaisissa komennoissa $DOCKER_USER_ID tulee korvata käyttäjänimelläsi Docker Hubissa. Esimerkiksi tämä komennon osa voi näyttää tältä: rinormaloku/sentiment-analysis-frontend.

Tässä tapauksessa tätä komentoa voidaan lyhentää poistamalla siitä -f Dockerfile, koska kansiossa, jossa suoritamme tämän komennon, on jo tämä tiedosto.

Jotta voimme lähettää valmiin kuvan arkistoon, tarvitsemme seuraavan komennon:

docker push $DOCKER_USER_ID/sentiment-analysis-frontend

Kun se on valmis, tarkista Docker Hubin arkistoluettelosi nähdäksesi, onko kuva onnistuneesti siirretty pilvitallennustilaan.

▍ Säiliön käynnistäminen

Nyt kuka tahansa voi ladata ja käyttää nimellä tunnetun kuvan $DOCKER_USER_ID/sentiment-analysis-frontend. Jotta voit tehdä tämän, sinun on suoritettava seuraava komentosarja:

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

Nyt kontti on käynnissä, ja voimme jatkaa työtä luomalla muita tarvitsemiamme kuvia. Mutta ennen kuin jatkamme, ymmärrämme suunnittelun 80:80, joka löytyy kuvan suorittamiskomennosta ja saattaa vaikuttaa hämmentävältä.

  • Ensimmäinen numero 80 on isännän (eli paikallisen tietokoneen) porttinumero.
  • Toinen numero 80 on kontin satama, johon pyyntö tulee ohjata.

Harkitse seuraavaa kuvaa.

Kubernetes Tutorial Osa 1: Sovellukset, mikropalvelut ja säiliöt
Portin uudelleenohjaus

Järjestelmä välittää pyynnöt portista <hostPort> satamaan <containerPort>. Eli pääsy satamaan 80 tietokone ohjataan porttiin 80 kontti.

Satamasta lähtien 80 avattu paikallisella tietokoneella, voit käyttää sovellusta tältä tietokoneelta osoitteessa localhost:80. Jos järjestelmäsi ei tue Dockeria, voit ajaa sovelluksen Docker-virtuaalikoneessa, jonka osoite näyttää tältä <docker-machine ip>:80. Voit selvittää Docker-virtuaalikoneen IP-osoitteen käyttämällä komentoa docker-machine ip.

Tässä vaiheessa, kun käyttöliittymän sovellussäilö on käynnistetty onnistuneesti, sinun pitäisi pystyä avaamaan sen sivu selaimessa.

▍.dockerignore-tiedosto

Sovelluskuvan rakentaminen SA-Frontend, voimme huomata, että tämä prosessi on erittäin hidas. Tämä johtuu siitä, että kuvan koontikonteksti on lähetettävä Docker-daemonille. Koontikontekstia edustava hakemisto annetaan komennon viimeisenä argumenttina docker build. Meidän tapauksessamme tämän komennon lopussa on piste. Tämä johtaa seuraavan rakenteen sisällyttämiseen kokoonpanokontekstiin:

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

Mutta kaikista täällä olevista kansioista tarvitsemme vain kansion build. Kaiken muun lataaminen on ajanhukkaa. Voit nopeuttaa rakentamista kertomalla Dockerille, mitkä hakemistot jätetään huomiotta. Tätä varten tarvitsemme tiedoston .dockerignore. Sinä, jos olet perehtynyt tiedostoon .gitignore, tämän tiedoston rakenne näyttää todennäköisesti tutulta. Se luettelee hakemistoja, jotka kuvanrakennusjärjestelmä voi jättää huomiotta. Meidän tapauksessamme tämän tiedoston sisältö näyttää tältä:

node_modules
src
public

tiedosto .dockerignore on oltava samassa kansiossa kuin tiedosto Dockerfile. Nyt kuvan kokoaminen kestää muutaman sekunnin.

Käsitellään nyt Java-sovelluksen kuvaa.

▍Säilökuvan rakentaminen Java-sovellukselle

Tiedät mitä, ja olet jo oppinut kaiken, mitä tarvitset säilökuvien luomiseen. Tästä syystä tämä osa tulee olemaan hyvin lyhyt.

Avaa tiedosto Dockerfile, joka sijaitsee projektikansiossa sa-webapp. Jos luet tämän tiedoston tekstin, kohtaat siinä vain kaksi uutta rakennetta, jotka alkavat avainsanoilla ENV и EXPOSE:

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

Avainsana ENV mahdollistaa ympäristömuuttujien ilmoittamisen Docker-säiliöiden sisällä. Erityisesti meidän tapauksessamme sen avulla voit asettaa URL-osoitteen, jolla pääset tekstianalyysiä suorittavan sovelluksen sovellusliittymään.

Avainsana EXPOSE antaa sinun käskeä Dockeria avaamaan portin. Aiomme käyttää tätä porttia työskennellessämme sovelluksen kanssa. Tästä näet sen Dockerfile soveltamista varten SA-Frontend sellaista käskyä ei ole. Tämä on vain dokumentointia varten, toisin sanoen tämä rakenne on lukijalle Dockerfile.

Kuvan rakentaminen ja siirtäminen arkistoon näyttää täsmälleen samalta kuin edellinen esimerkki. Jos et ole vielä kovin varma kyvyistäsi, vastaavat komennot löytyvät tiedostosta README.md kansiossa sa-webapp.

▍Säilökuvan rakentaminen Python-sovellukselle

Jos katsot tiedoston sisältöä Dockerfile kansiossa sa-logicet löydä sieltä mitään uutta. Komennot kuvan rakentamiseen ja arkistoon työntämiseen pitäisi olla sinulle jo tuttuja, mutta kuten muissakin sovelluksissamme, ne löytyvät tiedostosta README.md kansiossa sa-logic.

▍Testataan konttisovelluksia

Voitko luottaa johonkin, jota et ole testannut? En myöskään voi. Testataan konttejamme.

  1. Aloitetaan sovellussäilö sa-logic ja määritä se kuuntelemaan portissa 5050:
    docker run -d -p 5050:5000 $DOCKER_USER_ID/sentiment-analysis-logic
  2. Aloitetaan sovellussäilö sa-webapp ja määritä se kuuntelemaan portissa 8080. Lisäksi meidän on asetettava portti, jolla Python-sovellus kuuntelee Java-sovelluksen pyyntöjä määrittämällä ympäristömuuttuja uudelleen 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

Lisätietoja säilön tai Docker VM:n IP-osoitteen selvittämisestä on tiedostossa LUEMINUT.

Aloitetaan sovellussäilö sa-frontend:

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

Nyt kaikki on valmis navigoimaan selaimessa osoitteeseen localhost:80 ja testaa sovellusta.

Huomaa, että jos vaihdat portin sa-webapp, tai jos käytät Docker VM:ää, sinun on muokattava tiedostoa App.js kansiosta sa-frontendmuuttamalla menetelmän IP-osoitetta tai portin numeroa analyzeSentence()korvaamalla nykyiset tiedot vanhentuneiden tietojen sijaan. Sen jälkeen sinun on koottava kuva uudelleen ja käytettävä sitä.

Tältä sovelluskaaviomme näyttää nyt.

Kubernetes Tutorial Osa 1: Sovellukset, mikropalvelut ja säiliöt
Mikropalvelut toimivat konteissa

Yhteenveto: miksi tarvitsemme Kubernetes-klusterin?

Tarkistimme juuri tiedostot Dockerfile, puhui kuvien rakentamisesta ja siirtämisestä Docker-arkistoon. Lisäksi opimme nopeuttamaan kuvien kokoamista tiedoston avulla .dockerignore. Tämän seurauksena mikropalvelumme toimivat nyt Docker-konteissa. Täällä sinulla voi olla täysin perusteltu kysymys siitä, miksi tarvitsemme Kubernetesia. Vastaus tähän kysymykseen on omistettu tämän materiaalin toiselle osalle. Mieti sillä välin seuraavaa kysymystä:
Oletetaan, että tekstianalyysiverkkosovelluksestamme on tullut suosittu maailmanlaajuisesti. Hänelle tulee miljoonia pyyntöjä joka minuutti. Tämä tarkoittaa, että mikropalvelut sa-webapp и sa-logic tulee olemaan valtavan stressin alla. Kuinka skaalata kontit, jotka tarjoavat mikropalveluita?

Kubernetes Tutorial Osa 1: Sovellukset, mikropalvelut ja säiliöt

Lähde: will.com

Lisää kommentti