Kubernetes sjÀlvstudie del 1: applikationer, mikrotjÀnster och behÄllare

PÄ vÄr begÀran skapade Habr ett nav Kubernetes och vi Àr glada att kunna placera den första publikationen i den. Prenumerera!

Kubernetes Àr lÀtt. Varför betalar banker mig mycket pengar för att arbeta inom detta omrÄde, medan vem som helst kan behÀrska den hÀr tekniken pÄ bara nÄgra timmar?

Kubernetes sjÀlvstudie del 1: applikationer, mikrotjÀnster och behÄllare

Om du tvivlar pÄ att Kubernetes kan lÀras in sÄ snabbt, föreslÄr jag att du provar det sjÀlv. NÀr du behÀrskar detta material kommer du nÀmligen att kunna köra en applikation baserad pÄ mikrotjÀnster i ett Kubernetes-kluster. Jag kan garantera detta, eftersom det Àr exakt samma metod som anvÀnds hÀr som jag lÀr vÄra kunder att arbeta med Kubernetes. Vad skiljer den hÀr guiden frÄn andra? Det finns faktiskt mÄnga saker. SÄ de flesta av dessa material börjar med en förklaring av enkla saker - begreppen Kubernetes och funktionerna i kommandot kubectl. Författarna till detta material antar att deras lÀsare Àr bekanta med applikationsutveckling, mikrotjÀnster och Docker-behÄllare. Vi kommer att gÄ Ät andra hÄllet. Först ska vi prata om hur man kör en applikation baserad pÄ mikrotjÀnster pÄ en dator. Sedan ska vi titta pÄ att bygga behÄllarbilder för varje mikrotjÀnst. Och efter det kommer vi att bekanta oss med Kubernetes och titta pÄ att distribuera en applikation baserad pÄ mikrotjÀnster i ett kluster som hanteras av Kubernetes.

Detta tillvÀgagÄngssÀtt, med ett gradvis förhÄllningssÀtt till Kubernetes, kommer att ge en djup förstÄelse för vad som hÀnder som Àr nödvÀndig för en genomsnittlig person för att förstÄ hur enkelt allt fungerar i Kubernetes. Kubernetes Àr verkligen en enkel teknik, förutsatt att de som vill lÀra sig den vet var och hur den anvÀnds.

Nu, utan vidare, lÄt oss komma igÄng och prata om applikationen vi kommer att arbeta med.

Experimentell tillÀmpning

VÄr applikation kommer endast att utföra en funktion. Den tar en mening som input, varefter den, med hjÀlp av textanalysverktyg, utför en sentimentanalys av denna mening, och erhÄller en bedömning av den kÀnslomÀssiga attityden hos meningens författare till ett visst objekt.

SÄ hÀr ser det hÀr programmets huvudfönster ut.

Kubernetes sjÀlvstudie del 1: applikationer, mikrotjÀnster och behÄllare
Webbapplikation för sentimentanalys av texter

Ur teknisk synvinkel bestÄr applikationen av tre mikrotjÀnster, som var och en löser en specifik uppsÀttning uppgifter:

  • SA-Frontend Ă€r en Nginx-webbserver som serverar statiska React-filer.
  • SA-WebApp Ă€r en webbapplikation skriven i Java som behandlar förfrĂ„gningar frĂ„n frontend.
  • SA-Logic Ă€r en Python-applikation som utför sentimentanalys pĂ„ text.

Det Àr viktigt att notera att mikrotjÀnster inte existerar isolerat. De implementerar idén om "separation av ansvar", men samtidigt mÄste de interagera med varandra.

Kubernetes sjÀlvstudie del 1: applikationer, mikrotjÀnster och behÄllare
Dataflöden i applikationen

I diagrammet ovan kan du se de numrerade stegen i systemet som illustrerar dataflödena i applikationen. LÄt oss titta pÄ dem:

  1. WebblÀsaren begÀr en fil frÄn servern index.html (som i sin tur laddar ner applikationspaketet React).
  2. AnvÀndaren interagerar med applikationen, detta orsakar ett anrop till den Spring-baserade webbapplikationen.
  3. Webbapplikationen vidarebefordrar begÀran om att utföra textanalys till Python-applikationen.
  4. Python-applikationen utför sentimentanalys av texten och returnerar resultatet som ett svar pÄ begÀran.
  5. Spring-applikationen skickar ett svar till React-applikationen (som i sin tur visar resultatet av textanalysen för anvÀndaren).

