Kubernetes darsligi 1-qism: Ilovalar, mikroservislar va konteynerlar

Bizning iltimosimizga binoan Xabr markaz yaratdi Kubernetes va biz unda birinchi nashrni joylashtirishdan mamnunmiz. Obuna bo'ling!

Kubernetes oson. Nima uchun banklar menga bu sohada ishlash uchun katta pul to'laydilar, vaholanki, har kim bu texnologiyani bir necha soat ichida o'zlashtira oladi?

Kubernetes darsligi 1-qism: Ilovalar, mikroservislar va konteynerlar

Agar siz Kubernetesni shu qadar tez o'rganishingiz mumkinligiga shubha qilsangiz, uni o'zingiz sinab ko'rishingizni maslahat beraman. Ya'ni, ushbu materialni o'zlashtirganingizdan so'ng, siz Kubernetes klasterida mikroservislarga asoslangan dasturni ishga tushirishingiz mumkin bo'ladi. Men bunga kafolat bera olaman, chunki men mijozlarimizga Kubernetes bilan ishlashni o'rgataman. Ushbu qo'llanma boshqalardan nimasi bilan farq qiladi? Aslida, juda ko'p narsa bor. Shunday qilib, ushbu materiallarning aksariyati oddiy narsalarni tushuntirishdan boshlanadi - Kubernetes tushunchalari va kubectl buyrug'ining xususiyatlari. Ushbu materiallar mualliflari ularning o'quvchilari ilovalarni ishlab chiqish, mikroservislar va Docker konteynerlari bilan tanish deb taxmin qilishadi. Biz boshqa yo'ldan boramiz. Birinchidan, biz kompyuterda mikroservislar asosida dasturni qanday ishga tushirish haqida gapiramiz. Keyin har bir mikroservis uchun konteyner tasvirlarini yaratishni ko'rib chiqamiz. Va shundan so'ng biz Kubernetes bilan tanishamiz va Kubernetes tomonidan boshqariladigan klasterda mikroservislarga asoslangan dasturni joylashtirishni ko'rib chiqamiz.

Ushbu yondashuv, Kubernetesga bosqichma-bosqich yondashish bilan, Kubernetesda hamma narsa qanday ishlashini tushunish uchun oddiy odam uchun zarur bo'lgan voqealarni chuqur tushunishga yordam beradi. Kubernetes, albatta, oddiy texnologiya, agar uni o'rganmoqchi bo'lganlar qaerda va qanday ishlatilishini bilishlari shart.

Endi, ko'proq vaqt o'tkazmasdan, keling, boshlaymiz va biz ishlaydigan dastur haqida gaplashamiz.

Eksperimental dastur

Bizning ilovamiz faqat bitta funktsiyani bajaradi. U bitta jumlani kiritish sifatida qabul qiladi, shundan so'ng matnni tahlil qilish vositalaridan foydalangan holda, u jumla muallifining ma'lum bir ob'ektga hissiy munosabatini baholab, ushbu jumlaning hissiy tahlilini amalga oshiradi.

Ushbu ilovaning asosiy oynasi shunday ko'rinadi.

Kubernetes darsligi 1-qism: Ilovalar, mikroservislar va konteynerlar
Matnlarni hissiyotlarni tahlil qilish uchun veb-ilova

Texnik nuqtai nazardan, dastur uchta mikroservisdan iborat bo'lib, ularning har biri muayyan muammolarni hal qiladi:

  • SA-Frontend Nginx veb-server bo'lib, statik React fayllariga xizmat qiladi.
  • SA-WebApp Java-da yozilgan veb-ilova bo'lib, frontenddan so'rovlarni qayta ishlaydi.
  • SA-Logic - bu Python dasturi bo'lib, matnda hissiyotlarni tahlil qiladi.

Shuni ta'kidlash kerakki, mikroservislar alohida holda mavjud emas. Ular "mas'uliyatni ajratish" g'oyasini amalga oshiradilar, lekin ayni paytda ular bir-birlari bilan o'zaro aloqada bo'lishlari kerak.

Kubernetes darsligi 1-qism: Ilovalar, mikroservislar va konteynerlar
Ilovada ma'lumotlar oqimi

