Kubernetes Tutorial Deel 1: Uwendungen, Mikroservicer a Container

Op eiser Ufro huet den Habr en Hub erstallt Kubernetes a mir si frou déi éischt Verëffentlechung dran ze setzen. Abonnéieren!

Kubernetes ass einfach. Firwat bezuelen Banken mir vill Sue fir an dësem BerÀich ze schaffen, wÀhrend jidderee kann dës Technologie an nëmmen e puer Stonnen beherrschen?

Kubernetes Tutorial Deel 1: Uwendungen, Mikroservicer a Container

Wann Dir Zweiwel datt Kubernetes sou séier ka geléiert ginn, proposéieren ech Iech selwer ze probéieren. NÀmlech, nodeems Dir dëst Material beherrscht hutt, kënnt Dir eng Applikatioun op Basis vu Mikroservicer an engem Kubernetes Cluster lafen. Ech kann dat garantéieren, well et ass genee déi selwecht Methodik déi hei benotzt gëtt, datt ech eise Clienten léieren mat Kubernetes ze schaffen. Wat mécht dëse Guide anescht wéi anerer? TatsÀchlech ginn et vill Saachen. Also, déi meescht vun dëse Materialien fÀnken un mat enger ErklÀrung vun einfache Saachen - d'Konzepter vu Kubernetes an d'Features vum Kommando kubectl. D'Auteuren vun dëse Materialien huelen un datt hir Lieser mat Applikatiounsentwécklung, Mikroservicer an Docker Container vertraut sinn. Mir ginn deen anere Wee. Als éischt wÀerte mir schwÀtzen iwwer wéi eng Applikatioun baséiert op Mikroservicer op engem Computer lafen. Da kucke mir Containerbilder fir all Mikroservice ze bauen. An duerno wÀerte mir Kubernetes kennen léieren a kucken wéi eng Applikatioun baséiert op Mikroservicer an engem Cluster dee vu Kubernetes geréiert gëtt.

Dës Approche, mat enger gradueller Approche fir Kubernetes, gëtt d'Tiefe vum VerstÀndnis vun deem wat geschitt ass, wat fir déi duerchschnëttlech Persoun néideg ass fir ze verstoen wéi einfach alles an Kubernetes funktionnéiert. Kubernetes ass sécher eng einfach Technologie, virausgesat datt déi, déi se léiere wëllen, wësse wou a wéi se benotzt gëtt.

Elo, ouni weider Ado, loosst eis ufÀnken a schwÀtzen iwwer d'Applikatioun mat dÀr mir wÀerte schaffen.

Experimentell Applikatioun

Eis Applikatioun wÀert nëmmen eng Funktioun ausféieren. Et hëlt ee Saz als Input, duerno, mat Hëllef vun Textanalyseinstrumenter, mécht et Sentimentanalyse vun dësem Saz, kritt eng BewÀertung vun der emotionaler Haltung vum Auteur vum Saz zu engem bestëmmten Objet.

Dëst ass wéi d'Haaptfenster vun dëser Applikatioun ausgesÀit.

Kubernetes Tutorial Deel 1: Uwendungen, Mikroservicer a Container
Webapplikatioun fir Sentimentanalyse vun Texter

Aus enger technescher Siicht besteet d'Applikatioun aus drÀi Mikroservicer, déi jidderee e spezifesche Set vu Probleemer léist:

  • SA-Frontend ass en Nginx Webserver deen statesch React Dateien servĂ©iert.
  • SA-WebApp ass eng Webapplikatioun geschriwwen op Java dĂ©i Ufroe vum Frontend veraarbecht.
  • SA-Logic ass eng Python Applikatioun dĂ©i Sentimentanalyse op Text ausfĂ©iert.

Et ass wichteg ze bemierken datt Mikroservicer net isoléiert existéieren. Si implementéieren d'Iddi vun der "Trennung vu Verantwortung", awer glÀichzÀiteg musse se mateneen interagéieren.

Kubernetes Tutorial Deel 1: Uwendungen, Mikroservicer a Container
Date fléisst an der Applikatioun

