Tutorial Kubernetes Part 1: Aplikasi, Layanan Mikro, lan Wadah

Ing panyuwunan kita, Habr nggawe hub Kubernetes lan kita pleased kanggo nyelehake publikasi pisanan ing. Langganan!

Kubernetes iku gampang. Yagene bank-bank mbayar dhuwit akeh kanggo kerja ing wilayah iki, dene sapa wae bisa nguwasani teknologi iki mung sawetara jam?

Tutorial Kubernetes Part 1: Aplikasi, Layanan Mikro, lan Wadah

Yen sampeyan ragu yen Kubernetes bisa sinau kanthi cepet, aku saranake sampeyan nyoba dhewe. Yaiku, sawise nguwasani materi iki, sampeyan bakal bisa mbukak aplikasi adhedhasar layanan mikro ing kluster Kubernetes. Aku bisa njamin iki, amarga metodologi sing padha digunakake ing kene sing dakwulangake marang klien kanggo nggarap Kubernetes. Apa sing ndadekake pandhuan iki beda karo liyane? Nyatane, ana akeh perkara. Dadi, umume bahan kasebut diwiwiti kanthi panjelasan babagan prasaja - konsep Kubernetes lan fitur perintah kubectl. Penulis bahan kasebut nganggep manawa para pamaca wis kenal karo pangembangan aplikasi, layanan mikro, lan wadah Docker. Kita bakal pindhah dalan liyane. Kaping pisanan, kita bakal ngomong babagan cara mbukak aplikasi adhedhasar layanan mikro ing komputer. Banjur kita bakal ndeleng bangunan gambar wadhah kanggo saben layanan mikro. Lan sawise iku, kita bakal kenal karo Kubernetes lan ndeleng nggunakake aplikasi adhedhasar layanan mikro ing kluster sing dikelola dening Kubernetes.

Pendekatan iki, kanthi pendekatan bertahap menyang Kubernetes, bakal menehi pangerten sing jero babagan apa sing kedadeyan sing perlu kanggo wong rata-rata supaya ngerti carane kabeh bisa digunakake ing Kubernetes. Kubernetes mesthi teknologi sing prasaja, yen sing pengin sinau ngerti ngendi lan carane nggunakake.

Saiki, tanpa ado maneh, ayo miwiti lan ngomong babagan aplikasi sing bakal digunakake.

Aplikasi eksperimental

Aplikasi kita bakal nindakake mung siji fungsi. Dibutuhake siji ukara minangka input, sawise nggunakake alat analisis teks, nindakake analisis sentimen saka ukara iki, entuk evaluasi sikap emosional penulis ukara menyang obyek tartamtu.

Iki minangka jendela utama aplikasi iki.

Tutorial Kubernetes Part 1: Aplikasi, Layanan Mikro, lan Wadah
Aplikasi web kanggo analisis sentimen teks

Saka sudut pandang teknis, aplikasi kasebut kalebu telung layanan mikro, sing saben-saben ngrampungake sawetara masalah tartamtu:

  • SA-Frontend minangka server web Nginx sing nyedhiyakake file React statis.
  • SA-WebApp minangka aplikasi web sing ditulis ing Jawa sing ngolah panjalukan saka frontend.
  • SA-Logic minangka aplikasi Python sing nindakake analisis sentimen babagan teks.

Wigati dimangerteni manawa layanan mikro ora ana ing kapisah. Padha ngleksanakake gagasan "pemisahan tanggung jawab", nanging ing wektu sing padha kudu sesambungan karo saben liyane.

Tutorial Kubernetes Part 1: Aplikasi, Layanan Mikro, lan Wadah
Data mili ing aplikasi

Ing diagram ing ndhuwur, sampeyan bisa ndeleng tahapan nomer sistem, nggambarake aliran data ing aplikasi kasebut. Ayo padha ndeleng:

  1. Browser njaluk file saka server index.html (sing banjur ngundhuh paket aplikasi React).
  2. Pangguna sesambungan karo aplikasi, iki nyebabake telpon kanggo aplikasi web basis Spring.
  3. Aplikasi web nerusake panjalukan kanggo nindakake analisis teks menyang aplikasi Python.
  4. Aplikasi Python nindakake analisis sentimen teks lan ngasilake asil minangka respon kanggo panjaluk kasebut.
  5. Aplikasi Spring ngirim respon menyang aplikasi React (sing nuduhake asil analisis teks menyang pangguna).

