Tutorial Kubernetes Bagian 1: Aplikasi, Microservices, sareng Wadahna

Dina pamundut urang, Habr dijieun hub a Kubernetes sarta kami pleased nempatkeun publikasi munggaran di dinya. Langganan!

Kubernetes gampang. Naha bank mayar kuring loba duit pikeun digawé di wewengkon ieu, bari saha bisa ngawasaan téhnologi ieu ngan sababaraha jam?

Tutorial Kubernetes Bagian 1: Aplikasi, Microservices, sareng Wadahna

Upami anjeun ragu yén Kubernetes tiasa diajar gancang pisan, kuring nyarankeun anjeun nyobian éta nyalira. Nyaéta, sanggeus ngawasa bahan ieu, anjeun bakal tiasa ngajalankeun aplikasi dumasar kana microservices dina klaster Kubernetes. Abdi tiasa ngajamin ieu, sabab éta persis metodologi anu sami anu dianggo di dieu yén kuring ngajarkeun klien kami pikeun damel sareng Kubernetes. Naon ngajadikeun pituduh ieu béda ti batur? Kanyataanna, aya loba hal. Janten, kalolobaan bahan ieu dimimitian ku katerangan ngeunaan hal-hal sederhana - konsép Kubernetes sareng fitur paréntah kubectl. Panulis bahan ieu nganggap yén pamiarsana wawuh sareng pamekaran aplikasi, jasa mikro, sareng wadah Docker. Urang bakal balik jalan séjén. Kahiji, urang bakal ngobrol ngeunaan cara ngajalankeun hiji aplikasi dumasar kana microservices dina komputer. Teras we bakal ningali ngawangun gambar wadahna pikeun unggal jasa mikro. Sareng saatos éta, urang bakal kenal sareng Kubernetes sareng ningali nyebarkeun aplikasi dumasar kana microservices dina klaster anu dikelola ku Kubernetes.

Pendekatan ieu, kalayan pendekatan bertahap kana Kubernetes, bakal masihan pamahaman anu jero ngeunaan naon anu kajantenan anu dipikabutuh pikeun jalma rata-rata supados ngartos kumaha sadayana tiasa dianggo dina Kubernetes. Kubernetes tangtosna mangrupikeun téknologi anu sederhana, upami anu hoyong diajar terang dimana sareng kumaha éta dianggo.

Ayeuna, tanpa basa-basi deui, hayu urang ngamimitian sareng ngobrol ngeunaan aplikasi anu bakal urang garap.

aplikasi ékspériméntal

Aplikasi urang bakal ngalakukeun ngan hiji fungsi. Butuh hiji kalimah salaku input, nu satutasna, ngagunakeun alat analisis téks, éta ngalakukeun analisis sentimen tina kalimah ieu, meunangkeun hiji assessment sikep emosi pangarang kalimah ka objék nu tangtu.

Ieu mangrupikeun jandela utama aplikasi ieu.

Tutorial Kubernetes Bagian 1: Aplikasi, Microservices, sareng Wadahna
Aplikasi wéb pikeun analisis sentimen téks

Tina sudut pandang téknis, aplikasina diwangun ku tilu jasa mikro, anu masing-masing ngarengsekeun sakumpulan masalah anu khusus:

  • SA-Frontend mangrupikeun pangladén wéb Nginx anu nyayogikeun file React statik.
  • SA-WebApp nyaéta aplikasi wéb anu ditulis dina Java anu ngolah pamundut ti frontend.
  • SA-Logic mangrupikeun aplikasi Python anu ngalaksanakeun analisis sentimen dina téks.

Kadé dicatet yén microservices teu aya dina isolasi. Aranjeunna ngalaksanakeun gagasan "separation of tanggung jawab", tapi dina waktos anu sareng aranjeunna kedah saling berinteraksi.

Tutorial Kubernetes Bagian 1: Aplikasi, Microservices, sareng Wadahna
Data ngalir dina aplikasi