Am Diagramm uewendriwwer kënnt Dir déi nummeréiert Etappe vum System gesinn, illustréiert d'Datestroum an der Applikatioun. Loosst eis se kucken:

  1. De Browser freet eng Datei vum Server index.html (wat am Tour de React Applikatiounspaket erofluet).
  2. De Benotzer interagéiert mat der Applikatioun, dëst verursaacht en Opruff un d'Fréijoer-baséiert Webapplikatioun.
  3. D'Webapplikatioun schéckt d'Ufro fir Textanalyse un d'Python-Applikatioun weider.
  4. D'Python Applikatioun mĂ©cht Sentimentanalyse vum Text a gĂ«tt d'Resultat als Äntwert op d'Ufro zrĂ©ck.
  5. D'FrĂ©ijoer Applikatioun schĂ©ckt eng Äntwert op d'React Applikatioun (dĂ©i am Tour d'Resultat vun der Textanalyse dem Benotzer weist).

De Code fir all dës Uwendungen ka fonnt ginn hei. Ech recommandéieren Iech dëse Repository fir Iech selwer elo ze kopéieren, well et vill interessant Experimenter domat virun eis sinn.

Lafen eng Mikroservicer-basĂ©iert Applikatioun op Ärer lokaler Maschinn

Fir datt d'Applikatioun funktionnéiert, musse mir all drÀi Mikroservicer starten. Loosst eis mat der léifste vun hinnen all ufÀnken - d'Front-End Applikatioun.

▍ Setzt React fir lokal EntwĂ©cklung op

Fir eng React Applikatioun auszefĂ©ieren, musst Dir d'Node.js Plattform an NPM op Ärem Computer installĂ©ieren. Wann Dir all dĂ«st installĂ©iert hutt, benotzt den Terminal fir an Äre Projet Dossier ze navigĂ©ieren sa-frontend a lafen de folgende Kommando:

npm install

Andeems Dir dëse Kommando am Dossier leeft node_modules d'OfhÀngegkeete vun der React Applikatioun ginn gelueden, records vun deenen an der Datei sinn package.json. Wann d'OfhÀngegkeeten am selwechten Dossier erofgeluede ginn, fuert de folgende Kommando:

npm start

Dat ass alles. Elo leeft d'React Applikatioun, Dir kĂ«nnt et zougrĂ€ifen andeems Dir op dĂ©i folgend Adress an Ärem Browser gitt: localhost:3000. Dir kĂ«nnt eppes a sengem Code Ă€nneren. Dir gesitt direkt den Effekt vun dĂ«sen Ännerungen am Browser. DĂ«st ass mĂ©iglech duerch de sougenannte "waarm" Ersatz vu Moduler. DĂ«st mĂ©cht Front-End EntwĂ©cklung eng einfach an agreabel Erfahrung.

▍ Eng React Applikatioun fir d'Produktioun virbereeden

Fir den Zweck tatsÀchlech eng React Applikatioun ze benotzen, musse mir et an eng Rei vu statesche Dateien konvertéieren a se u Clienten servéieren mat engem Webserver.

Fir d'React Applikatioun ze bauen, erëm mam Terminal ze benotzen, navigéiert an den Dossier sa-frontend a lafen de folgende Kommando:

npm run build

Dëst wÀert e Verzeechnes am Projet Dossier erstellen build. Et enthÀlt all statesch Dateien déi néideg sinn fir datt d'React Applikatioun funktionnéiert.

▍ DĂ©ngscht statesch Dateien mat Nginx

Als éischt musst Dir den Nginx Webserver installéieren a lafen. et ass Dir kënnt et eroflueden an Instruktioune fannen wéi Dir se installéiert an ausféiert. Da musst Dir den Inhalt vum Dossier kopéieren sa-frontend/build an den Dossier [your_nginx_installation_dir]/html.

Mat dëser Approche ass d'Datei generéiert wÀrend dem Bauprozess vun der React Applikatioun index.html wÀert sinn um [your_nginx_installation_dir]/html/index.html. Dëst ass d'Datei, déi als Standard den Nginx-Server produzéiert wann Dir et zougitt. De Server ass konfiguréiert fir um Hafen ze lauschteren 80, awer et kann personaliséiert ginn wéi Dir braucht andeems Dir d'Datei Ànnert [your_nginx_installation_dir]/conf/nginx.conf.

Elo öffnen Äre Browser a gitt op localhost:80. Dir gesitt d'React Applikatioun SĂ€it.

Kubernetes Tutorial Deel 1: Uwendungen, Mikroservicer a Container
Reaktioun Applikatioun zerwéiert vum Nginx Server

Wann Dir elo eppes an den Terrain gitt Type your sentence an Press de KnÀppchen Send - nÀischt wÀert geschéien. Awer wann Dir d'Konsole kuckt, kënnt Dir Fehlermeldungen do gesinn. Fir ze verstoen wou genau dës Feeler optrieden, loosst eis den Applikatiounscode analyséieren.

▍Front-End Applikatioun Code Analyse

Huelt e BlĂ©ck op de Fichier Code App.js, Mir kĂ«nne gesinn datt de KnĂ€ppchen drĂ©ckt Send rifft eng Method analyzeSentence(). De Code fir dĂ«s Method gĂ«tt Ă«nnendrĂ«nner uginn. NotĂ©iert w.e.g. datt fir all Zeil dĂ©i e Kommentar vum Formulaire huet # ĐĐŸĐŒĐ”Ń€, et gĂ«tt eng ErklĂ€rung Ă«nner dem Code. Mir analysĂ©ieren aner Code Fragmenter an dĂ©i selwecht ManĂ©ier.

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. D'URL op déi d'POST Ufro gemaach gëtt. Et gëtt ugeholl datt et eng Applikatioun op dëser Adress ass, déi esou Ufroe erwaart.

2.D'Ufro Kierper un d'Applikatioun geschéckt. Hei ass e Beispill Ufro Kierper:

{
    sentence: "I like yogobella!"
}

3.Wann eng Äntwert op eng Ufro kritt gĂ«tt, gĂ«tt den Zoustand vun der Komponent aktualisĂ©iert. DĂ«st bewierkt datt d'Komponente nei gemaach gĂ«tt. Wa mir Daten krĂ©ien (dat ass e JSON-Objet deen d'Inputdaten an de berechenten Textpartitur enthĂ€lt), wĂ€erte mir de Komponent ausginn Polarity, well dĂ©i entspriechend Konditiounen erfĂ«llt ginn. DĂ«st ass wĂ©i mir d'Komponente beschreiwen:

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