Kode kanggo kabeh aplikasi kasebut bisa ditemokake kene. Aku nyaranake sampeyan nyalin gudang iki kanggo sampeyan saiki, amarga ana akeh eksperimen sing menarik ing ngarep.

Mbukak aplikasi basis microservices ing mesin lokal

Supaya aplikasi bisa digunakake, kita kudu miwiti kabeh telung layanan mikro. Ayo dadi miwiti karo paling cutest kabeh - aplikasi ngarep-mburi.

▍Setel React kanggo pangembangan lokal

Kanggo mbukak aplikasi React, sampeyan kudu nginstal platform Node.js lan NPM ing komputer. Sawise kabeh wis diinstal, gunakake terminal kanggo navigasi menyang folder proyek sampeyan sa-frontend lan jalanake printah ing ngisor iki:

npm install

Kanthi mbukak printah iki ing folder node_modules dependensi saka aplikasi React bakal dimuat, cathetan sing ana ing file package.json. Sawise dependensi diundhuh ing folder sing padha, jalanake printah ing ngisor iki:

npm start

Mekaten. Saiki aplikasi React lagi mlaku, sampeyan bisa ngakses kanthi pindhah menyang alamat ing ngisor iki ing browser sampeyan: localhost:3000. Sampeyan bisa ngganti soko ing kode sawijining. Sampeyan bakal langsung ndeleng efek saka owah-owahan kasebut ing browser. Iki bisa uga amarga panggantos "panas" modul. Iki nggawe pangembangan ngarep dadi pengalaman sing gampang lan nyenengake.

▍Nyiapake aplikasi React kanggo produksi

Kanggo tujuan nggunakake aplikasi React, kita kudu ngowahi file statis dadi set file statis lan ngladeni menyang klien nggunakake server web.

Kanggo mbangun aplikasi React, maneh nggunakake terminal, navigasi menyang folder sa-frontend lan jalanake printah ing ngisor iki:

npm run build

Iki bakal nggawe direktori ing folder proyek build. Bakal ngemot kabeh file statis sing dibutuhake supaya aplikasi React bisa mlaku.

▍Nglayani file statis nggunakake Nginx

Pisanan sampeyan kudu nginstal lan mbukak server web Nginx. iku sampeyan bisa ngundhuh lan nemokake instruksi babagan carane nginstal lan mbukak. Banjur sampeyan kudu nyalin isi folder kasebut sa-frontend/build menyang folder [your_nginx_installation_dir]/html.

Kanthi pendekatan iki, file sing digawe sajrone proses mbangun aplikasi React index.html bakal kasedhiya ing [your_nginx_installation_dir]/html/index.html. Iki minangka file sing, kanthi standar, diprodhuksi dening server Nginx nalika ngakses. Server diatur kanggo ngrungokake ing port 80, nanging bisa disesuaikan kanthi cara sing dibutuhake kanthi nyunting file kasebut [your_nginx_installation_dir]/conf/nginx.conf.

Saiki bukak browser lan pindhah menyang localhost:80. Sampeyan bakal weruh kaca aplikasi React.

Tutorial Kubernetes Part 1: Aplikasi, Layanan Mikro, lan Wadah
Aplikasi reaksi sing dilayani dening server Nginx

Yen sampeyan saiki ngetik soko menyang lapangan Type your sentence lan pencet tombol Send - ora bakal kelakon. Nanging, yen katon ing console, sampeyan bisa ndeleng pesen kesalahan ana. Kanggo mangerteni ing ngendi kesalahan kasebut kedadeyan, ayo nganalisa kode aplikasi.

▍Analisis kode aplikasi ngarep

Njupuk dipikir ing kode file App.js, kita bisa ndeleng sing mencet tombol Send nelpon cara analyzeSentence(). Kode kanggo cara iki diwenehi ing ngisor iki. Wigati dimangerteni manawa kanggo saben baris sing duwe komentar babagan formulir kasebut # Номер, ana panjelasan ing ngisor kode kasebut. Kita bakal nganalisa fragmen kode liyane kanthi cara sing padha.

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 sing dijaluk POST digawe. Dianggep manawa ana aplikasi ing alamat iki sing ngarepake panjaluk kasebut.