Dina diagram di luhur, anjeun tiasa ningali tahapan wilanganana sistem, ngagambarkeun aliran data dina aplikasi. Hayu urang tingali aranjeunna:

  1. browser nu requests file ti server index.html (anu, kahareupna ngundeur pakét aplikasi React).
  2. Pamaké berinteraksi sareng aplikasi, ieu ngabalukarkeun panggero ka aplikasi wéb basis Spring.
  3. Aplikasi wéb neraskeun pamundut pikeun ngalakukeun analisa téks ka aplikasi Python.
  4. Aplikasi Python ngalaksanakeun analisis sentimen téks sareng ngabalikeun hasil salaku réspon kana pamundut.
  5. Aplikasi Spring ngirimkeun réspon kana aplikasi React (anu, kahareupna nunjukkeun hasil analisis téks ka pangguna).

Kode pikeun sakabéh aplikasi ieu bisa kapanggih di dieu. Kuring nyarankeun yén anjeun nyalin gudang ieu keur diri ayeuna, saprak aya loba percobaan metot kalawan eta dihareupeun urang.

Ngajalankeun aplikasi basis microservices dina mesin lokal Anjeun

Supados aplikasi tiasa dianggo, urang kedah ngamimitian sadaya tilu jasa mikro. Hayu urang mimitian ku anu paling lucu di antarana - aplikasi hareup-tungtung.

▍Set up React pikeun pangwangunan lokal

Pikeun ngajalankeun aplikasi React, anjeun kedah masang platform Node.js sareng NPM dina komputer anjeun. Sakali anjeun parantos dipasang sadayana ieu, paké terminal pikeun napigasi ka folder proyék anjeun sa-frontend sareng ngajalankeun paréntah di handap ieu:

npm install

Ku ngajalankeun paréntah ieu dina folder node_modules kagumantungan aplikasi React bakal dimuat, rékamanna aya dina file package.json. Sakali dependensi diunduh dina polder anu sami, jalankeun paréntah di handap ieu:

npm start

Éta hungkul. Ayeuna aplikasi React dijalankeun, anjeun tiasa ngaksés éta ku angkat ka alamat ieu dina panyungsi anjeun: localhost:3000. Anjeun tiasa ngarobah hiji hal dina kode na. Anjeun bakal langsung ningali pangaruh parobahan ieu dina browser. Ieu mungkin berkat nu disebut "panas" ngagantian modul. Hal ieu ngajadikeun ngembangkeun hareup-tungtung pangalaman basajan tur nikmat.

▍ Nyiapkeun aplikasi React pikeun produksi

Pikeun tujuan sabenerna ngagunakeun aplikasi React, urang kudu ngarobah kana susunan file statik sarta ngalayanan ka klien maké web server.

Pikeun ngawangun aplikasi React, nganggo terminal deui, arahkeun ka polder sa-frontend sareng ngajalankeun paréntah di handap ieu:

npm run build

Ieu bakal nyieun diréktori dina folder proyék build. Bakal ngandung sadaya file statik anu dipikabutuh pikeun aplikasi React tiasa jalan.

▍ Ngalayanan file statik nganggo Nginx

Mimiti anjeun kedah masang sareng ngajalankeun pangladén wéb Nginx. Ieu téh Anjeun tiasa ngundeur éta sarta manggihan parentah tentang kumaha carana install tur ngajalankeun eta. Teras anjeun kedah nyalin eusi polder sa-frontend/build kana map [your_nginx_installation_dir]/html.

Kalayan pendekatan ieu, file anu dihasilkeun nalika prosés ngawangun aplikasi React index.html bakal sadia di [your_nginx_installation_dir]/html/index.html. Ieu mangrupikeun file anu, sacara standar, ngahasilkeun server Nginx nalika ngaksés éta. server geus ngonpigurasi ngadangukeun on port nu 80, tapi tiasa disaluyukeun sakumaha anu anjeun peryogikeun ku ngédit file [your_nginx_installation_dir]/conf/nginx.conf.