De Code schéngt ganz gutt ze schaffen. Wat ass falsch mat dësem, iwwerhaapt? Wann Dir ugeholl datt op der Adress, op déi d'Applikatioun probéiert eng POST-Ufro ze schécken, nach nÀischt ass, wat dës Ufro akzeptéiere kann a veraarbecht, da sidd Dir absolut richteg. NÀmlech fir Ufroen ze veraarbecht, déi am http://localhost:8080/sentiment, mir mussen eng Webapplikatioun op Basis vum Fréijoer lafen.

Kubernetes Tutorial Deel 1: Uwendungen, Mikroservicer a Container
Mir brauchen eng Fréijoersapplikatioun déi eng POST Ufro akzeptéiere kann

▍ Eng FrĂ©ijoer-basĂ©iert Webapplikatioun opsetzen

Fir eng FrĂ©ijoersapplikatioun z'installĂ©ieren, braucht Dir JDK8 a Maven a richteg konfigurĂ©iert Ëmfeldvariablen. Wann Dir dĂ«st alles installĂ©iert hutt, kĂ«nnt Dir weider un eisem Projet schaffen.

▍ Eng Applikatioun an eng Jar Datei packen

Navigéiert, mat engem Terminal, an den Dossier sa-webapp a gitt de folgende Kommando:

mvn install

Nodeems Dir dëse Kommando am Dossier leeft sa-webapp e Verzeechnes gëtt erstallt target. Dëst ass wou d'Java Applikatioun lokaliséiert gëtt, verpackt an enger Jar Datei, representéiert vun der Datei sentiment-analysis-web-0.0.1-SNAPSHOT.jar.

▍Lafen eng Java Applikatioun

Gitt an den Dossier target a lafen d'Applikatioun mam folgendem Kommando aus:

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

E Feeler geschitt beim Ausféiere vun dësem Kommando. Fir et ze fixéieren, kënne mir d'Ausnahmsdetailer an de Stack Trace Daten analyséieren:

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

Fir eis ass dat wichtegst hei d'Ernimmung vun der Onméiglechkeet d'Bedeitung ze klÀren sa.logic.api.url. Loosst eis de Code analyséieren an deem de Feeler geschitt.