Koden för alla dessa applikationer kan hittas hÀr. Jag rekommenderar att du kopierar det hÀr förrÄdet för dig sjÀlv just nu, eftersom det finns mÄnga intressanta experiment med det framför oss.

Köra en mikrotjÀnstbaserad applikation pÄ din lokala dator

För att applikationen ska fungera mÄste vi starta alla tre mikrotjÀnsterna. LÄt oss börja med den sötaste av dem alla - front-end-applikationen.

▍StĂ€ll in React för lokal utveckling

För att kunna köra en React-applikation mÄste du installera Node.js-plattformen och NPM pÄ din dator. NÀr du har installerat allt detta anvÀnder du terminalen för att navigera till din projektmapp sa-frontend och kör följande kommando:

npm install

Genom att köra detta kommando i mappen node_modules beroenden för React-applikationen kommer att laddas, vars register finns i filen package.json. NÀr beroenden har laddats ner i samma mapp, kör följande kommando:

npm start

Det Àr allt. Nu Àr React-applikationen igÄng, du kan komma Ät den genom att gÄ till följande adress i din webblÀsare: localhost:3000. Du kan Àndra nÄgot i dess kod. Du kommer omedelbart att se effekten av dessa Àndringar i webblÀsaren. Detta Àr möjligt tack vare det sÄ kallade "heta" utbytet av moduler. Detta gör frontend-utveckling till en enkel och njutbar upplevelse.

▍Förbereda en React-applikation för produktion

För att faktiskt kunna anvÀnda en React-applikation mÄste vi konvertera den till en uppsÀttning statiska filer och skicka dem till klienter som anvÀnder en webbserver.

För att bygga React-applikationen, Äterigen med hjÀlp av terminalen, navigera till mappen sa-frontend och kör följande kommando:

npm run build

Detta skapar en katalog i projektmappen build. Den kommer att innehÄlla alla statiska filer som behövs för att React-applikationen ska fungera.

▍Visa statiska filer med Nginx

Först mÄste du installera och köra Nginx webbserver. HÀr du kan ladda ner den och hitta instruktioner om hur du installerar och kör den. Sedan mÄste du kopiera innehÄllet i mappen sa-frontend/build till en mapp [your_nginx_installation_dir]/html.

Med detta tillvÀgagÄngssÀtt genereras filen under byggprocessen av React-applikationen index.html kommer att finnas tillgÀnglig kl [your_nginx_installation_dir]/html/index.html. Det hÀr Àr filen som Nginx-servern som standard producerar nÀr den kommer Ät den. Servern Àr konfigurerad att lyssna pÄ porten 80, men den kan anpassas som du behöver genom att redigera filen [your_nginx_installation_dir]/conf/nginx.conf.

Öppna nu din webblĂ€sare och gĂ„ till localhost:80. Du kommer att se React-ansökningssidan.

Kubernetes sjÀlvstudie del 1: applikationer, mikrotjÀnster och behÄllare
React-applikationen serveras av Nginx-servern

Om du nu skriver in nÄgot i fÀltet Type your sentence och tryck pÄ knappen Send - inget kommer att hÀnda. Men om du tittar pÄ konsolen kan du se felmeddelanden dÀr. För att förstÄ var exakt dessa fel uppstÄr, lÄt oss analysera applikationskoden.

▍Front-end-applikationskodanalys

Ta en titt pĂ„ filkoden App.js, vi kan se det genom att trycka pĂ„ knappen Send kallar en metod analyzeSentence(). Koden för denna metod ges nedan. Observera att för varje rad som har en kommentar till formulĂ€ret # ĐĐŸĐŒĐ”Ń€, finns det en förklaring nedanför koden. Vi kommer att analysera andra kodfragment pĂ„ samma sĂ€tt.

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. Webbadressen till vilken POST-begÀran görs. Det förutsÀtts att det finns en ansökan pÄ denna adress som förvÀntar sig sÄdana förfrÄgningar.