Ayeuna buka browser anjeun sarta buka localhost:80. Anjeun bakal ningali halaman aplikasi React.

Tutorial Kubernetes Bagian 1: Aplikasi, Microservices, sareng Wadahna
Aplikasi meta dilayanan ku server Nginx

Lamun ayeuna ngasupkeun hiji hal kana widang Type your sentence tur pencét tombol Send - euweuh bakal kajadian. Tapi, upami anjeun ningali konsol, anjeun tiasa ningali pesen kasalahan di dinya. Dina raraga ngartos dimana persis kasalahan ieu lumangsung, hayu urang nganalisis kode aplikasi.

▍ Analisis kode aplikasi hareup-tungtung

Nyokot katingal dina kode file App.js, urang tiasa ningali yén mencét tombol Send nelepon métode analyzeSentence(). Kodeu pikeun metoda ieu dirumuskeun di handap. Punten dicatet yén pikeun unggal baris anu gaduh koméntar bentuk # Номер, aya katerangan di handap kode. Urang bakal nganalisis fragmen kode anu sanés dina cara anu sami.

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 dimana pamundut POST dijieun. Hal ieu dianggap yén aya hiji aplikasi dina alamat ieu nu nyangka requests misalna.

2.Badan pamundut dikirim ka aplikasi. Ieu conto badan pamundut:

{
    sentence: "I like yogobella!"
}

3.Nalika réspon kana pamundut ditampi, kaayaan komponénna diropéa. Ieu nyababkeun komponénna di-render deui. Upami kami nampi data (nyaéta, obyék JSON anu ngandung data input sareng skor téks anu diitung), kami bakal ngaluarkeun komponén. Polarity, sabab kaayaan anu pas bakal dicumponan. Ieu kumaha urang ngajelaskeun komponén:

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

Kodeu sigana tiasa dianggo lumayan. Naon salahna ieu? Upami anjeun nganggap yén dina alamat dimana aplikasi nyobian ngirim pamundut POST, teu acan aya anu tiasa nampi sareng ngolah pamundut ieu, maka anjeun leres pisan. Nyaéta, pikeun ngolah requests narima di http://localhost:8080/sentiment, urang kedah ngajalankeun aplikasi wéb dumasar kana Spring.

Tutorial Kubernetes Bagian 1: Aplikasi, Microservices, sareng Wadahna
Kami peryogi aplikasi Spring anu tiasa nampi pamundut POST

▍ Nyetél aplikasi wéb dumasar Spring

Pikeun nyebarkeun aplikasi Spring, anjeun peryogi JDK8 sareng Maven sareng variabel lingkungan anu dikonpigurasi leres. Saatos sadaya ieu dipasang, anjeun tiasa teras-terasan ngerjakeun proyék kami.

▍ Bungkusan aplikasi kana file jar

Napigasi, maké terminal, ka polder sa-webapp sareng lebetkeun paréntah di handap ieu:

mvn install

Saatos ngajalankeun paréntah ieu dina folder sa-webapp diréktori bakal dijieun target. Ieu dimana aplikasi Java bakal lokasina, rangkep dina file jar, digambarkeun ku file sentiment-analysis-web-0.0.1-SNAPSHOT.jar.

▍Ngajalankeun aplikasi Java

Buka polder target sareng ngajalankeun aplikasi kalayan paréntah di handap ieu:

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

Kasalahan bakal lumangsung nalika ngalaksanakeun paréntah ieu. Pikeun ngamimitian ngalereskeunana, urang tiasa nganalisis rinci pengecualian dina data jejak tumpukan:

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

Pikeun urang, hal anu paling penting di dieu nyaéta nyebatkeun teu mungkin pikeun ngajelaskeun makna sa.logic.api.url. Hayu urang analisa kode dimana kasalahan lumangsung.

▍Analisis kode aplikasi Java