▍Java Applikatioun Code Analyse

Hei ass de Code Snippet wou de Feeler geschitt.

@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. An SentimentController et gëtt e Feld saLogicApiUrl. SÀi WÀert gëtt vun der Immobilie spezifizéiert sa.logic.api.url.
  2. Linn saLogicApiUrl concatenates mam WÀert /analyse/sentiment. Zesummen bilden se d'Adress fir en Uruff un de Mikroservice ze maachen deen Textanalyse mécht.

▍Set e BesĂ«tz WĂ€ert

Am Fréijoer ass d'Standardquell vun ImmobiliewÀerter eng Datei application.properties, déi op sa-webapp/src/main/resources. Awer seng Notzung ass net deen eenzege Wee fir ImmobiliewÀerter ze setzen. Dëst kann och mat dem folgenden Kommando gemaach ginn:

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

De WÀert vun dëser Immobilie soll op d'Adress vun eiser Python Applikatioun weisen.

Andeems Dir et konfiguréiert, soen mir d'Fréijoer Webapplikatioun wou et muss goen fir Textanalyseufroen auszeféieren.

Fir eist Liewen net ze komplizĂ©iere wĂ€erte mir dĂ©cidĂ©ieren datt d'Python Applikatioun verfĂŒgbar ass localhost:5000 a loosst eis probĂ©ieren et net ze vergiessen. Als Resultat wĂ€ert de Kommando fir d'FrĂ©ijoersapplikatioun ze starten esou ausgesinn:

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

Kubernetes Tutorial Deel 1: Uwendungen, Mikroservicer a Container
Eise System fehlt eng Python Applikatioun

Elo alles wat mir maache mussen ass d'Python Applikatioun ausféieren an de System funktionnéiert wéi erwaart.

▍ Eng Python Applikatioun opsetzen

Fir eng Python Applikatioun auszefĂ©ieren, musst Dir Python 3 a Pip installĂ©iert hunn, an dĂ©i entspriechend Ëmfeldvariablen musse richteg agestallt ginn.

▍ OfhĂ€ngegkeeten installĂ©ieren

Gitt an Äre Projet Dossier sa-logic/sa a lafen dĂ©i folgend Kommandoen:

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

▍Start d'Applikatioun

Nodeems Dir d'OfhÀngegkeeten installéiert hutt, si mir prett fir d'Applikatioun auszeféieren:

python sentiment_analysis.py

Nodeems Dir dëse Kommando ausgefouert hutt, wÀerte mir déi folgend soen:

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

Dëst bedeit datt d'Applikatioun leeft a waart op Ufroe bei localhost:5000/

▍Code Fuerschung

Loosst eis de Python Applikatiounscode kucken fir ze verstoen wéi et op Ufroe reagéiert:

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. En Objet initialiséieren Flask.
  2. Eng Adress spezifizéieren fir POST Ufroen ze maachen.
  3. Eng Immobilie zréckzéien sentence vum Ufro Kierper.
  4. Initialiséiere vun engem anonymen Objet TextBlob a kritt de WÀert polarity fir den éischte Saz am Kierper vun der Ufro kritt (an eisem Fall ass dëst deen eenzege Saz fir Analyse geschéckt).
  5. Retour eng Äntwert, deem sĂ€i Kierper den Text vum Saz an de berechent Indikator dofir enthĂ€lt polarity.
  6. LancĂ©iere eng Flask Applikatioun, dĂ©i verfĂŒgbar ass um 0.0.0.0:5000 (Dir kĂ«nnt et och zougrĂ€ifen mat enger Konstruktioun vun der Form localhost:5000).

D'Mikroservicer, déi d'Applikatioun ausmaachen, lafen elo. Si sinn ofgestëmmt fir mateneen ze interagéieren. Dëst ass wéi d'Applikatiounsdiagramm an dëser Etapp vun der Aarbecht ausgesÀit.

Kubernetes Tutorial Deel 1: Uwendungen, Mikroservicer a Container
All Mikroservicer, déi d'Applikatioun ausmaachen, ginn an d'Aarbechtskonditioun bruecht

Elo, ier Dir weider geet, öffnen Är React Applikatioun an engem Browser a probĂ©iert e Saz mat deem ze analysĂ©ieren. Wann alles richteg gemaach ass - nodeems Dir de KnĂ€ppchen drĂ©ckt Send Dir gesitt d'Analyseresultater Ă«nner dem Textfeld.