Yuqoridagi diagrammada siz dasturdagi ma'lumotlar oqimini ko'rsatadigan tizimning raqamlangan bosqichlarini ko'rishingiz mumkin. Keling, ularni ko'rib chiqaylik:

  1. Brauzer serverdan fayl so'raydi index.html (bu, o'z navbatida, React ilova paketini yuklab oladi).
  2. Foydalanuvchi ilova bilan o'zaro ishlaydi, bu Bahorga asoslangan veb-ilovaga qo'ng'iroqni keltirib chiqaradi.
  3. Veb-ilova matn tahlilini o'tkazish so'rovini Python ilovasiga yuboradi.
  4. Python ilovasi matnning hissiyot tahlilini amalga oshiradi va natijani so'rovga javob sifatida qaytaradi.
  5. Spring ilovasi React ilovasiga javob yuboradi (bu o'z navbatida foydalanuvchiga matn tahlili natijasini ko'rsatadi).

Bu barcha ilovalar uchun kodni topish mumkin shu yerda. Men sizga hozirda ushbu omborni o'zingiz uchun nusxalashingizni maslahat beraman, chunki u bilan bizni juda ko'p qiziqarli tajribalar kutib turibdi.

Mahalliy kompyuteringizda mikroservislarga asoslangan dasturni ishga tushirish

Ilova ishlashi uchun biz uchta mikroservisni ham ishga tushirishimiz kerak. Keling, ularning eng yoqimlisi - front-end ilovasidan boshlaylik.

▍Mahalliy rivojlanish uchun Reactni sozlang

React ilovasini ishga tushirish uchun Node.js platformasi va NPMni kompyuteringizga o‘rnatishingiz kerak. Bularning barchasini o'rnatganingizdan so'ng, loyiha papkasiga o'tish uchun terminaldan foydalaning sa-frontend va quyidagi buyruqni bajaring:

npm install

Ushbu buyruqni papkada ishga tushirish orqali node_modules React ilovasining bog'liqliklari yuklanadi, ularning yozuvlari faylda package.json. Bir xil papkaga bog'liqliklar yuklab olingandan so'ng, quyidagi buyruqni bajaring:

npm start

Ana xolos. Endi React ilovasi ishlayapti, siz brauzeringizdagi quyidagi manzilga borib, unga kirishingiz mumkin: localhost:3000. Uning kodida biror narsani o'zgartirishingiz mumkin. Brauzerda ushbu o'zgarishlarning ta'sirini darhol ko'rasiz. Bu modullarni "issiq" deb ataladigan almashtirish tufayli mumkin. Bu front-end ishlab chiqishni oddiy va yoqimli tajribaga aylantiradi.

▍React ilovasini ishlab chiqarish uchun tayyorlash

React ilovasidan haqiqatda foydalanish uchun biz uni statik fayllar to'plamiga aylantirishimiz va veb-server yordamida mijozlarga xizmat qilishimiz kerak.

React ilovasini yaratish uchun yana terminaldan foydalanib, papkaga o'ting sa-frontend va quyidagi buyruqni bajaring:

npm run build

Bu loyiha papkasida katalog yaratadi build. Unda React ilovasi ishlashi uchun zarur bo'lgan barcha statik fayllar bo'ladi.

▍Nginx yordamida statik fayllarga xizmat ko'rsatish

Avval Nginx veb-serverini o'rnatishingiz va ishga tushirishingiz kerak. u uni yuklab olishingiz va uni o'rnatish va ishga tushirish bo'yicha ko'rsatmalarni topishingiz mumkin. Keyin jildning mazmunini nusxalashingiz kerak sa-frontend/build jildga [your_nginx_installation_dir]/html.

Ushbu yondashuv bilan React ilovasini yaratish jarayonida yaratilgan fayl index.html da mavjud bo'ladi [your_nginx_installation_dir]/html/index.html. Bu, sukut bo'yicha, Nginx serveri unga kirishda ishlab chiqaradigan fayl. Server portni tinglash uchun tuzilgan 80, lekin uni faylni tahrirlash orqali kerakli tarzda sozlash mumkin [your_nginx_installation_dir]/conf/nginx.conf.