2.BegÀran skickas till ansökan. HÀr Àr ett exempel pÄ en begÀran:

{
    sentence: "I like yogobella!"
}

3.NĂ€r ett svar pĂ„ en begĂ€ran tas emot uppdateras komponentens tillstĂ„nd. Detta gör att komponenten Ă„terrenderas. Om vi ​​tar emot data (det vill sĂ€ga ett JSON-objekt som innehĂ„ller indata och den berĂ€knade textpoĂ€ngen), kommer vi att mata ut komponenten Polarity, eftersom lĂ€mpliga villkor kommer att vara uppfyllda. SĂ„ hĂ€r beskriver vi komponenten:

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

Koden verkar fungera ganska bra. Vad Àr det för fel pÄ det hÀr? Om du antar att det pÄ adressen som applikationen försöker skicka en POST-förfrÄgan till, det inte finns nÄgot Ànnu som kan acceptera och behandla denna begÀran, sÄ har du helt rÀtt. NÀmligen att behandla förfrÄgningar inkomna kl http://localhost:8080/sentiment, mÄste vi köra en webbapplikation baserad pÄ Spring.

Kubernetes sjÀlvstudie del 1: applikationer, mikrotjÀnster och behÄllare
Vi behöver en vÄransökan som kan acceptera en POST-förfrÄgan

▍SĂ€tta upp en Spring-baserad webbapplikation

För att kunna distribuera en Spring-applikation behöver du JDK8 och Maven och korrekt konfigurerade miljövariabler. NÀr du har installerat allt detta kan du fortsÀtta arbeta med vÄrt projekt.

▍ Packa ett program i en jar-fil

Navigera, med hjÀlp av en terminal, till mappen sa-webapp och skriv in följande kommando:

mvn install

Efter att ha kört detta kommando i mappen sa-webapp en katalog kommer att skapas target. Det Àr hÀr Java-applikationen kommer att finnas, förpackad i en jar-fil, representerad av filen sentiment-analysis-web-0.0.1-SNAPSHOT.jar.

▍Köra en Java-applikation

GÄ till mappen target och kör programmet med följande kommando:

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

Ett fel kommer att uppstÄ nÀr detta kommando körs. För att börja fixa det kan vi analysera undantagsdetaljerna i stackspÄrningsdata:

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

För oss Àr det viktigaste hÀr omnÀmnandet av omöjligheten att klargöra innebörden sa.logic.api.url. LÄt oss analysera koden dÀr felet uppstÄr.

▍ Analys av Java-applikationskod

HÀr Àr kodavsnittet dÀr felet uppstÄr.

@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. I SentimentController det finns ett fÀlt saLogicApiUrl. Dess vÀrde anges av fastigheten sa.logic.api.url.
  2. Linje saLogicApiUrl sammanlÀnkas med vÀrdet /analyse/sentiment. Tillsammans bildar de adressen för att ringa till mikrotjÀnsten som utför textanalys.

▍StĂ€ll in ett egenskapsvĂ€rde

PÄ vÄren Àr standardkÀllan för fastighetsvÀrden en fil application.properties, som finns pÄ sa-webapp/src/main/resources. Men dess anvÀndning Àr inte det enda sÀttet att sÀtta fastighetsvÀrden. Detta kan ocksÄ göras med följande kommando:

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

VÀrdet pÄ den hÀr egenskapen bör peka pÄ adressen till vÄr Python-applikation.

Genom att konfigurera den berÀttar vi för Spring-webbapplikationen vart den mÄste gÄ för att utföra textanalysförfrÄgningar.

För att inte komplicera vÄrt liv kommer vi att bestÀmma att Python-applikationen kommer att finnas tillgÀnglig pÄ localhost:5000 och lÄt oss försöka att inte glömma det. Som ett resultat kommer kommandot för att starta Spring-applikationen se ut sÄ hÀr:

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

Kubernetes sjÀlvstudie del 1: applikationer, mikrotjÀnster och behÄllare
VÄrt system saknar en Python-applikation

Nu Àr det bara att köra Python-applikationen sÄ kommer systemet att fungera som förvÀntat.