An der nÀchster Sektioun schwÀtze mir iwwer wéi mir eis Mikroservicer an Docker Container lafen. Dëst ass néideg fir d'Applikatioun virzebereeden fir op de Kubernetes Cluster ze lafen.

Docker Container

Kubernetes ass e System fir d'Deployment, d'SkalĂ©ierung an d'Gestioun vu containerisĂ©ierten Uwendungen ze automatisĂ©ieren. Et gĂ«tt och e "Containerorchestrator" genannt. Wann Kubernetes mat Container schafft, da musse mir ier Dir dĂ«se System benotzt, fir d'Ă©ischt dĂ«s Container ze krĂ©ien. Awer als Ă©ischt schwĂ€tze mer iwwer wat Container sinn. VlĂ€icht dĂ©i bescht Äntwert op d'Fro wat et ass, kann an fonnt ginn Dokumentatioun an Docker:

E Container-Image ass e liicht, selbstĂ€nnegt, ausfĂ©ierbart Pak, dat eng Applikatioun enthĂ€lt, dĂ©i alles enthĂ€lt, wat nĂ©ideg ass fir se auszefĂ©ieren: Applikatiounscode, Runtime-Ëmfeld, Systemtools a BibliothĂ©iken, an Astellungen. ContainerisĂ©iert Programmer kĂ«nnen an Ëmfeld benotzt ginn. Linux Đž Windows, an si wĂ€erten Ă«mmer op dĂ©iselwecht ManĂ©ier funktionĂ©ieren, onofhĂ€ngeg vun der Infrastruktur.

DĂ«st bedeit datt Container op all Computer lafen kĂ«nnen, och Produktiounsserveren, an d'Applikatiounen, dĂ©i an hinnen enthale sinn, funktionnĂ©ieren d'selwecht an all Ëmfeld.

Fir d'Features vu Container ze entdecken an se mat anere Weeër ze verglÀichen fir Uwendungen ze lafen, kucke mer e Beispill fir eng React Applikatioun mat enger virtueller Maschinn an engem Container ze déngen.

▍ DĂ©ngscht statesch Dateie vun enger React Applikatioun mat enger virtueller Maschinn

Probéiert de Service vu statesche Dateien mat virtuelle Maschinnen ze organiséieren, wÀerte mir déi folgend Nodeeler begéinen:

  1. Ineffizient Notzung vu Ressourcen, well all virtuell Maschinn e vollwÀertege Betribssystem ass.
  2. Plattform OfhÀngegkeet. Wat op engem lokalen Computer funktionnéiert, funktionnéiert vlÀicht net op engem Produktiounsserver.
  3. Lues a ressourceintensiv Skaléierung vun enger virtueller Maschinn-baséierter Léisung.

Kubernetes Tutorial Deel 1: Uwendungen, Mikroservicer a Container
Nginx Webserver servéiert statesch Dateien op enger virtueller Maschinn

Wann Container benotzt gi fir en Àhnleche Problem ze léisen, dann, am Verglach mat virtuelle Maschinnen, kënnen déi folgend StÀerkten bemierkt ginn:

  1. Effizient Notzung vu Ressourcen: Schafft mam Betribssystem mat Docker.
  2. Plattform onofhÀngeg. E Container, deen en Entwéckler op sengem Computer lafen kann, funktionnéiert iwwerall.
  3. Liichtgewiicht Détachement duerch d'Benotzung vun Bildschichten.

Kubernetes Tutorial Deel 1: Uwendungen, Mikroservicer a Container
Nginx Webserver servéiert statesch Dateien déi an engem Container lafen

Mir verglach nëmmen virtuell Maschinnen a Container op e puer Punkten, awer och dëst ass genuch fir e Gefill fir d'StÀerkte vu Container ze kréien. et ass Dir kënnt Detailer iwwer Docker Container fannen.

▍ E Containerbild fir eng React Applikatioun bauen

De Basisbausteen vun engem Docker Container ass d'Datei Dockerfile. Am Ufank vun dëser Datei gëtt e Rekord vun der Basisbild vum Container gemaach, da gëtt et eng Sequenz vun Instruktiounen, déi uginn wéi e Container erstallt deen d'Bedierfnesser vun enger bestëmmter Applikatioun entsprécht.