Ieu snippet kode dimana kasalahan lumangsung.

@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. Dina SentimentController aya sawah saLogicApiUrl. nilai na dieusian ku harta sa.logic.api.url.
  2. Jalur saLogicApiUrl concatenates jeung nilai /analyse/sentiment. Babarengan ngabentuk alamat pikeun nelepon ka microservice anu ngalakukeun analisis téks.

▍Setel nilai sipat

Dina musim semi, sumber standar nilai sipat nyaéta file application.properties, anu tiasa dipendakan di sa-webapp/src/main/resources. Tapi pamakéan na teu hijina cara pikeun ngeset nilai sipat. Ieu ogé tiasa dilakukeun nganggo paréntah di handap ieu:

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

Nilai sipat ieu kedah nunjuk ka alamat aplikasi Python urang.

Ku ngonpigurasikeunana, kami nyarioskeun aplikasi wéb Spring dimana éta kedah angkat pikeun ngalaksanakeun pamundut analisa téks.

Dina raraga teu ngahesekeun hirup urang, urang bakal mutuskeun yén aplikasi Python bakal sadia di localhost:5000 sarta hayu urang coba ulah poho ngeunaan eta. Hasilna, paréntah pikeun ngaluncurkeun aplikasi Spring bakal katingali sapertos kieu:

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

Tutorial Kubernetes Bagian 1: Aplikasi, Microservices, sareng Wadahna
Sistem kami leungit aplikasi Python

Ayeuna anu kedah urang laksanakeun nyaéta ngajalankeun aplikasi Python sareng sistemna bakal tiasa dianggo sapertos anu diharapkeun.

▍ Nyetél aplikasi Python

Pikeun ngajalankeun aplikasi Python, anjeun kudu boga Python 3 sarta Pip dipasang, sarta variabel lingkungan luyu kudu diatur leres.

▍ Masang dependensi

Pindah ka folder proyék anjeun sa-logic/sa sareng ngajalankeun paréntah di handap ieu:

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

▍ Jalankeun aplikasina

Saatos masang dependensi, kami siap ngajalankeun aplikasi:

python sentiment_analysis.py

Saatos ngajalankeun paréntah ieu kami bakal disarioskeun kieu:

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

Ieu ngandung harti yén aplikasi keur ngajalankeun sarta ngantosan requests di localhost:5000/

▍ Panalungtikan Kode

Hayu urang tingali kode aplikasi Python pikeun ngartos kumaha ngaréspon kana pamundut:

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. Initializing hiji obyék Flask.
  2. Nangtukeun alamat pikeun ngalaksanakeun requests POST ka dinya.
  3. Retrieving Harta a sentence ti badan pamundut.
  4. Initializing hiji Objék Anonim TextBlob jeung meunang nilai polarity pikeun kalimah munggaran ditampi dina awak pamundut (dina hal urang, ieu téh hiji-hijina kalimah dikirim pikeun analisis).
  5. Ngabalikeun réspon anu awakna ngandung téks kalimah sareng indikator diitung pikeun éta polarity.
  6. Jalankeun aplikasi Flask, anu bakal sayogi di 0.0.0.0:5000 (anjeun ogé tiasa ngaksés éta nganggo konstruksi formulir localhost:5000).

The microservices nu nyieun aplikasi ayeuna jalan. Aranjeunna katala pikeun interaksi saling. Ieu sapertos diagram aplikasi dina tahap padamelan ieu.

Tutorial Kubernetes Bagian 1: Aplikasi, Microservices, sareng Wadahna
Sadaya microservices nu nyieun aplikasi nu dibawa kana urutan gawé

Ayeuna, sateuacan anjeun neraskeun, buka aplikasi React anjeun dina browser sareng cobian nga-parse sababaraha kalimat sareng éta. Lamun sagalana geus rengse neuleu - sanggeus mencét tombol Send Anjeun bakal ningali hasil analisis di handap widang téks.