Endi brauzeringizni oching va o'ting localhost:80. Siz React ilovasi sahifasini ko'rasiz.

Kubernetes darsligi 1-qism: Ilovalar, mikroservislar va konteynerlar
React ilovasi Nginx serveri tomonidan xizmat qiladi

Agar siz hozir maydonga biror narsa kiritsangiz Type your sentence va tugmani bosing Send - hech narsa bo'lmaydi. Ammo, agar siz konsolga qarasangiz, u erda xato xabarlarini ko'rishingiz mumkin. Ushbu xatolar aniq qaerda sodir bo'lishini tushunish uchun dastur kodini tahlil qilaylik.

▍Ilovaning oldingi kodini tahlil qilish

Fayl kodini ko'rib chiqish App.js, tugmani bosish orqali buni ko'rishimiz mumkin Send usulni chaqiradi analyzeSentence(). Ushbu usul uchun kod quyida keltirilgan. E'tibor bering, har bir satrda shaklning sharhi mavjud # Номер, kod ostida berilgan tushuntirish mavjud. Boshqa kod qismlarini ham xuddi shunday tahlil qilamiz.

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. POST so'rovi yuboriladigan URL. Ushbu manzilda bunday so'rovlarni kutadigan ariza mavjud deb taxmin qilinadi.

2.So'rov organi arizaga yuborilgan. Mana misol so'rovi organi:

{
    sentence: "I like yogobella!"
}

3.So'rovga javob olinganda, komponentning holati yangilanadi. Bu komponentning qayta ko'rsatilishiga olib keladi. Agar biz ma'lumot olsak (ya'ni, kiritilgan ma'lumotlar va hisoblangan matn ballarini o'z ichiga olgan JSON ob'ekti), biz komponentni chiqaramiz. Polarity, chunki tegishli shartlar bajariladi. Biz komponentni shunday tasvirlaymiz:

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

Kod juda yaxshi ishlayotganga o'xshaydi. Buning nimasi yomon? Agar siz ilova POST so'rovini yubormoqchi bo'lgan manzilda ushbu so'rovni qabul qiladigan va qayta ishlay oladigan hech narsa yo'q deb hisoblasangiz, siz mutlaqo haqsiz. Ya'ni, qabul qilingan so'rovlarni qayta ishlash uchun http://localhost:8080/sentiment, biz Spring-ga asoslangan veb-ilovani ishga tushirishimiz kerak.

Kubernetes darsligi 1-qism: Ilovalar, mikroservislar va konteynerlar
Bizga POST so'rovini qabul qila oladigan Spring ilovasi kerak

▍Bahorga asoslangan veb-ilovani o'rnatish

Spring ilovasini o'rnatish uchun sizga JDK8 va Maven va to'g'ri sozlangan muhit o'zgaruvchilari kerak bo'ladi. Bularning barchasini o'rnatganingizdan so'ng, loyihamiz ustida ishlashni davom ettirishingiz mumkin.

▍Ilovani jar fayliga qadoqlash

Terminal yordamida jildga o'ting sa-webapp va quyidagi buyruqni kiriting:

mvn install

Ushbu buyruqni papkada ishga tushirgandan so'ng sa-webapp katalog yaratiladi target. Bu fayl bilan ifodalangan jar faylida qadoqlangan Java ilovasi joylashadi sentiment-analysis-web-0.0.1-SNAPSHOT.jar.

▍Java ilovasini ishga tushirish

Jildga o'ting target va ilovani quyidagi buyruq bilan ishga tushiring:

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

Ushbu buyruqni bajarishda xatolik yuz beradi. Uni tuzatishni boshlash uchun biz stek ma'lumotlaridagi istisno tafsilotlarini tahlil qilishimiz mumkin:

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

Biz uchun bu erda eng muhimi, ma'noni aniqlashtirishning mumkin emasligini eslatib o'tishdir sa.logic.api.url. Keling, xatolik yuzaga kelgan kodni tahlil qilaylik.

▍Java ilova kodini tahlil qilish

Bu erda xatolik yuzaga kelgan kod parchasi.