Ier mer ufÀnken mat der Datei ze schaffen Dockerfile, loosst eis drun erënneren wat mir gemaach hunn fir d'React Applikatiounsdateien ze preparéieren fir op den Nginx Server eropzelueden:

  1. Bauen e React Applikatiounspaket (npm run build).
  2. Den Nginx Server starten.
  3. Verzeechnes Inhalt kopéieren build vum Projet Dossier sa-frontend an de Server Dossier nginx/html.

Hei drĂ«nner kĂ«nnt Dir d'Parallelen tĂ«scht engem Container erstellen an den uewe genannte SchrĂ«tt gesinn op Ärem lokalen Computer.

▍D'Dockerfile fir d'SA-Frontend Applikatioun virbereeden

D'Instruktioune, déi an Dockerfile fir Uwendung SA-Frontend, besteet aus nëmmen zwou Equippen. De Fakt ass datt d'Nginx Entwécklungsteam eng Basis virbereet huet e Bild fir Nginx, déi mir benotze fir eist Bild ze kreéieren. Dëst sinn déi zwee Schrëtt déi mir musse beschreiwen:

  1. D'Basis vum Bild soll den Nginx Bild sinn.
  2. Dossier Inhalt sa-frontend/build muss an d'Bild Dossier kopéiert ginn nginx/html.

Wann Dir vun dëser Beschreiwung op d'Datei gitt Dockerfile, da gesÀit et esou aus:

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

Wéi Dir gesitt, ass alles hei ganz einfach, an den Inhalt vun der Datei gëtt souguer ganz liesbar a verstÀndlech. Dëse Fichier seet de System d'Bild ze huelen nginx mat alles wat schonn dran ass, a kopéiert den Inhalt vum Verzeichnis build an den Dossier nginx/html.

Hei hutt Dir vlÀicht eng Fro iwwer wéi ech weess wou genau Dir musst Dateien aus dem Dossier kopéieren build, also wou de Wee hierkënnt /usr/share/nginx/html. TatsÀchlech gëtt et hei och nÀischt komplizéiert. De Fakt ass datt déi relevant Informatioun ka fonnt ginn Beschreiwung Bild.

▍ D'Bild bauen an an de Repository eroplueden

Ier mir mat dem fÀerdege Bild kënne schaffen, musse mir et an de Bildrepository drécken. Fir dëst ze maachen, benotze mir déi gratis Cloud Image Hosting Plattform Docker Hub. Op dëser Etapp vun der Aarbecht musst Dir déi folgend maachen:

  1. Installéieren Docker.
  2. Registréiert Iech op der Docker Hub WebsÀit.
  3. Mellt Iech op Äre Kont un andeems Dir de folgende Kommando am Terminal leeft:
    docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"

Elo musst Dir den Terminal benotzen fir an de Verzeichnis ze goen sa-frontend a lafen de folgende Kommando do:

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

Hei a weider an Ă€hnlechen Kommandoen $DOCKER_USER_ID soll mat Ärem Docker Hub Benotzernumm ersat ginn. Zum Beispill kann dĂ«sen Deel vum Kommando esou ausgesinn: rinormaloku/sentiment-analysis-frontend.

An dësem Fall kann dëse Kommando verkierzt ginn andeems Dir et ewechhuelt -f Dockerfile, well dës Datei schonn am Dossier existéiert an deem mir dëse Kommando ausféieren.

Fir de fÀerdege Bild an de Repository ze schécken, brauche mir de folgende Kommando:

docker push $DOCKER_USER_ID/sentiment-analysis-frontend

Nodeems Dir se ofgeschloss hutt, kontrollĂ©iert d'LĂ«scht vun Äre Repositories op Docker Hub fir ze verstoen ob den Eroplueden vum Bild an d'Cloudlagerung erfollegrĂ€ich war.

▍BehĂ€lter lafen

Elo kann jiddereen d'Bild eroflueden a lafen, bekannt als $DOCKER_USER_ID/sentiment-analysis-frontend. Fir dëst ze maachen, musst Dir déi folgend Sequenz vun Kommandoen ausféieren:

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