▍Konfigurera en Python-applikation

För att köra en Python-applikation mÄste du ha Python 3 och Pip installerade, och lÀmpliga miljövariabler mÄste stÀllas in korrekt.

▍Installera beroenden

GÄ till din projektmapp sa-logic/sa och kör följande kommandon:

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

▍Starta programmet

Efter att ha installerat beroenden Àr vi redo att köra applikationen:

python sentiment_analysis.py

Efter att ha kört detta kommando kommer vi att fÄ veta följande:

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

Det betyder att applikationen Àr igÄng och vÀntar pÄ förfrÄgningar kl localhost:5000/

▍Kodforskning

LÄt oss titta pÄ Python-applikationskoden för att förstÄ hur den svarar pÄ förfrÄgningar:

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. Initiera ett objekt Flask.
  2. Ange en adress för att utföra POST-förfrÄgningar till den.
  3. HÀmta en fastighet sentence frÄn begÀrandeinstansen.
  4. Initiera ett anonymt objekt TextBlob och fÄ vÀrdet polarity för den första meningen som mottogs i huvuddelen av begÀran (i vÄrt fall Àr detta den enda meningen som skickas för analys).
  5. Returnerar ett svar vars brödtext innehÄller meningens text och den berÀknade indikatorn för den polarity.
  6. Starta en Flask-applikation som kommer att finnas tillgÀnglig pÄ 0.0.0.0:5000 (du kan ocksÄ komma Ät det med hjÀlp av en konstruktion av formulÀret localhost:5000).

MikrotjÀnsterna som utgör applikationen körs nu. De Àr instÀllda för att interagera med varandra. SÄ hÀr ser applikationsdiagrammet ut i detta skede av arbetet.

Kubernetes sjÀlvstudie del 1: applikationer, mikrotjÀnster och behÄllare
Alla mikrotjÀnster som utgör applikationen bringas i fungerande skick

Nu, innan du fortsÀtter, öppna din React-applikation i en webblÀsare och försök analysera nÄgon mening med den. Om allt Àr gjort korrekt - efter att ha tryckt pÄ knappen Send du ser analysresultaten under textfÀltet.

I nÀsta avsnitt kommer vi att prata om hur man kör vÄra mikrotjÀnster i Docker-behÄllare. Detta Àr nödvÀndigt för att förbereda programmet för att köras pÄ ett Kubernetes-kluster.

Hamnarcontainrar

Kubernetes Àr ett system för att automatisera driftsÀttning, skalning och hantering av containeriserade applikationer. Det kallas ocksÄ en "containerorkestrator". Om Kubernetes arbetar med behÄllare mÄste vi först skaffa dessa behÄllare innan vi anvÀnder det hÀr systemet. Men först, lÄt oss prata om vad behÄllare Àr. Det kanske bÀsta svaret pÄ frÄgan om vad det Àr finns i dokumentation till Docker:

En containeravbildning Àr ett lÀtt, sjÀlvstÀndigt, körbart paket som innehÄller ett program som inkluderar allt som behövs för att köra det: programkod, körmiljö, systemverktyg och bibliotek samt instÀllningar. Containeriserade program kan anvÀndas i miljöer Linux О Windows, och de kommer alltid att fungera pÄ samma sÀtt oavsett infrastruktur.

Detta innebÀr att behÄllare kan köras pÄ vilken dator som helst, inklusive produktionsservrar, och applikationerna i dem kommer att fungera likadant i alla miljöer.

För att utforska funktionerna hos behÄllare och jÀmföra dem med andra sÀtt att köra applikationer, lÄt oss titta pÄ ett exempel pÄ hur man servar en React-applikation med en virtuell maskin och en behÄllare.

▍Visa statiska filer frĂ„n en React-applikation med hjĂ€lp av en virtuell maskin

NÀr vi försöker organisera tjÀnsten för statiska filer med hjÀlp av virtuella maskiner kommer vi att stöta pÄ följande nackdelar:

  1. Ineffektiv anvÀndning av resurser, eftersom varje virtuell maskin Àr ett fullfjÀdrat operativsystem.
  2. Plattformsberoende. Det som fungerar pÄ en lokal dator kanske inte fungerar pÄ en produktionsserver.
  3. LÄngsam och resurskrÀvande skalning av en virtuell maskinbaserad lösning.