@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. S.daentimentController maydon bor saLogicApiUrl. Uning qiymati mulk tomonidan belgilanadi sa.logic.api.url.
  2. Chiziq saLogicApiUrl qiymat bilan birikadi /analyse/sentiment. Ular birgalikda matn tahlilini amalga oshiradigan mikroservisga qo'ng'iroq qilish uchun manzilni tashkil qiladi.

▍Xususiyat qiymatini o'rnating

Bahorda mulk qiymatlarining standart manbai fayldir application.properties, bu yerda topish mumkin sa-webapp/src/main/resources. Lekin undan foydalanish mulk qiymatlarini belgilashning yagona usuli emas. Buni quyidagi buyruq yordamida ham amalga oshirish mumkin:

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

Bu xususiyat qiymati Python ilovamiz manziliga ishora qilishi kerak.

Uni sozlash orqali biz Spring veb-ilovasiga matnni tahlil qilish so'rovlarini bajarish uchun qayerga borish kerakligini aytamiz.

Hayotimizni murakkablashtirmaslik uchun biz Python ilovasi mavjud bo'lishiga qaror qilamiz localhost:5000 va buni unutmaslikka harakat qilaylik. Natijada, Spring ilovasini ishga tushirish buyrug'i quyidagicha ko'rinadi:

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

Kubernetes darsligi 1-qism: Ilovalar, mikroservislar va konteynerlar
Bizning tizimimizda Python ilovasi etishmayapti

Endi biz Python ilovasini ishga tushirishimiz kerak va tizim kutilganidek ishlaydi.

▍Python ilovasini sozlash

Python ilovasini ishga tushirish uchun sizda Python 3 va Pip oʻrnatilgan boʻlishi va tegishli muhit oʻzgaruvchilari toʻgʻri oʻrnatilgan boʻlishi kerak.

▍Bog'liqlarni o'rnatish

Loyihangiz papkasiga o'ting sa-logic/sa va quyidagi buyruqlarni bajaring:

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

▍Ilovani ishga tushiring

Bog'liqlarni o'rnatgandan so'ng, biz dasturni ishga tushirishga tayyormiz:

python sentiment_analysis.py

Ushbu buyruqni ishga tushirgandan so'ng bizga quyidagilar aytiladi:

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

Bu shuni anglatadiki, dastur ishlayapti va so'rovlarni kutmoqda localhost:5000/

▍Kod tadqiqoti

Python dastur kodini so'rovlarga qanday javob berishini tushunish uchun ko'rib chiqaylik:

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. Ob'ektni ishga tushirish Flask.
  2. Unga POST so'rovlarini bajarish uchun manzilni belgilash.
  3. Mulkni olish sentence so'rov organidan.
  4. Anonim ob'ektni ishga tushirish TextBlob va qiymatni olish polarity so'rovning asosiy qismida olingan birinchi jumla uchun (bizning holimizda bu tahlil uchun yuborilgan yagona jumla).
  5. Tanasida jumla matni va u uchun hisoblangan ko'rsatkich mavjud bo'lgan javobni qaytarish polarity.
  6. Flask ilovasini ishga tushiring, u quyidagi manzilda mavjud 0.0.0.0:5000 (shuningdek, siz unga forma konstruktsiyasidan foydalanib kirishingiz mumkin localhost:5000).

Ilovani tashkil etuvchi mikroservislar hozir ishlamoqda. Ular bir-birlari bilan muloqot qilish uchun sozlangan. Ishning ushbu bosqichida dastur diagrammasi shunday ko'rinadi.

Kubernetes darsligi 1-qism: Ilovalar, mikroservislar va konteynerlar
Ilovani tashkil etuvchi barcha mikroservislar ish tartibiga keltiriladi

Davom etishdan oldin, brauzerda React ilovangizni oching va u bilan bir nechta jumlalarni tahlil qilishga harakat qiling. Har bir narsa to'g'ri bajarilgan bo'lsa - tugmani bosgandan keyin Send matn maydoni ostida tahlil natijalarini ko'rasiz.

Keyingi bo'limda biz mikroservislarimizni Docker konteynerlarida qanday ishga tushirish haqida gaplashamiz. Bu ilovani Kubernetes klasterida ishlashga tayyorlash uchun zarur.