Elo leeft de Container, mir kënne weider schaffen andeems mir aner Biller kreéieren déi mir brauchen. Awer ier mer weidergoen, loosst eis den Design verstoen 80:80, déi am Bildstartbefehl erschéngt a kann duerchernee schéngen.

  • Éischt Nummer 80 - dĂ«st ass d'Hostportnummer (dat ass de lokale Computer).
  • Zweet Zuel 80 ass den Hafen vum Container un deen d'Demande weidergeleet soll ginn.

Betruecht déi folgend Illustratioun.

Kubernetes Tutorial Deel 1: Uwendungen, Mikroservicer a Container
Port Forwarding

De System redirects Ufroe vum Hafen <hostPort> an den Hafen <containerPort>. Dat ass, Zougang zum Hafen 80 Computer gëtt op den Hafen ëmgeleet 80 Container.

ZĂ«nter dem Hafen 80 op de lokalen Computer opgemaach, da kĂ«nnt Dir op d'Applikatioun vun dĂ«sem Computer op localhost:80. Wann Äre System den Docker net Ă«nnerstĂ«tzt, kann d'Applikatioun op enger Docker virtueller Maschinn lafen, d'Adress vun dĂ€r ausgesĂ€it <docker-machine ip>:80. Fir d'IP Adress vun der Docker virtueller Maschinn erauszefannen, kĂ«nnt Dir de Kommando benotzen docker-machine ip.

Zu dësem ZÀitpunkt, nodeems Dir de Front-End Applikatioun Container erfollegrÀich lancéiert hutt, sollt Dir fÀeg sinn seng SÀit am Browser opzemaachen.

▍D'.dockerignore Datei

Sammelen eng Applikatioun Bild SA-Frontend, mir konnten feststellen datt dëse Prozess extrem lues ass. Dëst geschitt well de Kontext vum Bildbau muss un den Docker Daemon geschéckt ginn. De Verzeichnis deen de Baukontext representéiert gëtt als lescht Argument vum Kommando uginn docker build. An eisem Fall gëtt et e Punkt um Enn vun dësem Kommando. Dëst verursaacht datt déi folgend Struktur am Baukontext abegraff ass:

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

Awer vun all den Dossieren déi hei prÀsent sinn, brauche mir nëmmen den Dossier build. Alles anescht ze lueden ass eng Verschwendung vun ZÀit. Dir kënnt de Bau beschleunegen andeems Dir Docker seet wéi eng Verzeechnes ze ignoréieren. Et ass fir dëst ze maachen datt mir de Fichier brauchen .dockerignore. Dir, wann Dir mat der Datei kennt .gitignore, wÀert d'Struktur vun dësem Fichier wahrscheinlech vertraut schéngen. Et listet Verzeichnisser déi de Bildbausystem ignoréiere kann. An eisem Fall gesÀit den Inhalt vun dëser Datei esou aus:

node_modules
src
public

Fichier .dockerignore muss am selwechten Dossier wéi d'Datei sinn Dockerfile. Elo baut d'Bild eng Saach vu Sekonnen.

Loosst eis elo um Bild fir d'Java Applikatioun schaffen.

▍ E Containerbild fir eng Java Applikatioun bauen

Dir wësst wat, Dir hutt schonn alles geléiert wat Dir wësse musst fir Containerbilder ze kreéieren. Dofir wÀert dës Rubrik ganz kuerz sinn.

De Fichier opmaachen Dockerfiledéi am Projet Dossier ass sa-webapp. Wann Dir den Text vun dësem Fichier liest, gesitt Dir nëmmen zwee nei Konstruktiounen dran, ugefaange mat de Schlësselwieder ENV О EXPOSE:

ENV SA_LOGIC_API_URL http://localhost:5000


EXPOSE 8080

SchlĂ«sselwuert ENV Erlaabt Iech Ëmfeldvariablen an Docker Container ze deklarĂ©ieren. Besonnesch an eisem Fall erlaabt et Iech eng URL ze spezifizĂ©ieren fir Zougang zu der API vun der Applikatioun dĂ©i Textanalyse mĂ©cht.

Schlësselwuert EXPOSE erlaabt Iech Docker ze soen fir e Port opzemaachen. Mir wÀerten dësen Hafen benotzen wann Dir d'Applikatioun leeft. Hei kënnt Dir feststellen, datt am Dockerfile fir Uwendung SA-Frontend et gëtt keen esou Kommando. Dëst ass nëmme fir Dokumentatiounszwecker, dat heescht, dës Konstruktioun ass geduecht fir deen dee liest Dockerfile.