Dina bagian salajengna, urang bakal ngobrol ngeunaan kumaha ngajalankeun microservices kami dina wadah Docker. Ieu diperlukeun pikeun nyiapkeun aplikasi pikeun ngajalankeun dina klaster Kubernetes.

Docker wadahna

Kubernetes nyaéta sistem pikeun ngajadikeun otomatis panyebaran, skala sareng manajemén aplikasi wadahna. Éta ogé disebut "orchestrator wadah". Upami Kubernetes tiasa dianggo sareng wadah, maka sateuacan nganggo sistem ieu urang kedah nyandak wadah ieu heula. Tapi ke heula, hayu urang ngobrol ngeunaan naon wadahna. Panginten jawaban anu pangsaéna pikeun patarosan ngeunaan naon éta tiasa dipendakan dokuméntasi ka Docker:

Gambar wadahna mangrupikeun pakét anu ringan, mandiri, tiasa dieksekusi anu ngandung aplikasi, anu kalebet sadayana anu dipikabutuh pikeun ngajalankeunana: kode aplikasi, lingkungan palaksanaan, alat sistem sareng perpustakaan, setélan. Program kontainer tiasa dianggo dina lingkungan Linux sareng Windows, sareng aranjeunna bakal tiasa dianggo sami henteu paduli infrastrukturna.

Ieu ngandung harti yén wadahna tiasa dijalankeun dina komputer mana waé, kalebet server produksi, sareng aplikasi anu aya dina éta bakal tiasa dianggo dina lingkungan mana waé.

Pikeun ngajalajah fitur wadah sareng ngabandingkeunana sareng cara anu sanés pikeun ngajalankeun aplikasi, hayu urang tingali conto ngalayanan aplikasi React nganggo mesin virtual sareng wadahna.

▍Ngalayanan file statik tina aplikasi React nganggo mesin virtual

Nyobian ngatur jasa file statik nganggo mesin virtual, urang bakal mendakan kalemahan ieu:

  1. pamakéan sumberdaya teu efisien, saprak unggal mesin virtual mangrupakeun sistem operasi full-fledged.
  2. kagumantungan platform. Naon jalan dina komputer lokal bisa jadi teu dianggo dina server produksi.
  3. Skala slow sarta sumberdaya-intensif tina solusi basis mesin virtual.

Tutorial Kubernetes Bagian 1: Aplikasi, Microservices, sareng Wadahna
Pangladén wéb Nginx ngalayanan file statik anu dijalankeun dina mesin virtual

Upami wadahna dianggo pikeun ngarengsekeun masalah anu sami, maka, dibandingkeun sareng mesin virtual, kaunggulan ieu tiasa dicatet:

  1. pamakéan efisien sumberdaya: gawé bareng sistem operasi maké Docker.
  2. bebas platform. Wadah anu tiasa dijalankeun ku pamekar dina komputerna tiasa dianggo dimana waé.
  3. deployment lightweight ngaliwatan pamakéan lapisan gambar.

Tutorial Kubernetes Bagian 1: Aplikasi, Microservices, sareng Wadahna
Pangladén wéb Nginx ngalayanan file statik anu dijalankeun dina wadah

Urang ukur dibandingkeun mesin virtual jeung peti dina sababaraha titik, tapi sanajan ieu cukup pikeun ngarasakeun kakuatan tina wadahna. Ieu téh Anjeun tiasa mendakan detil ngeunaan wadah Docker.

▍Ngawangun gambar wadah pikeun aplikasi React

Blok wangunan dasar wadah Docker nyaéta file Dockerfile. Dina awal file ieu, rékaman dijieun tina gambar dasar wadahna, lajeng aya runtuyan parentah nu nunjukkeun kumaha carana nyieun hiji wadah anu bakal minuhan kaperluan aplikasi nu tangtu.