Docker konteynerlari

Kubernetes konteynerlashtirilgan ilovalarni joylashtirish, masshtablash va boshqarishni avtomatlashtirish tizimidir. U shuningdek, "konteyner orkestri" deb ataladi. Agar Kubernetes konteynerlar bilan ishlayotgan bo'lsa, unda ushbu tizimni ishlatishdan oldin biz ushbu konteynerlarni sotib olishimiz kerak. Lekin birinchi navbatda, konteynerlar nima ekanligi haqida gapiraylik. Ehtimol, bu nima degan savolga eng yaxshi javobni topish mumkin hujjatlar Dockerga:

Konteyner tasviri - bu dasturni o'z ichiga olgan engil, mustaqil, bajariladigan paket bo'lib, uni ishga tushirish uchun zarur bo'lgan barcha narsalarni o'z ichiga oladi: dastur kodi, ijro muhiti, tizim vositalari va kutubxonalar, sozlamalar. Konteynerli dasturlardan Linux va Windows muhitlarida foydalanish mumkin va ular infratuzilmadan qat'iy nazar har doim bir xil ishlaydi.

Bu shuni anglatadiki, konteynerlar har qanday kompyuterda, shu jumladan ishlab chiqarish serverlarida ham ishlashi mumkin va ulardagi ilovalar har qanday muhitda bir xil ishlaydi.

Konteynerlarning xususiyatlarini o'rganish va ularni ilovalarni ishga tushirishning boshqa usullari bilan solishtirish uchun virtual mashina va konteyner yordamida React dasturiga xizmat ko'rsatish misolini ko'rib chiqaylik.

▍Virtual mashina yordamida React ilovasining statik fayllariga xizmat ko'rsatish

Virtual mashinalar yordamida statik fayllarga xizmat ko'rsatishni tashkil etishga urinib, biz quyidagi kamchiliklarga duch kelamiz:

  1. Resurslardan samarasiz foydalanish, chunki har bir virtual mashina to'liq huquqli operatsion tizimdir.
  2. Platformaga bog'liqlik. Mahalliy kompyuterda ishlaydigan narsa ishlab chiqarish serverida ishlamasligi mumkin.
  3. Virtual mashinaga asoslangan yechimni sekin va resurs talab qiladigan masshtablash.

Kubernetes darsligi 1-qism: Ilovalar, mikroservislar va konteynerlar
Virtual mashinada ishlaydigan statik fayllarga xizmat ko'rsatadigan Nginx veb-serveri

Agar konteynerlar shunga o'xshash muammoni hal qilish uchun ishlatilsa, virtual mashinalar bilan taqqoslaganda, quyidagi kuchli tomonlarni qayd etish mumkin:

  1. Resurslardan samarali foydalanish: Docker yordamida operatsion tizim bilan ishlash.
  2. Platforma mustaqil. Ishlab chiquvchi o'z kompyuterida ishlashi mumkin bo'lgan konteyner istalgan joyda ishlaydi.
  3. Tasvir qatlamlaridan foydalanish orqali engil joylashtirish.

Kubernetes darsligi 1-qism: Ilovalar, mikroservislar va konteynerlar
Nginx veb-server konteynerda ishlaydigan statik fayllarga xizmat qiladi

Biz virtual mashinalar va konteynerlarni faqat bir nechta nuqtalar bo'yicha taqqosladik, ammo bu ham konteynerlarning kuchli tomonlarini his qilish uchun etarli. u Docker konteynerlari haqida ma'lumotlarni topishingiz mumkin.

▍React ilovasi uchun konteyner tasvirini yaratish

Docker konteynerining asosiy qurilish bloki fayldir Dockerfile. Ushbu faylning boshida konteynerning asosiy tasviri yozuvi tuziladi, keyin ma'lum bir dastur ehtiyojlarini qondiradigan konteynerni qanday yaratishni ko'rsatadigan ko'rsatmalar ketma-ketligi mavjud.