D'Bild bauen an et an de Repository drĂ©cken gesĂ€it genau d'selwecht aus wĂ©i am virege Beispill. Wann Dir nach net ganz zouversiichtlech an Äre FĂ€egkeeten sidd, kĂ«nnen dĂ©i entspriechend Kommandoen an der Datei fonnt ginn README.md am Dossier sa-webapp.

▍ Bauen vun engem Containerbild fir eng Python Applikatioun

Wann Dir den Inhalt vun der Datei kuckt Dockerfile am Dossier sa-logic, da fannt Dir do nÀischt Neies fir Iech. D'Befehle fir d'Bild opzebauen an an de Repository ze schécken, sollten Iech och scho vertraut sinn, awer, wéi mat eisen aneren Uwendungen, kënnen se an der Datei fonnt ginn README.md am Dossier sa-logic.

▍ContainerisĂ©ierter Uwendungen testen

Kënnt Dir eppes vertrauen wat Dir net getest hutt? Ech kann och net. Loosst eis eis Container testen.

  1. Loosst eis den Applikatiounscontainer starten sa-logic a konfiguréieren et fir um Hafen ze lauschteren 5050:
    docker run -d -p 5050:5000 $DOCKER_USER_ID/sentiment-analysis-logic
  2. Loosst eis den Applikatiounscontainer starten sa-webapp a konfigurĂ©ieren et fir um Hafen ze lauschteren 8080. ZousĂ€tzlech musse mir den Hafen konfigurĂ©ieren, op deem d'Python-Applikatioun no Ufroe vun der Java-Applikatioun lauschtert andeems d'Ëmfeldvariabel Ă«mgeet 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

Fir ze léieren wéi Dir d'IP Adress vun engem Docker Container oder virtuell Maschinn erausfënnt, kuckt op d'Datei README.

Loosst eis den Applikatiounscontainer starten sa-frontend:

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

Elo ass alles prett fir op d'Adress am Browser ze goen localhost:80 a probéiert d'Applikatioun.

Maacht weg datt wann Dir den Hafen geÀnnert hutt fir sa-webapp, oder wann Dir eng Docker virtuell Maschinn leeft, musst Dir d'Datei Ànneren App.js aus engem Dossier sa-frontendandeems Dir d'IP Adress oder d'Portnummer an der Method Ànneren analyzeSentence(), Ersatz vun aktuell Informatioun amplaz vun alen Donnéeën. Duerno musst Dir d'Bild erëm zesummesetzen a benotzen.

Dëst ass wéi eis Uwendungsdiagramm elo ausgesÀit.

Kubernetes Tutorial Deel 1: Uwendungen, Mikroservicer a Container
Mikroservicer lafen a Container

Resumé: Firwat brauche mir e Kubernetes Cluster?

Mir hu just d'Dossieren iwwerpréift Dockerfile, geschwat wéi Dir Biller bauen an se an en Docker Repository drécken. ZousÀtzlech hu mir geléiert wéi d'Bildversammlung mat der Datei beschleunegt gëtt .dockerignore. Als Resultat lafen eis Mikroservicer elo an Docker Container. Hei hutt Dir vlÀicht eng komplett gerechtfÀerdegt Fro iwwer firwat mir Kubernetes brauchen. Den zweeten Deel vun dësem Material gëtt op dës Fro gewidmet. An der TëschenzÀit, betruecht déi folgend Fro:
Loosst eis unhuelen datt eis Webapplikatioun fir Textanalyse weltwÀit populÀr ginn ass. Millioune vun Demanden kommen him all Minutt. Dëst bedeit datt Mikroservicer sa-webapp О sa-logic wÀert ënner enorm Laascht sinn. Wéi Skala Container Lafen Mikroservicer?

Kubernetes Tutorial Deel 1: Uwendungen, Mikroservicer a Container

Source: will.com

Kaaft zouverlĂ€sseg Hosting fir Site mat DDoS Schutz, VPS VDS Server đŸ”„ Kaaft zouverlĂ©issegt WebsĂ€ithosting mat DDoS-Schutz, VPS VDS Server | ProHoster