Sateuacan urang ngamimitian damel sareng file Dockerfile, hayu urang émut naon anu urang lakukeun pikeun nyiapkeun file aplikasi React pikeun diunggah ka server Nginx:

  1. Ngawangun paket aplikasi React (npm run build).
  2. Ngamimitian server Nginx.
  3. Nyalin eusi diréktori build ti folder proyék sa-frontend kana folder server nginx/html.

Di handap ieu anjeun tiasa ningali paralel antara nyiptakeun wadah sareng léngkah-léngkah di luhur anu dilakukeun dina komputer lokal anjeun.

▍ Nyiapkeun Dockerfile pikeun aplikasi SA-Frontend

Parentah anu bakal dikandung dina Dockerfile pikeun aplikasi SA-Frontend, diwangun ku ngan dua tim. Kanyataanna nyaéta tim pamekaran Nginx parantos nyiapkeun dasar gambaran pikeun Nginx, anu bakal kami anggo pikeun nyiptakeun gambar kami. Ieu mangrupikeun dua léngkah anu urang kedah terangkeun:

  1. Dasar gambar kedah janten gambar Nginx.
  2. Eusi folder sa-frontend/build kudu disalin ka folder gambar nginx/html.

Upami anjeun angkat tina pedaran ieu kana file Dockerfile, mangka bakal kasampak kawas kieu:

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

Sakumaha anjeun tiasa tingali, sagalana di dieu pisan basajan, sarta eusi file malah tétéla rada bisa dibaca tur kaharti. Berkas ieu nyarioskeun sistem pikeun nyandak gambar nginx kalawan sagalana nu geus aya di dinya, sarta nyalin eusi diréktori build kana diréktori nginx/html.

Di dieu anjeun tiasa gaduh patarosan ngeunaan kumaha kuring terang dimana anjeun kedah nyalin file tina polder build, nyaeta, ti mana jalan asalna /usr/share/nginx/html. Kanyataanna, aya nanaon pajeulit di dieu boh. Kanyataanna nyaéta inpormasi anu relevan tiasa dipendakan dina katerangan gambar.

▍Ngawangun gambar sareng unggah kana gudang

Sateuacan urang tiasa damel sareng gambar réngsé, urang kedah nyorong kana gudang gambar. Jang ngalampahkeun ieu, kami bakal nganggo platform hosting gambar awan gratis Docker Hub. Dina tahap ieu karya anjeun kedah ngalakukeun ieu:

  1. Pasang Docker.
  2. Ngadaptar dina ramatloka Docker Hub.
  3. Asup ka akun anjeun ku ngajalankeun paréntah di handap ieu dina terminal:
    docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"

Ayeuna anjeun kedah nganggo terminal pikeun muka diréktori sa-frontend sareng ngajalankeun paréntah di handap ieu di dinya:

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

Di dieu sarta salajengna dina paréntah sarupa $DOCKER_USER_ID kudu diganti ku ngaran pamaké Docker Hub Anjeun. Contona, ieu bagian tina paréntah bisa kasampak kawas kieu: rinormaloku/sentiment-analysis-frontend.

Dina hal ieu, paréntah ieu bisa disingget ku nyoplokkeun ti dinya -f Dockerfile, kumargi file ieu parantos aya dina folder dimana urang ngalaksanakeun paréntah ieu.

Dina raraga ngirim gambar rengse ka Repository nu, urang peryogi paréntah di handap:

docker push $DOCKER_USER_ID/sentiment-analysis-frontend

Saatos réngsé, pariksa daptar repositori anjeun dina Docker Hub supados ngartos naha unggah gambar ka panyimpenan awan suksés.

▍ Ngajalankeun wadah

Ayeuna saha waé tiasa ngaunduh sareng ngajalankeun gambar, anu katelah $DOCKER_USER_ID/sentiment-analysis-frontend. Pikeun ngalakukeun ieu, anjeun kedah ngajalankeun sekuen paréntah di handap ieu:

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