Fayl bilan ishlashni boshlashdan oldin Dockerfile, Nginx serveriga yuklash uchun React ilovasi fayllarini tayyorlash uchun nima qilganimizni eslaylik:

  1. React ilovalari paketini yaratish (npm run build).
  2. Nginx serverini ishga tushirish.
  3. Katalog tarkibidan nusxa olish build loyiha papkasidan sa-frontend server jildiga nginx/html.

Quyida siz konteyner yaratish va mahalliy kompyuteringizda bajarilgan yuqoridagi amallar o'rtasidagi parallellikni ko'rishingiz mumkin.

▍Dockerfaylni SA-Frontend ilovasi uchun tayyorlash

Unda bo'ladigan ko'rsatmalar Dockerfile dastur uchun SA-Frontend, faqat ikkita jamoadan iborat. Gap shundaki, Nginx ishlab chiqish jamoasi asosiyni tayyorlagan tasvir Nginx uchun, biz o'z rasmimizni yaratishda foydalanamiz. Bu ikki bosqichni tasvirlashimiz kerak:

  1. Rasmning asosi Nginx tasviri bo'lishi kerak.
  2. Papka tarkibi sa-frontend/build tasvirlar papkasiga nusxalash kerak nginx/html.

Agar siz ushbu tavsifdan faylga o'tsangiz Dockerfile, keyin u quyidagicha ko'rinadi:

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

Ko'rib turganingizdek, bu erda hamma narsa juda oddiy va faylning mazmuni hatto o'qilishi va tushunarli bo'lib chiqadi. Ushbu fayl tizimga rasmni olishni aytadi nginx allaqachon mavjud bo'lgan barcha narsalar bilan va katalog tarkibini nusxalash build katalogga nginx/html.

Bu yerda sizda papkadan fayllarni qayerdan nusxalash kerakligini qanday bilishim haqida savol tug'ilishi mumkin build, ya'ni yo'l qayerdan kelgan /usr/share/nginx/html. Aslida, bu erda ham murakkab narsa yo'q. Haqiqat shundaki, tegishli ma'lumotni topish mumkin tavsifi tasvir.

▍Rasmni yaratish va uni omborga yuklash

Tayyor tasvir bilan ishlashdan oldin uni tasvirlar omboriga surishimiz kerak. Buning uchun biz bepul bulutli tasvir hosting platformasi Docker Hub dan foydalanamiz. Ishning ushbu bosqichida siz quyidagilarni qilishingiz kerak:

  1. O'rnatish Docker.
  2. Docker Hub veb-saytida ro'yxatdan o'ting.
  3. Terminalda quyidagi buyruqni ishga tushirish orqali hisobingizga kiring:
    docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"

Endi katalogga o'tish uchun terminaldan foydalanishingiz kerak sa-frontend va u erda quyidagi buyruqni bajaring:

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

Bu erda va shunga o'xshash buyruqlarda $DOCKER_USER_ID Docker Hub foydalanuvchi nomi bilan almashtirilishi kerak. Masalan, buyruqning ushbu qismi quyidagicha ko'rinishi mumkin: rinormaloku/sentiment-analysis-frontend.

Bunday holda, ushbu buyruqni undan olib tashlash orqali qisqartirish mumkin -f Dockerfile, chunki bu fayl biz ushbu buyruqni bajarayotgan papkada allaqachon mavjud.

Tayyor tasvirni omborga yuborish uchun bizga quyidagi buyruq kerak bo'ladi:

docker push $DOCKER_USER_ID/sentiment-analysis-frontend

Uni tugatgandan so'ng, bulutli xotiraga tasvirni yuklash muvaffaqiyatli bo'lganligini tushunish uchun Docker Hub-dagi omborlaringiz ro'yxatini tekshiring.

▍Konteynerni ishga tushirish

Endi har kim ushbu rasmni yuklab olishi va ishga tushirishi mumkin $DOCKER_USER_ID/sentiment-analysis-frontend. Buni amalga oshirish uchun siz quyidagi buyruqlar ketma-ketligini bajarishingiz kerak:

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