2.Badan panyuwunan dikirim menyang aplikasi. Punika conto badan panyuwunan:

{
    sentence: "I like yogobella!"
}

3.Nalika nanggepi panjalukan ditampa, negara komponen dianyari. Iki ndadékaké kanggo re-render komponen. Yen kita nampa data (yaiku, obyek JSON sing ngemot data input lan skor teks sing diwilang), kita bakal ngasilake komponen kasebut. Polarity, amarga kahanan sing cocog bakal ditindakake. Mangkene carane kita nerangake komponen kasebut:

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

Kode kasebut katon apik banget. Apa sing salah karo iki? Yen sampeyan nganggep manawa ing alamat sing aplikasi nyoba ngirim panjalukan POST, durung ana sing bisa nampa lan ngolah panjaluk iki, mula sampeyan bakal bener. Yaiku, kanggo proses panjalukan ditampa ing http://localhost:8080/sentiment, kita kudu mbukak aplikasi web adhedhasar Spring.

Tutorial Kubernetes Part 1: Aplikasi, Layanan Mikro, lan Wadah
Kita butuh aplikasi Spring sing bisa nampa panjaluk POST

▍ Nyetel aplikasi web adhedhasar Spring

Kanggo nyebarake aplikasi Spring, sampeyan butuh JDK8 lan Maven lan variabel lingkungan sing dikonfigurasi kanthi bener. Sawise sampeyan wis nginstal kabeh iki, sampeyan bisa nerusake nggarap proyek kita.

▍Ngemas aplikasi menyang file jar

Navigasi, nggunakake terminal, menyang folder sa-webapp lan ketik printah ing ngisor iki:

mvn install

Sawise mbukak printah iki ing folder sa-webapp direktori bakal digawe target. Iki ngendi aplikasi Java bakal dumunung, dikemas ing file jar, diwakili dening file sentiment-analysis-web-0.0.1-SNAPSHOT.jar.

▍Mlakukake aplikasi Java

Bukak folder target lan mbukak aplikasi kanthi printah ing ngisor iki:

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

Ana kesalahan nalika nglakokake printah iki. Kanggo miwiti ndandani, kita bisa nganalisa rincian pangecualian ing data tilak 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}"

Kanggo kita, sing paling penting ing kene yaiku nyebutake mokal kanggo njlentrehake makna sa.logic.api.url. Ayo analisa kode sing ana kesalahan.

▍Analisis kode aplikasi Jawa

Iki minangka potongan kode ing ngendi ana kesalahan.

@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. Ing SentimentController ana sawah saLogicApiUrl. Nilai kasebut ditemtokake dening properti kasebut sa.logic.api.url.
  2. Senar saLogicApiUrl concatenates karo nilai /analyse/sentiment. Bareng nggawe alamat kanggo nelpon menyang layanan mikro sing nindakake analisis teks.

▍Setel nilai properti

Ing musim semi, sumber standar nilai properti yaiku file application.properties, sing bisa ditemokake ing sa-webapp/src/main/resources. Nanging panggunaane ora mung cara kanggo nyetel nilai properti. Iki uga bisa ditindakake kanthi nggunakake printah ing ngisor iki:

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

Nilai properti iki kudu nuduhake alamat aplikasi Python kita.

Kanthi ngonfigurasi, kita ngandhani aplikasi web Spring sing kudu ditindakake kanggo nindakake panjaluk analisis teks.

Supaya ora kanggo complicate urip kita, kita bakal mutusaké sing aplikasi Python bakal kasedhiya ing localhost:5000 lan ayo padha nyoba ora lali babagan. Akibaté, printah kanggo mbukak aplikasi Spring bakal katon kaya iki:

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

Tutorial Kubernetes Part 1: Aplikasi, Layanan Mikro, lan Wadah
Sistem kita ilang aplikasi Python

Saiki kabeh sing kudu ditindakake yaiku mbukak aplikasi Python lan sistem bakal bisa digunakake kaya sing dikarepake.

▍ Nyetel aplikasi Python