Ayeuna wadahna jalan, urang tiasa teraskeun damel ku nyiptakeun gambar anu sanés anu urang peryogikeun. Tapi sateuacan urang neraskeun, hayu urang ngartos desain 80:80, anu muncul dina paréntah peluncuran gambar sareng sigana matak ngabingungkeun.

  • Nomer kahiji 80 — ieu mangrupikeun nomer port host (nyaéta, komputer lokal).
  • Nomer kadua 80 nyaeta port wadahna nu pamundut kudu diteruskeun.

Perhatikeun ilustrasi ieu di handap.

Tutorial Kubernetes Bagian 1: Aplikasi, Microservices, sareng Wadahna
Port Neraskeun

Sistim nu alihan requests ti palabuhan <hostPort> ka palabuhan <containerPort>. Hartina, aksés ka palabuhan 80 komputer dialihkeun ka port 80 wadahna.

Kusabab palabuhan 80 dibuka dina komputer lokal, teras anjeun tiasa ngaksés aplikasi tina komputer ieu di localhost:80. Upami sistem anjeun henteu ngadukung Docker, aplikasina tiasa dijalankeun dina mesin virtual Docker, alamatna bakal katingali sapertos <docker-machine ip>:80. Pikeun milarian alamat IP tina mesin virtual Docker, anjeun tiasa nganggo paréntah docker-machine ip.

Dina titik ieu, saatos suksés ngaluncurkeun wadah aplikasi hareup, anjeun kedah tiasa muka halamanna dina browser.

▍ Berkas .dockerignore

Ngumpulkeun gambar aplikasi SA-Frontend, urang tiasa perhatikeun yén prosés ieu tétéla lambat pisan. Ieu kajadian sabab kontéks ngawangun gambar kedah dikirim ka daemon Docker. Diréktori ngalambangkeun kontéks ngawangun dieusian salaku argumen panungtungan paréntah docker build. Dina kasus urang, aya titik dina tungtung paréntah ieu. Ieu nyababkeun struktur di handap ieu kalebet dina kontéks ngawangun:

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

Tapi sadaya polder anu aya di dieu, urang ngan ukur peryogi polder build. Loading nanaon sejenna nyaeta runtah waktu. Anjeun tiasa nyepetkeun ngawangun ku nyarioskeun ka Docker dimana diréktori anu teu dipalire. Pikeun ngalakukeun ieu, urang peryogi file .dockerignore. Anjeun, upami anjeun wawuh jeung file .gitignore, struktur file ieu sigana sigana akrab. Éta daptar diréktori anu tiasa dipaliré ku sistem ngawangun gambar. Dina kasus urang, eusi file ieu kasampak kawas kieu:

node_modules
src
public

file .dockerignore kedah aya dina folder anu sami sareng file Dockerfile. Ayeuna ngawangun gambar bakal butuh sababaraha detik.

Hayu urang ayeuna dianggo dina gambar pikeun aplikasi Java.

▍Ngawangun gambar wadah pikeun aplikasi Java

Anjeun terang naon, anjeun parantos diajar sadayana anu anjeun kedah terang pikeun nyiptakeun gambar wadahna. Éta pisan sababna naha bagian ieu bakal pisan pondok.

Buka file Dockerfilenu aya dina folder proyék sa-webapp. Upami anjeun maca téks file ieu, anjeun ngan ukur ningali dua konstruksi énggal di jerona, dimimitian ku kecap konci ENV и EXPOSE:

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

Kecap konci ENV Ngidinan anjeun nyatakeun variabel lingkungan di jero wadah Docker. Khususna, dina kasus urang, éta ngamungkinkeun anjeun pikeun netepkeun URL pikeun ngakses API aplikasi anu ngalaksanakeun analisis téks.