Endi konteyner ishlamoqda, biz o'zimizga kerak bo'lgan boshqa rasmlarni yaratish orqali ishlashni davom ettirishimiz mumkin. Ammo davom ettirishdan oldin, dizaynni tushunaylik 80:80, bu tasvirni ishga tushirish buyrug'ida paydo bo'ladi va chalkash tuyulishi mumkin.

  • Birinchi raqam 80 — bu xost port raqami (ya'ni mahalliy kompyuter).
  • Ikkinchi raqam 80 so'rov yuborilishi kerak bo'lgan konteyner porti.

Quyidagi misolni ko'rib chiqing.

Kubernetes darsligi 1-qism: Ilovalar, mikroservislar va konteynerlar
Portni yo'naltirish

Tizim so'rovlarni portdan qayta yo'naltiradi <hostPort> portga <containerPort>. Ya'ni portga kirish 80 kompyuter portga yo'naltiriladi 80 idish.

Portdan beri 80 mahalliy kompyuterda ochilgan bo'lsa, siz ushbu kompyuterdan ilovaga kirishingiz mumkin localhost:80. Agar sizning tizimingiz Docker-ni qo'llab-quvvatlamasa, dastur manzili o'xshash bo'lgan Docker virtual mashinasida ishga tushirilishi mumkin. <docker-machine ip>:80. Docker virtual mashinasining IP manzilini bilish uchun siz buyruqdan foydalanishingiz mumkin docker-machine ip.

Ushbu nuqtada, oldingi dastur konteynerini muvaffaqiyatli ishga tushirgandan so'ng, uning sahifasini brauzerda ochishingiz kerak.

▍.dockerignore fayli

Ilova tasvirini yig'ish SA-Frontend, bu jarayon juda sekin kechayotganini payqashimiz mumkin. Buning sababi, tasvirni yaratish konteksti Docker demoniga yuborilishi kerak. Qurilish kontekstini ifodalovchi katalog buyruqning oxirgi argumenti sifatida ko'rsatilgan docker build. Bizning holatimizda bu buyruq oxirida nuqta bor. Bu quyidagi tuzilmaning qurilish kontekstiga kiritilishiga olib keladi:

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

Ammo bu erda mavjud bo'lgan barcha papkalardan bizga faqat papka kerak build. Boshqa narsalarni yuklash vaqtni behuda sarflashdir. Docker-ga qaysi kataloglarga e'tibor bermaslik kerakligini aytib, qurilishni tezlashtirishingiz mumkin. Buni amalga oshirish uchun bizga fayl kerak bo'ladi .dockerignore. Siz, agar siz fayl bilan tanish bo'lsangiz .gitignore, bu faylning tuzilishi tanish bo'lib tuyulishi mumkin. Unda tasvir yaratish tizimi e'tiborsiz qoldiradigan kataloglar ro'yxati keltirilgan. Bizning holatda, ushbu faylning mazmuni quyidagicha ko'rinadi:

node_modules
src
public

Fayl .dockerignore fayl bilan bir xil papkada bo'lishi kerak Dockerfile. Endi tasvirni yaratish bir necha soniya vaqtni oladi.

Endi Java ilovasi uchun tasvir ustida ishlaylik.

▍Java ilovasi uchun konteyner tasvirini yaratish

Bilasizmi, siz konteyner tasvirlarini yaratish uchun bilishingiz kerak bo'lgan hamma narsani allaqachon o'rgandingiz. Shuning uchun bu bo'lim juda qisqa bo'ladi.

Faylni oching Dockerfileloyiha papkasida joylashgan sa-webapp. Agar siz ushbu fayl matnini o'qisangiz, unda kalit so'zlardan boshlab faqat ikkita yangi konstruktsiyani ko'rasiz ENV и EXPOSE:

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

Kalit so'z ENV Docker konteynerlarida muhit o'zgaruvchilarini e'lon qilish imkonini beradi. Xususan, bizning holatlarimizda matn tahlilini amalga oshiradigan ilovaning API-ga kirish uchun URL manzilini ko'rsatishga imkon beradi.

Kalit so'z EXPOSE Dockerga portni ochishni aytishga imkon beradi. Ilovani ishga tushirishda biz ushbu portdan foydalanamiz. Bu erda siz buni sezishingiz mumkin Dockerfile dastur uchun SA-Frontend bunday buyruq yo'q. Bu faqat hujjatlashtirish uchun, boshqacha qilib aytganda, bu qurilish o'qiydiganlar uchun mo'ljallangan Dockerfile.

Tasvirni yaratish va uni omborga surish avvalgi misoldagi kabi ko'rinadi. Agar siz hali o'z qobiliyatlaringizga ishonchingiz komil bo'lmasa, tegishli buyruqlarni faylda topishingiz mumkin README.md papkada sa-webapp.

▍Python ilovasi uchun konteyner tasvirini yaratish

Agar fayl mazmuniga qarasangiz Dockerfile papkada sa-logic, keyin u erda o'zingiz uchun yangi hech narsa topa olmaysiz. Tasvirni yaratish va uni omborga yuborish buyruqlari sizga allaqachon tanish bo'lishi kerak, ammo bizning boshqa ilovalarimizda bo'lgani kabi, ularni faylda topish mumkin. README.md papkada sa-logic.

▍Konteynerli ilovalarni sinovdan o'tkazish

Siz sinab ko'rmagan narsangizga ishonishingiz mumkinmi? men ham olmayman. Keling, konteynerlarimizni sinab ko'raylik.

  1. Keling, dastur konteynerini ishga tushiramiz sa-logic va uni portda tinglash uchun sozlang 5050:
    docker run -d -p 5050:5000 $DOCKER_USER_ID/sentiment-analysis-logic
  2. Keling, dastur konteynerini ishga tushiramiz sa-webapp va uni portda tinglash uchun sozlang 8080. Bundan tashqari, Python ilovasi muhit oʻzgaruvchisini qayta tayinlash orqali Java ilovasidan soʻrovlarni tinglaydigan portni sozlashimiz kerak. 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

Docker konteyneri yoki virtual mashinasining IP manzilini qanday topishni bilish uchun faylga qarang README.

Keling, dastur konteynerini ishga tushiramiz sa-frontend:

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

Endi hamma narsa brauzerdagi manzilga o'tishga tayyor localhost:80 va ilovani sinab ko'ring.

E'tibor bering, agar siz portni o'zgartirsangiz sa-webapp, yoki siz Docker virtual mashinasida ishlayotgan bo'lsangiz, faylni tahrirlashingiz kerak bo'ladi App.js jilddan sa-frontendusulda IP-manzil yoki port raqamini o'zgartirish orqali analyzeSentence(), eskirgan ma'lumotlar o'rniga joriy ma'lumotni almashtirish. Shundan so'ng siz rasmni qayta yig'ishingiz va undan foydalanishingiz kerak.

Bizning dastur diagrammasi hozir shunday ko'rinadi.

Kubernetes darsligi 1-qism: Ilovalar, mikroservislar va konteynerlar
Mikroservislar konteynerlarda ishlaydi

Xulosa: nima uchun bizga Kubernetes klasteri kerak?

Biz hozirgina fayllarni ko'rib chiqdik Dockerfile, tasvirlarni qanday yaratish va ularni Docker omboriga surish haqida gapirdi. Bundan tashqari, biz fayl yordamida tasvirni yig'ishni qanday tezlashtirishni o'rgandik .dockerignore. Natijada, bizning mikroservislarimiz endi Docker konteynerlarida ishlaydi. Bu erda sizda nima uchun bizga Kubernetes kerakligi haqida to'liq asosli savol bo'lishi mumkin. Ushbu materialning ikkinchi qismi ushbu savolga javob berishga bag'ishlangan. Shu bilan birga, quyidagi savolni ko'rib chiqing:
Faraz qilaylik, bizning matnni tahlil qilish uchun veb-ilovamiz jahon miqyosida mashhur bo'ldi. Unga har daqiqada millionlab so'rovlar keladi. Bu mikroservislar degan ma'noni anglatadi sa-webapp и sa-logic katta yuk ostida bo'ladi. Mikroservislar bilan ishlaydigan konteynerlarni qanday o'lchash mumkin?

Kubernetes darsligi 1-qism: Ilovalar, mikroservislar va konteynerlar

Manba: www.habr.com

a Izoh qo'shish