Kubernetes sjÀlvstudie del 1: applikationer, mikrotjÀnster och behÄllare
Nginx webbserver som serverar statiska filer som körs pÄ en virtuell maskin

Om behÄllare anvÀnds för att lösa ett liknande problem, i jÀmförelse med virtuella maskiner, kan följande styrkor noteras:

  1. Effektiv anvÀndning av resurser: arbeta med operativsystemet med Docker.
  2. Plattformsoberoende. En behÄllare som en utvecklare kan köra pÄ sin dator kommer att fungera var som helst.
  3. LÀtt implementering genom anvÀndning av bildlager.

Kubernetes sjÀlvstudie del 1: applikationer, mikrotjÀnster och behÄllare
Nginx webbserver som serverar statiska filer som körs i en behÄllare

Vi jÀmförde bara virtuella maskiner och containrar pÄ ett fÄtal punkter, men Àven detta rÀcker för att fÄ en kÀnsla för styrkorna hos containrar. HÀr Du kan hitta information om Docker-containrar.

▍Bygga en containerbild för en React-applikation

Den grundlÀggande byggstenen i en Docker-behÄllare Àr filen Dockerfile. I början av den hÀr filen görs en registrering av basbilden av behÄllaren, sedan finns det en sekvens av instruktioner som anger hur man skapar en behÄllare som kommer att möta behoven för en viss applikation.

Innan vi börjar arbeta med filen Dockerfile, lÄt oss komma ihÄg vad vi gjorde för att förbereda React-applikationsfilerna för uppladdning till Nginx-servern:

  1. Bygga ett React-applikationspaket (npm run build).
  2. Startar Nginx-servern.
  3. Kopiera kataloginnehÄll build frÄn projektmappen sa-frontend till servermappen nginx/html.

Nedan kan du se parallellerna mellan att skapa en container och ovanstÄende steg som utförs pÄ din lokala dator.

▍Förbereder Dockerfilen för SA-Frontend-applikationen

Instruktionerna som kommer att finnas i Dockerfile för ansökan SA-Frontend, bestÄr av endast tvÄ lag. Faktum Àr att Nginx utvecklingsteam har förberett en grundlÀggande bild för Nginx, som vi kommer att anvÀnda för att skapa vÄr bild. Det hÀr Àr de tvÄ stegen vi behöver beskriva:

  1. Grunden för bilden bör vara Nginx-bilden.
  2. MappinnehÄll sa-frontend/build mÄste kopieras till bildmappen nginx/html.

Om du gÄr frÄn den hÀr beskrivningen till filen Dockerfile, dÄ ser det ut sÄ hÀr:

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

Som du kan se Àr allt hÀr vÀldigt enkelt, och innehÄllet i filen visar sig till och med vara ganska lÀsbart och begripligt. Den hÀr filen talar om för systemet att ta bilden nginx med allt som redan finns i den och kopiera innehÄllet i katalogen build till katalogen nginx/html.

HÀr kan du ha en frÄga angÄende hur jag vet exakt var du behöver kopiera filer frÄn mappen build, alltsÄ varifrÄn stigen kom /usr/share/nginx/html. Det Àr faktiskt inget komplicerat hÀr heller. Faktum Àr att relevant information kan hittas i beskrivning bild.

▍ Bygger bilden och laddar upp den till arkivet

Innan vi kan arbeta med den fÀrdiga bilden mÄste vi skjuta den till bildförrÄdet. För att göra detta kommer vi att anvÀnda den kostnadsfria molnbildsvÀrdplattformen Docker Hub. I detta skede av arbetet mÄste du göra följande:

  1. upprÀtta Hamnarbetare.
  2. Registrera dig pÄ Docker Hub-webbplatsen.
  3. Logga in pÄ ditt konto genom att köra följande kommando i terminalen:
    docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"

Nu mÄste du anvÀnda terminalen för att gÄ till katalogen sa-frontend och kör följande kommando dÀr:

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