Kecap konci EXPOSE ngidinan Anjeun pikeun ngabejaan Docker pikeun muka port a. Urang bade nganggo port ieu nalika ngajalankeun aplikasi. Di dieu anjeun bisa perhatikeun yén dina Dockerfile pikeun aplikasi SA-Frontend teu aya parentah kitu. Ieu ngan keur kaperluan dokuméntasi, dina basa sejen, konstruksi ieu dimaksudkeun pikeun hiji anu bakal maca Dockerfile.

Ngawangun gambar sareng nyorong kana gudang katingalina sami sareng conto sateuacana. Upami anjeun henteu acan yakin pisan kana kamampuan anjeun, paréntah anu cocog tiasa dipendakan dina file README.md dina folder sa-webapp.

▍Ngawangun gambar wadahna pikeun aplikasi Python

Lamun ningali eusi file Dockerfile dina folder sa-logic, mangka anjeun moal manggihan hal anyar pikeun diri aya. Paréntah pikeun ngawangun gambar sareng ngirimkeunana ka gudang ogé kedah anjeun wawuh, tapi, sapertos aplikasi kami anu sanés, aranjeunna tiasa dipendakan dina file. README.md dina folder sa-logic.

▍ Nguji aplikasi wadahna

Naha anjeun tiasa percanten kana hal anu anjeun teu acan diuji? Abdi henteu tiasa teuing. Hayu urang nguji wadahna urang.

  1. Hayu urang ngajalankeun wadahna aplikasi sa-logic tur ngonpigurasikeun eta ngadangukeun on port nu 5050:
    docker run -d -p 5050:5000 $DOCKER_USER_ID/sentiment-analysis-logic
  2. Hayu urang ngajalankeun wadahna aplikasi sa-webapp tur ngonpigurasikeun eta ngadangukeun on port nu 8080. Sajaba ti éta, urang kudu ngonpigurasikeun port nu aplikasi Python bakal ngadangukeun requests ti aplikasi Java ku reassigning variabel lingkungan. 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

Pikeun neuleuman kumaha carana manggihan alamat IP tina wadah Docker atawa mesin virtual, tingal file README.

Hayu urang ngajalankeun wadahna aplikasi sa-frontend:

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

Ayeuna sagalana geus siap pikeun muka alamat dina browser localhost:80 sareng cobian aplikasina.

Punten dicatet yén upami anjeun ngarobih port pikeun sa-webapp, atanapi upami anjeun ngajalankeun mesin virtual Docker, anjeun kedah ngédit filena App.js tina polder sa-frontendku cara ngarobah alamat IP atawa nomer port dina metoda analyzeSentence(), ngaganti informasi ayeuna tinimbang data luntur. Sanggeus ieu, anjeun kudu reassemble gambar jeung make eta.

Ieu sapertos diagram aplikasi urang ayeuna.

Tutorial Kubernetes Bagian 1: Aplikasi, Microservices, sareng Wadahna
Microservices ngajalankeun dina peti

Ringkesan: naha urang peryogi klaster Kubernetes?

Kami nembé nalungtik file Dockerfile, Dikaitkeun kumaha cara ngawangun gambar sareng nyorong kana gudang Docker. Salaku tambahan, urang diajar kumaha nyepetkeun rakitan gambar nganggo file .dockerignore. Hasilna, microservices kami ayeuna dijalankeun dina wadah Docker. Di dieu anjeun tiasa gaduh patarosan anu leres-leres ngeunaan naha urang peryogi Kubernetes. Bagian kadua bahan ieu bakal devoted pikeun ngajawab patarosan ieu. Samentawis waktos, pertimbangkeun patarosan ieu:
Hayu urang anggap yén aplikasi wéb urang pikeun analisis téks geus jadi populér sakuliah dunya. Jutaan paménta datang ka anjeunna unggal menit. Ieu ngandung harti yén microservices sa-webapp и sa-logic bakal aya dina beban anu ageung. Kumaha skala wadah anu ngajalankeun microservices?

Tutorial Kubernetes Bagian 1: Aplikasi, Microservices, sareng Wadahna

sumber: www.habr.com

Tambahkeun komentar