Kanggo mbukak aplikasi Python, sampeyan kudu nginstal Python 3 lan Pip, lan variabel lingkungan sing cocog kudu disetel kanthi bener.

▍ Nginstal dependensi

Pindhah menyang folder proyek sampeyan sa-logic/sa lan jalanake printah ing ngisor iki:

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

▍Bukak aplikasi

Sawise nginstal dependensi, kita siyap kanggo mbukak aplikasi:

python sentiment_analysis.py

Sawise nindakake printah iki, kita bakal diwenehi ing ngisor iki:

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

Iki tegese aplikasi lagi mlaku lan nunggu panjalukan ing localhost:5000/

▍ Riset Kode

Ayo goleki kode aplikasi Python kanggo mangerteni carane nanggapi panjalukan:

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 obyek Flask.
  2. Nemtokake alamat kanggo nindakake panjalukan POST.
  3. Njupuk Properti sentence saka badan panyuwunan.
  4. Inisialisasi Obyek Anonim TextBlob lan entuk nilai polarity kanggo ukara pisanan sing ditampa ing awak panyuwunan (ing kasus kita, iki mung ukara sing dikirim kanggo analisis).
  5. Wangsulan tanggap wacana ingkang isinipun teks ukara saha indikator ingkang dipunetang polarity.
  6. Bukak aplikasi Flask, sing bakal kasedhiya ing 0.0.0.0:5000 (sampeyan uga bisa ngakses kanthi nggunakake konstruksi formulir localhost:5000).

Layanan mikro sing nggawe aplikasi saiki mlaku. Padha disetel kanggo sesambungan karo saben liyane. Iki minangka diagram aplikasi ing tahap kerja iki.

Tutorial Kubernetes Part 1: Aplikasi, Layanan Mikro, lan Wadah
Kabeh layanan mikro sing nggawe aplikasi digawa menyang urutan kerja

Saiki, sadurunge nerusake, bukak aplikasi React ing browser lan coba parsing sawetara ukara. Yen kabeh wis rampung kanthi bener - sawise mencet tombol Send sampeyan bakal weruh asil analisis ing ngisor kolom teks.

Ing bagean sabanjure, kita bakal ngomong babagan cara mbukak layanan mikro ing wadhah Docker. Iki perlu kanggo nyiapake aplikasi kanggo mbukak ing kluster Kubernetes.

Wadhah Docker

Kubernetes minangka sistem kanggo ngotomatisasi panyebaran, skala lan manajemen aplikasi wadah. Iki uga disebut "orkestra kontainer". Yen Kubernetes nggarap kontainer, mula sadurunge nggunakake sistem iki, kita kudu entuk kontainer kasebut. Nanging pisanan, ayo ngomong babagan apa wadah kasebut. Mbok menawa jawaban sing paling apik kanggo pitakonan apa sing bisa ditemokake dokumentasi menyang Docker:

Gambar wadhah minangka paket eksekusi sing entheng, mandhiri, sing ngemot aplikasi, sing kalebu kabeh sing dibutuhake kanggo mbukak: kode aplikasi, lingkungan eksekusi, alat sistem lan perpustakaan, setelan. program Containerized bisa digunakake ing Linux lan Windows lingkungan, lan padha bakal tansah bisa digunakake preduli saka infrastruktur.

Iki tegese kontaner bisa mbukak ing komputer apa wae, kalebu server produksi, lan aplikasi sing ana ing kono bakal bisa digunakake ing lingkungan apa wae.

Kanggo njelajah fitur wadhah lan mbandhingake karo cara liya kanggo mbukak aplikasi, ayo goleki conto ngladeni aplikasi React nggunakake mesin virtual lan wadhah.

▍Nglayani file statis aplikasi React nggunakake mesin virtual

Nyoba ngatur layanan file statis nggunakake mesin virtual, kita bakal nemoni kekurangan ing ngisor iki:

  1. Panggunaan sumber daya sing ora efisien, amarga saben mesin virtual minangka sistem operasi sing lengkap.
  2. Ketergantungan platform. Apa sing dianggo ing komputer lokal bisa uga ora bisa digunakake ing server produksi.
  3. Scaling alon lan sumber daya-intensif saka solusi basis mesin virtual.

Tutorial Kubernetes Part 1: Aplikasi, Layanan Mikro, lan Wadah
Server web Nginx nglayani file statis sing mlaku ing mesin virtual

Yen kontaner digunakake kanggo ngatasi masalah sing padha, mula, dibandhingake karo mesin virtual, kekuwatan ing ngisor iki bisa dicathet:

  1. Panggunaan sumber daya sing efisien: nggarap sistem operasi nggunakake Docker.
  2. Platform independen. Wadah sing bisa ditindakake pangembang ing komputer bakal bisa digunakake ing endi wae.
  3. Penyebaran entheng liwat nggunakake lapisan gambar.

Tutorial Kubernetes Part 1: Aplikasi, Layanan Mikro, lan Wadah
Server web Nginx nglayani file statis sing mlaku ing wadhah

Kita mung dibandhingake mesin virtual lan kontaner ing sawetara TCTerms, nanging malah iki cukup kanggo njaluk aran kanggo kekuatan saka kontaner. iku Sampeyan bisa nemokake rincian babagan kontaner Docker.

▍Mbangun gambar wadhah kanggo aplikasi React

Blok bangunan dhasar saka wadhah Docker yaiku file Dockerfile. Ing wiwitan file iki, rekaman digawe saka gambar dhasar saka wadhah, banjur ana urutan instruksi sing nuduhake carane nggawe wadhah sing bakal nyukupi kabutuhan aplikasi tartamtu.

Sadurunge kita miwiti nggarap file Dockerfile, ayo elinga apa sing ditindakake kanggo nyiapake file aplikasi React kanggo diunggah menyang server Nginx:

  1. Nggawe paket aplikasi React (npm run build).
  2. Miwiti server Nginx.
  3. Nyalin isi direktori build saka folder proyek sa-frontend menyang folder server nginx/html.

Ing ngisor iki sampeyan bisa ndeleng paralel antarane nggawe wadhah lan langkah-langkah ing ndhuwur sing ditindakake ing komputer lokal.

▍Nyiapake Dockerfile kanggo aplikasi SA-Frontend

Pandhuan sing bakal ana ing Dockerfile kanggo aplikasi SA-Frontend, mung dumadi saka rong tim. Kasunyatane yaiku tim pangembangan Nginx wis nyiapake dhasar gambar kanggo Nginx, sing bakal digunakake kanggo nggawe gambar. Iki minangka rong langkah sing kudu kita jelasake:

  1. Basis gambar kudu dadi gambar Nginx.
  2. Isi Folder sa-frontend/build kudu disalin menyang folder gambar nginx/html.

Yen sampeyan pindhah saka katrangan iki menyang file Dockerfile, banjur bakal katon kaya iki:

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

Kaya sing sampeyan ngerteni, kabeh ing kene gampang banget, lan isi file kasebut malah bisa diwaca lan bisa dingerteni. File iki ngandhani sistem kanggo njupuk gambar nginx karo kabeh sing wis ana, lan nyalin isi direktori build menyang direktori nginx/html.

Kene sampeyan bisa uga duwe pitakonan babagan carane aku ngerti ngendi persis sampeyan kudu nyalin file saka folder build, yaiku, saka ngendi dalan kasebut /usr/share/nginx/html. Nyatane, ora ana sing rumit ing kene. Kasunyatane yaiku informasi sing relevan bisa ditemokake ing katrangan gambar.

▍Mbangun gambar lan upload menyang repositori

Sadurunge bisa nggarap gambar sing wis rampung, kita kudu push menyang repositori gambar. Kanggo nindakake iki, kita bakal nggunakake platform hosting gambar awan gratis Docker Hub. Ing tahap iki, sampeyan kudu nindakake ing ngisor iki:

  1. Pasang docker.
  2. Ndhaptar ing situs web Docker Hub.
  3. Mlebu menyang akun kanthi nglakokake printah ing ngisor iki ing terminal:
    docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"

Saiki sampeyan kudu nggunakake terminal kanggo pindhah menyang direktori sa-frontend lan jalanake perintah ing ngisor iki ing kana:

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

Kene lan luwih ing printah padha $DOCKER_USER_ID kudu diganti karo jeneng panganggo Docker Hub. Contone, bagean printah iki bisa katon kaya iki: rinormaloku/sentiment-analysis-frontend.

Ing kasus iki, printah iki bisa shortened dening njabut saka -f Dockerfile, amarga file iki wis ana ing folder ing ngendi kita nindakake printah iki.

Kanggo ngirim gambar sing wis rampung menyang repositori, kita butuh perintah ing ngisor iki:

docker push $DOCKER_USER_ID/sentiment-analysis-frontend

Sawise rampung, priksa dhaptar repositori sampeyan ing Docker Hub kanggo ngerti apa upload gambar menyang panyimpenan awan wis sukses.

▍ Nganggo wadhah

Saiki sapa wae bisa ngundhuh lan mbukak gambar kasebut, sing dikenal minangka $DOCKER_USER_ID/sentiment-analysis-frontend. Kanggo nindakake iki, sampeyan kudu mbukak urutan printah ing ngisor iki:

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

Saiki wadhah kasebut mlaku, kita bisa terus kerja kanthi nggawe gambar liyane sing dibutuhake. Nanging sadurunge kita nerusake, ayo padha ngerti desain 80:80, sing katon ing printah peluncuran gambar lan bisa uga katon bingung.

  • Nomer pisanan 80 — iki nomer port host (yaiku komputer lokal).
  • Nomer kapindho 80 iku port saka wadhah sing panjalukan kudu diterusake.

Gatekna ilustrasi ing ngisor iki.

Tutorial Kubernetes Part 1: Aplikasi, Layanan Mikro, lan Wadah
Port Forwarding

Sistem pangalihan panjalukan saka port <hostPort> menyang pelabuhan <containerPort>. Yaiku akses menyang pelabuhan 80 komputer dialihake menyang port 80 wadhah.

Wiwit port 80 dibukak ing komputer lokal, banjur sampeyan bisa ngakses aplikasi saka komputer iki ing localhost:80. Yen sistem sampeyan ora ndhukung Docker, aplikasi kasebut bisa ditindakake ing mesin virtual Docker, alamate bakal katon kaya <docker-machine ip>:80. Kanggo ngerteni alamat IP mesin virtual Docker, sampeyan bisa nggunakake perintah kasebut docker-machine ip.

Ing wektu iki, sawise kasil mbukak wadhah aplikasi ngarep, sampeyan kudu bisa mbukak kaca ing browser.

▍File .dockerignore

Nglumpukake gambar aplikasi SA-Frontend, kita bisa sok dong mirsani sing proses iki dadi metu banget alon. Iki kedadeyan amarga konteks mbangun gambar kudu dikirim menyang daemon Docker. Direktori sing makili konteks mbangun kasebut minangka argumen pungkasan saka perintah kasebut docker build. Ing kasus kita, ana titik ing mburi printah iki. Iki nyebabake struktur ing ngisor iki kalebu ing konteks mbangun:

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

Nanging kabeh folder sing ana ing kene, kita mung butuh folder kasebut build. Loading apa-apa liyane iku sampah wektu. Sampeyan bisa nyepetake mbangun kanthi ngandhani Docker direktori sing ora digatekake. Kanggo nindakake iki, kita butuh file kasebut .dockerignore. Sampeyan, yen sampeyan kenal karo file kasebut .gitignore, struktur berkas iki mbokmenawa katon akrab. Iki nampilake direktori sing bisa digatekake dening sistem mbangun gambar. Ing kasus kita, isi file iki katon kaya iki:

node_modules
src
public

berkas .dockerignore kudu ana ing folder sing padha karo file kasebut Dockerfile. Saiki mbangun gambar bakal njupuk sawetara detik.

Ayo saiki nggarap gambar kanggo aplikasi Java.

▍Mbangun gambar wadhah kanggo aplikasi Java

Sampeyan ngerti, sampeyan wis sinau kabeh sing perlu kanggo nggawe gambar wadhah. Mulane bagean iki bakal cendhak banget.

Bukak file Dockerfilesing ana ing folder proyek sa-webapp. Yen sampeyan maca teks file iki, sampeyan bakal weruh mung rong konstruksi anyar, diwiwiti karo tembung kunci ENV и EXPOSE:

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

Tembung kunci ENV Ngidini sampeyan ngumumake variabel lingkungan ing wadhah Docker. Utamane, ing kasus kita, ngidini sampeyan nemtokake URL kanggo ngakses API aplikasi sing nindakake analisis teks.

Tembung kunci EXPOSE ngidini sampeyan ngandhani Docker kanggo mbukak port. Kita bakal nggunakake port iki nalika mbukak aplikasi. Kene sampeyan bisa sok dong mirsani sing ing Dockerfile kanggo aplikasi SA-Frontend ora ana prentah kuwi. Iki mung kanggo tujuan dokumentasi, kanthi tembung liyane, konstruksi iki ditrapake kanggo wong sing bakal maca Dockerfile.

Mbangun gambar lan push menyang repositori katon persis padha ing conto sadurunge. Yen sampeyan durung yakin banget karo kemampuan sampeyan, printah sing cocog bisa ditemokake ing file kasebut README.md ing folder sa-webapp.

▍Mbangun gambar wadhah kanggo aplikasi Python

Yen sampeyan ndeleng isi file Dockerfile ing folder sa-logic, banjur sampeyan ora bakal nemokake apa-apa anyar kanggo sampeyan ana. Prentah kanggo mbangun gambar lan ngirim menyang repositori uga kudu sampeyan kenal, nanging, kaya aplikasi liyane, bisa ditemokake ing file kasebut. README.md ing folder sa-logic.

▍Nguji aplikasi kontainer

Apa sampeyan bisa dipercaya soko sing durung dites? Aku uga ora bisa. Ayo padha nyoba wadhah kita.

  1. Ayo mbukak wadhah aplikasi sa-logic lan ngatur kanggo ngrungokake ing port 5050:
    docker run -d -p 5050:5000 $DOCKER_USER_ID/sentiment-analysis-logic
  2. Ayo mbukak wadhah aplikasi sa-webapp lan ngatur kanggo ngrungokake ing port 8080. Kajaba iku, kita kudu ngatur port ing ngendi aplikasi Python bakal ngrungokake panjalukan saka aplikasi Java kanthi ngganti 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

Kanggo mangerteni carane ngerteni alamat IP wadhah Docker utawa mesin virtual, deleng file kasebut README.

Ayo mbukak wadhah aplikasi sa-frontend:

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

Saiki kabeh wis siyap kanggo pindhah menyang alamat ing browser localhost:80 lan nyoba aplikasi kasebut.

Elinga yen sampeyan ngganti port kanggo sa-webapp, utawa yen sampeyan nggunakake mesin virtual Docker, sampeyan kudu ngowahi file kasebut App.js saka folder sa-frontendkanthi ngganti alamat IP utawa nomer port ing metode kasebut analyzeSentence(), ngganti informasi saiki tinimbang data sing wis lawas. Sawise iki, sampeyan kudu reassemble gambar lan nggunakake.

Iki minangka diagram aplikasi kita saiki.

Tutorial Kubernetes Part 1: Aplikasi, Layanan Mikro, lan Wadah
Microservices mbukak ing kontaner

Ringkesan: kenapa kita butuh klompok Kubernetes?

Kita wis nliti file kasebut Dockerfile, ngomong babagan carane nggawe gambar lan push menyang repositori Docker. Kajaba iku, kita sinau carane nyepetake perakitan gambar nggunakake file kasebut .dockerignore. Akibaté, microservices saiki mbukak ing kontaner Docker. Ing kene sampeyan bisa uga duwe pitakonan sing bener babagan kenapa kita butuh Kubernetes. Bagian kapindho materi iki bakal ditrapake kanggo njawab pitakonan iki. Ing sawetoro wektu, nimbang pitakonan ing ngisor iki:
Ayo nganggep yen aplikasi web kita kanggo analisis teks wis dadi populer ing saindenging jagad. Mayuta-yuta panjaluk teka marang dheweke saben menit. Iki tegese microservices sa-webapp и sa-logic bakal ing beban gedhe tenan. Kepiye cara skala kontainer sing nganggo layanan mikro?

Tutorial Kubernetes Part 1: Aplikasi, Layanan Mikro, lan Wadah

Source: www.habr.com

Add a comment