HÀr och vidare i liknande kommandon $DOCKER_USER_ID bör ersÀttas med ditt Docker Hub-anvÀndarnamn. Till exempel kan den hÀr delen av kommandot se ut sÄ hÀr: rinormaloku/sentiment-analysis-frontend.

I det hÀr fallet kan detta kommando förkortas genom att ta bort det -f Dockerfile, eftersom den hÀr filen redan finns i mappen dÀr vi kör det hÀr kommandot.

För att skicka den fÀrdiga bilden till förvaret behöver vi följande kommando:

docker push $DOCKER_USER_ID/sentiment-analysis-frontend

NÀr du har slutfört den, kontrollera listan över dina arkiv pÄ Docker Hub för att förstÄ om uppladdningen av bilden till molnlagringen lyckades.

▍Köra en container

Nu kan vem som helst ladda ner och köra bilden, kÀnd som $DOCKER_USER_ID/sentiment-analysis-frontend. För att göra detta mÄste du köra följande kommandosekvens:

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

Nu Àr behÄllaren igÄng, vi kan fortsÀtta arbeta genom att skapa andra bilder vi behöver. Men innan vi fortsÀtter, lÄt oss förstÄ designen 80:80, som visas i bildstartskommandot och kan verka förvirrande.

  • Första numret 80 — detta Ă€r vĂ€rdportnumret (det vill sĂ€ga den lokala datorn).
  • Andra nummer 80 Ă€r den hamn i containern som begĂ€ran ska skickas till.

Betrakta följande illustration.

Kubernetes sjÀlvstudie del 1: applikationer, mikrotjÀnster och behÄllare
Port Forwarding

Systemet omdirigerar förfrÄgningar frÄn porten <hostPort> per port <containerPort>. Det vill sÀga tillgÄng till hamnen 80 datorn omdirigeras till porten 80 behÄllare.

Sedan hamnen 80 öppnas pÄ den lokala datorn, dÄ kan du komma Ät programmet frÄn den hÀr datorn pÄ localhost:80. Om ditt system inte stöder Docker kan applikationen köras pÄ en virtuell Docker-maskin, vars adress kommer att se ut <docker-machine ip>:80. För att ta reda pÄ IP-adressen för den virtuella Docker-maskinen kan du anvÀnda kommandot docker-machine ip.

Vid det hÀr laget, efter att ha framgÄngsrikt startat front-end-applikationsbehÄllaren, bör du kunna öppna dess sida i webblÀsaren.

▍ .dockerignore-filen

Samlar en applikationsbild SA-Frontend, kunde vi mÀrka att denna process visar sig vara extremt lÄngsam. Detta hÀnder eftersom bildbyggandekontexten mÄste skickas till Docker-demonen. Katalogen som representerar byggkontexten anges som det sista argumentet för kommandot docker build. I vÄrt fall finns det en prick i slutet av detta kommando. Detta gör att följande struktur inkluderas i byggkontexten:

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

Men av alla mappar som finns hÀr behöver vi bara mappen build. Att ladda nÄgot annat Àr slöseri med tid. Du kan pÄskynda bygget genom att tala om för Docker vilka kataloger du ska ignorera. Det Àr för att kunna göra detta som vi behöver filen .dockerignore. Du, om du Àr bekant med filen .gitignore, strukturen för den hÀr filen kommer förmodligen att verka bekant. Den listar kataloger som bildbyggesystemet kan ignorera. I vÄrt fall ser innehÄllet i den hÀr filen ut sÄ hÀr:

node_modules
src
public

fil .dockerignore mÄste finnas i samma mapp som filen Dockerfile. Nu tar det bara nÄgra sekunder att bygga bilden.

LÄt oss nu arbeta med bilden för Java-applikationen.

▍Bygga en containerbild för en Java-applikation

Vet du vad, du har redan lÀrt dig allt du behöver veta för att skapa behÄllarbilder. Det Àr dÀrför det hÀr avsnittet blir vÀldigt kort.

Öppna filen Dockerfilesom finns i projektmappen sa-webapp. Om du lĂ€ser texten i den hĂ€r filen kommer du bara att se tvĂ„ nya konstruktioner i den, som börjar med nyckelorden ENV Đž EXPOSE:

ENV SA_LOGIC_API_URL http://localhost:5000


EXPOSE 8080

Nyckelord ENV LÄter dig deklarera miljövariabler inuti Docker-behÄllare. I synnerhet, i vÄrt fall, lÄter det dig ange en URL för att komma Ät API:et för applikationen som utför textanalys.

Nyckelord EXPOSE lÄter dig sÀga Ät Docker att öppna en port. Vi kommer att anvÀnda den hÀr porten nÀr vi kör programmet. HÀr kan du mÀrka det i Dockerfile för ansökan SA-Frontend det finns inget sÄdant kommando. Detta Àr endast i dokumentationssyfte, med andra ord, denna konstruktion Àr avsedd för den som ska lÀsa Dockerfile.

Att bygga bilden och skjuta den till arkivet ser exakt likadant ut som i föregÄende exempel. Om du Ànnu inte Àr sÄ sÀker pÄ dina förmÄgor, kan motsvarande kommandon hittas i filen README.md i mappen sa-webapp.

▍Bygga en containerbild för en Python-applikation

Om du tittar pÄ innehÄllet i filen Dockerfile i mappen sa-logic, dÄ hittar du inget nytt för dig sjÀlv dÀr. Kommandon för att bygga bilden och skicka den till förvaret borde ocksÄ redan vara bekanta för dig, men, precis som med vÄra andra applikationer, kan de hittas i filen README.md i mappen sa-logic.

▍Testa containeriserade applikationer

Kan du lita pÄ nÄgot du inte har testat? Jag kan inte ocksÄ. LÄt oss testa vÄra containrar.

  1. LÄt oss starta applikationsbehÄllaren sa-logic och konfigurera den för att lyssna pÄ porten 5050:
    docker run -d -p 5050:5000 $DOCKER_USER_ID/sentiment-analysis-logic
  2. LÄt oss starta applikationsbehÄllaren sa-webapp och konfigurera den för att lyssna pÄ porten 8080. Dessutom mÄste vi konfigurera porten pÄ vilken Python-applikationen ska lyssna efter förfrÄgningar frÄn Java-applikationen genom att omtilldela miljövariabeln 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

För att lÀra dig hur du tar reda pÄ IP-adressen för en Docker-behÄllare eller virtuell maskin, se filen README.

LÄt oss starta applikationsbehÄllaren sa-frontend:

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

Nu Àr allt klart för att gÄ till adressen i webblÀsaren localhost:80 och prova applikationen.

Observera att om du Àndrade porten för sa-webapp, eller om du kör en virtuell Docker-maskin mÄste du redigera filen App.js frÄn mappen sa-frontendgenom att Àndra IP-adressen eller portnumret i metoden analyzeSentence(), ersÀtter aktuell information istÀllet för förÄldrad data. Efter detta mÄste du Ätermontera bilden och anvÀnda den.

SÄ hÀr ser vÄrt applikationsdiagram ut nu.

Kubernetes sjÀlvstudie del 1: applikationer, mikrotjÀnster och behÄllare
MikrotjÀnster körs i containrar

Sammanfattning: varför behöver vi ett Kubernetes-kluster?

Vi har precis granskat akterna Dockerfile, pratade om hur man bygger bilder och skickar dem till ett Docker-förrÄd. Dessutom lÀrde vi oss hur man snabbar upp bildsammansÀttningen med hjÀlp av filen .dockerignore. Som ett resultat körs vÄra mikrotjÀnster nu i Docker-containrar. HÀr kan du ha en helt berÀttigad frÄga om varför vi behöver Kubernetes. Den andra delen av detta material kommer att Àgnas Ät att besvara denna frÄga. Under tiden, fundera pÄ följande frÄga:
LÄt oss anta att vÄr webbapplikation för textanalys har blivit globalt populÀr. Miljontals förfrÄgningar kommer till honom varje minut. Detta innebÀr att mikrotjÀnster sa-webapp О sa-logic kommer att vara under enorm belastning. Hur skalar man behÄllare som kör mikrotjÀnster?

Kubernetes sjÀlvstudie del 1: applikationer, mikrotjÀnster och behÄllare

KĂ€lla: will.com

Köp pĂ„litlig hosting för webbplatser med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster