Kubernetes зааварчилгаа 1-р хэсэг: Програмууд, бичил үйлчилгээнүүд, савнууд

Бидний хүсэлтээр Хабр төв үүсгэсэн Kubernetes мөн бид үүнд анхны хэвлэлээ байршуулсандаа баяртай байна. Бүртгүүлэх!

Кубернетес бол амархан. Хэн ч энэ технологийг хэдхэн цагийн дотор эзэмшиж чаддаг байхад яагаад банкууд надад их мөнгө төлж энэ чиглэлээр ажиллах болов?

Kubernetes зааварчилгаа 1-р хэсэг: Програмууд, бичил үйлчилгээнүүд, савнууд

Хэрэв та Кубернетесийг маш хурдан сурч чадна гэдэгт эргэлзэж байвал би үүнийг өөрөө туршиж үзэхийг зөвлөж байна. Тухайлбал, энэ материалыг эзэмшсэнээр та Kubernetes кластерт микро үйлчилгээнд суурилсан програм ажиллуулах боломжтой болно. Би үүнийг баталж чадна, учир нь би үйлчлүүлэгчдэдээ Кубернетестэй ажиллахыг заадаг аргачлалтай яг адилхан юм. Энэ гарын авлагаас юугаараа ялгаатай вэ? Ер нь бол зөндөө л юм бий. Тиймээс эдгээр материалуудын ихэнх нь Кубернетесийн тухай ойлголт, kubectl командын онцлогуудын талаархи энгийн зүйлийн тайлбараас эхэлдэг. Эдгээр материалыг зохиогчид уншигчиддаа програм хөгжүүлэлт, микро үйлчилгээ, Docker контейнеруудыг мэддэг гэж үздэг. Бид өөр замаар явах болно. Эхлээд бид компьютер дээр микро үйлчилгээнд суурилсан програмыг хэрхэн ажиллуулах талаар ярих болно. Дараа нь бид бичил үйлчилгээ тус бүрийн хувьд контейнерийн зургийг бүтээхийг харах болно. Үүний дараа бид Kubernetes-тэй танилцаж, Kubernetes-ийн удирддаг кластерт микро үйлчилгээнд суурилсан програмыг байрлуулах талаар авч үзэх болно.

Кубернетес рүү аажмаар хандах энэхүү арга нь Кубернетес дэх бүх зүйл хэрхэн энгийнээр ажилладагийг ойлгохын тулд энгийн хүмүүст шаардлагатай юу болж байгааг гүн гүнзгий ойлгох боломжийг олгоно. Үүнийг сурахыг хүссэн хүмүүс хаана, хэрхэн ашигладагийг мэддэг бол Кубернетес бол энгийн технологи юм.

Одоо олон зүйл нуршилгүйгээр эхлүүлж, хамтран ажиллах програмынхаа талаар ярилцъя.

Туршилтын хэрэглээ

Манай програм зөвхөн нэг функцийг гүйцэтгэх болно. Энэ нь нэг өгүүлбэрийг оруулга болгон авдаг бөгөөд үүний дараа текстийн шинжилгээний хэрэгслийг ашиглан өгүүлбэрийн сэтгэцийн шинжилгээ хийж, өгүүлбэрийн зохиогчийн тодорхой объектод сэтгэл хөдлөлийн хандлагын үнэлгээг авдаг.

Энэ програмын үндсэн цонх иймэрхүү харагдаж байна.

Kubernetes зааварчилгаа 1-р хэсэг: Програмууд, бичил үйлчилгээнүүд, савнууд
Текстийн мэдрэмжийн шинжилгээ хийх вэб програм

Техникийн үүднээс авч үзвэл програм нь гурван микро үйлчилгээнээс бүрдэх бөгөөд тус бүр нь тодорхой асуудлыг шийддэг.

  • SA-Frontend нь статик React файлуудад үйлчилдэг Nginx вэб сервер юм.
  • SA-WebApp нь Java хэл дээр бичигдсэн, урд талын хүсэлтийг боловсруулдаг вэб програм юм.
  • SA-Logic нь текст дээр мэдрэмжийн шинжилгээ хийдэг Python програм юм.

Микро үйлчилгээ нь тусдаа байдаггүй гэдгийг анхаарах нь чухал юм. Тэд "хариуцлага хуваах" санааг хэрэгжүүлдэг боловч нэгэн зэрэг бие биетэйгээ харилцах хэрэгтэй.

Kubernetes зааварчилгаа 1-р хэсэг: Програмууд, бичил үйлчилгээнүүд, савнууд
Аппликешн доторх өгөгдлийн урсгал

Дээрх диаграммд та програмын өгөгдлийн урсгалыг харуулсан системийн дугаарласан үе шатуудыг харж болно. Тэднийг харцгаая:

  1. Хөтөч нь серверээс файл хүсч байна index.html (энэ нь эргээд React програмын багцыг татаж авдаг).
  2. Хэрэглэгч програмтай харилцдаг бөгөөд энэ нь Spring-д суурилсан вэб програм руу залгахад хүргэдэг.
  3. Вэб програм нь текстийн шинжилгээ хийх хүсэлтийг Python програм руу дамжуулдаг.
  4. Python програм нь текстийн мэдрэмжийн шинжилгээг хийж, хүсэлтийн хариу болгон үр дүнг буцаана.
  5. Spring програм нь React програм руу хариу илгээдэг (энэ нь эргээд текстийн шинжилгээний үр дүнг хэрэглэгчдэд харуулдаг).

Эдгээр бүх програмын кодыг олж болно энд. Бидний өмнө маш олон сонирхолтой туршилтууд байгаа тул энэ агуулахыг яг одоо өөртөө хуулж авахыг зөвлөж байна.

Орон нутгийн машин дээрээ микро үйлчилгээнд суурилсан програмыг ажиллуулж байна

Аппликешн ажиллахын тулд бид бүх гурван микро үйлчилгээг эхлүүлэх хэрэгтэй. Тэдний хамгийн хөөрхөн нь болох урд талын программаас эхэлцгээе.

▍Орон нутгийн хөгжилд зориулж React-ийг тохируулна уу

React програмыг ажиллуулахын тулд та Node.js платформ болон NPM-ийг компьютер дээрээ суулгах хэрэгтэй. Энэ бүгдийг суулгасны дараа терминалыг ашиглан төслийн хавтас руугаа очно уу sa-frontend мөн дараах тушаалыг ажиллуулна:

npm install

Энэ тушаалыг хавтсанд ажиллуулснаар node_modules React програмын хамаарлууд ачаалагдах бөгөөд тэдгээрийн бүртгэл нь файлд байна package.json. Хамааралтай зүйлсийг нэг хавтсанд татаж авсны дараа дараах тушаалыг ажиллуулна уу:

npm start

Тэгээд л болоо. Одоо React програм ажиллаж байгаа тул та хөтөч дээрээ дараах хаягаар орж хандах боломжтой. localhost:3000. Та түүний кодонд ямар нэг зүйлийг өөрчилж болно. Та эдгээр өөрчлөлтүүдийн үр нөлөөг хөтөч дээр шууд харах болно. Энэ нь модулиудыг "халуун" гэж нэрлэсний ачаар боломжтой юм. Энэ нь урд талын хөгжүүлэлтийг энгийн бөгөөд тааламжтай туршлага болгодог.

▍React программыг үйлдвэрлэлд бэлтгэх

React программыг бодитоор ашиглахын тулд бид үүнийг статик файлуудын багц болгон хөрвүүлж, вэб сервер ашиглан үйлчлүүлэгчдэд үйлчлэх хэрэгтэй.

React програмыг бүтээхийн тулд терминалыг ашиглан дахин хавтас руу очно уу sa-frontend мөн дараах тушаалыг ажиллуулна:

npm run build

Энэ нь төслийн хавтсанд лавлах үүсгэнэ build. Энэ нь React програмыг ажиллуулахад шаардлагатай бүх статик файлуудыг агуулна.

▍Nginx ашиглан статик файлд үйлчлэх

Эхлээд та Nginx вэб серверийг суулгаж ажиллуулах хэрэгтэй. энд Та үүнийг татаж аваад хэрхэн суулгах, ажиллуулах зааварчилгааг олох боломжтой. Дараа нь та хавтасны агуулгыг хуулах хэрэгтэй sa-frontend/build хавтас руу [your_nginx_installation_dir]/html.

Энэ аргын тусламжтайгаар React програмыг бүтээх явцад үүссэн файл index.html хаягаар авах боломжтой [your_nginx_installation_dir]/html/index.html. Энэ нь анхдагчаар Nginx серверт хандах үед гаргадаг файл юм. Сервер нь порт дээр сонсохоор тохируулагдсан 80, гэхдээ энэ нь файлыг засварлах замаар өөрт хэрэгтэй байдлаар тохируулах боломжтой [your_nginx_installation_dir]/conf/nginx.conf.

Одоо хөтчөө нээгээд хаяг руу очно уу localhost:80. Та React програмын хуудсыг харах болно.

Kubernetes зааварчилгаа 1-р хэсэг: Програмууд, бичил үйлчилгээнүүд, савнууд
Nginx серверээр үйлчилдэг React програм

Хэрэв та одоо талбарт ямар нэгэн зүйл оруулбал Type your sentence болон товчлуурыг дар Send - юу ч болохгүй. Гэхдээ хэрэв та консолыг харвал алдааны мэдэгдлүүдийг харж болно. Эдгээр алдаа яг хаана гарч байгааг ойлгохын тулд програмын кодыг шинжилье.

▍Урд талын хэрэглээний кодын шинжилгээ

Файлын кодыг харж байна App.js, бид товчлуурыг дарснаар үүнийг харж болно Send аргыг дууддаг analyzeSentence(). Энэ аргын кодыг доор өгөв. Маягтын тайлбартай мөр бүрийн хувьд гэдгийг анхаарна уу # Номер, кодын доор өгөгдсөн тайлбар байна. Бид бусад кодын фрагментүүдийг ижил аргаар шинжлэх болно.

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 хүсэлт илгээсэн URL. Энэ хаяг дээр ийм хүсэлт хүлээж байгаа өргөдөл байгаа гэж таамаглаж байна.

2.Хүсэлтийн байгууллага өргөдөлд илгээгдсэн. Хүсэлтийн биетийн жишээ энд байна:

{
    sentence: "I like yogobella!"
}

3.Хүсэлтийн хариу ирэхэд бүрэлдэхүүн хэсгийн төлөв шинэчлэгдэнэ. Энэ нь бүрэлдэхүүн хэсгийг дахин үзүүлэхэд хүргэдэг. Хэрэв бид өгөгдөл хүлээн авбал (өөрөөр хэлбэл оролтын өгөгдөл болон тооцоолсон текстийн оноог агуулсан JSON объект) бид бүрэлдэхүүн хэсгийг гаргана. Polarity, учир нь зохих нөхцөл бүрдэх болно. Бид бүрэлдэхүүн хэсгийг дараах байдлаар тайлбарлав.

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

Код нь маш сайн ажиллаж байгаа бололтой. Энэ юу нь болохгүй байгаа юм бэ? Хэрэв та тухайн аппликешн POST хүсэлт илгээх гэж байгаа хаяг дээр энэ хүсэлтийг хүлээн авч, боловсруулж чадах зүйл хараахан байхгүй гэж үзвэл та туйлын зөв байх болно. Тухайлбал, хүлээн авсан хүсэлтийг боловсруулах http://localhost:8080/sentiment, бид Spring дээр суурилсан вэб програм ажиллуулах хэрэгтэй.

Kubernetes зааварчилгаа 1-р хэсэг: Програмууд, бичил үйлчилгээнүүд, савнууд
Бидэнд POST хүсэлтийг хүлээн авах боломжтой Spring програм хэрэгтэй байна

▍Spring-д суурилсан вэб программыг тохируулж байна

Spring програмыг ашиглахын тулд танд JDK8, Maven болон зөв тохируулагдсан орчны хувьсагч хэрэгтэй болно. Энэ бүгдийг суулгасны дараа та манай төсөл дээр үргэлжлүүлэн ажиллах боломжтой.

▍Програмыг jar файлд савлах

Терминал ашиглан хавтас руу шилжинэ үү sa-webapp мөн дараах тушаалыг оруулна уу:

mvn install

Энэ командыг хавтсанд ажиллуулсны дараа sa-webapp лавлах үүсгэнэ target. Энд файлаар дүрслэгдсэн jar файлд савлагдсан Java программ байрлана sentiment-analysis-web-0.0.1-SNAPSHOT.jar.

▍Java програм ажиллуулж байна

Фолдер руу очих target Дараах тушаалаар програмыг ажиллуулна уу:

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

Энэ командыг гүйцэтгэх явцад алдаа гарна. Үүнийг засаж эхлэхийн тулд бид стекийн ул мөр өгөгдөл дэх онцгой байдлын дэлгэрэнгүй мэдээллийг шинжлэх боломжтой:

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

Бидний хувьд энд хамгийн чухал зүйл бол утгыг тодруулах боломжгүй гэдгийг дурдах явдал юм sa.logic.api.url. Алдаа гарсан кодыг задлан шинжилье.

▍Java програмын кодын шинжилгээ

Алдаа гарсан кодын хэсэг энд байна.

@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. С-дentimentController талбай байна saLogicApiUrl. Түүний үнэ цэнийг өмчөөр нь тодорхойлдог sa.logic.api.url.
  2. Мөр saLogicApiUrl утгатай нийлдэг /analyse/sentiment. Тэд хамтдаа текстийн шинжилгээ хийдэг микро үйлчилгээ рүү залгах хаягийг бүрдүүлдэг.

▍Хөрөнгийн утгыг тохируулна уу

Хаврын улиралд үл хөдлөх хөрөнгийн үнэ цэнийн стандарт эх сурвалж нь файл юм application.properties, дээрээс олж болно sa-webapp/src/main/resources. Гэхдээ түүний хэрэглээ нь үл хөдлөх хөрөнгийн үнэ цэнийг тогтоох цорын ганц арга биш юм. Үүнийг мөн дараах тушаалыг ашиглан хийж болно.

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

Энэ өмчийн үнэ цэнэ нь манай Python програмын хаягийг зааж өгөх ёстой.

Үүнийг тохируулснаар бид Spring вэб програмд ​​​​текст шинжилгээний хүсэлтийг гүйцэтгэхийн тулд хаашаа явах ёстойг хэлж өгдөг.

Бидний амьдралыг хүндрүүлэхгүйн тулд бид Python програмыг ашиглах боломжтой гэж шийднэ localhost:5000 тэгээд мартахгүйг хичээцгээе. Үүний үр дүнд Spring програмыг ажиллуулах тушаал дараах байдалтай байна.

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

Kubernetes зааварчилгаа 1-р хэсэг: Програмууд, бичил үйлчилгээнүүд, савнууд
Манай системд Python програм дутуу байна

Одоо бидний хийх ёстой зүйл бол Python програмыг ажиллуулах бөгөөд систем нь санаснаар ажиллах болно.

▍Python программыг тохируулж байна

Python програмыг ажиллуулахын тулд та Python 3 болон Pip суулгасан байх ёстой бөгөөд тохирох орчны хувьсагчдыг зөв тохируулсан байх ёстой.

▍Хамаарал суулгах

Төслийн хавтас руу очно уу sa-logic/sa мөн дараах тушаалуудыг ажиллуулна уу:

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

▍Аппликешныг ажиллуулна уу

Хамааралтай зүйлсийг суулгасны дараа бид програмыг ажиллуулахад бэлэн байна:

python sentiment_analysis.py

Энэ тушаалыг ажиллуулсны дараа бидэнд дараахь зүйлийг хэлэх болно.

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

Энэ нь програм ажиллаж байгаа бөгөөд хүсэлтийг хүлээж байна гэсэн үг юм localhost:5000/

▍Код судалгаа

Хүсэлтэд хэрхэн хариу үйлдэл үзүүлэхийг ойлгохын тулд Python програмын кодыг харцгаая.

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. Объектыг эхлүүлж байна Flask.
  2. POST хүсэлтийг гүйцэтгэх хаягийг зааж өгч байна.
  3. Үл хөдлөх хөрөнгийг татаж авах sentence хүсэлтийн байгууллагаас.
  4. Нэргүй объектыг эхлүүлж байна TextBlob мөн үнэ цэнийг нь авах polarity хүсэлтийн хэсэгт хүлээн авсан эхний өгүүлбэрийн хувьд (бидний тохиолдолд энэ нь шинжилгээнд илгээсэн цорын ганц өгүүлбэр юм).
  5. Үндсэн хэсэгт өгүүлбэрийн текст болон түүний тооцоолсон үзүүлэлтийг агуулсан хариултыг буцаана polarity.
  6. Flask програмыг ажиллуулна уу 0.0.0.0:5000 (Та мөн маягтын бүтцийг ашиглан хандах боломжтой localhost:5000).

Програмыг бүрдүүлдэг микро үйлчилгээнүүд одоо ажиллаж байна. Тэд бие биетэйгээ харилцахаар тохируулагдсан байдаг. Ажлын энэ үе шатанд хэрэглээний диаграм иймэрхүү харагдаж байна.

Kubernetes зааварчилгаа 1-р хэсэг: Програмууд, бичил үйлчилгээнүүд, савнууд
Програмыг бүрдүүлдэг бүх микро үйлчилгээнүүд ажиллах горимд шилждэг

Одоо, үргэлжлүүлэхээсээ өмнө хөтчөөр React програмаа нээж, түүгээр өгүүлбэрийг задлан шинжилж үзээрэй. Хэрэв бүх зүйл зөв хийгдсэн бол товчлуурыг дарсны дараа Send та шинжилгээний үр дүнг текст талбарын доор харах болно.

Дараагийн хэсэгт бид микро үйлчилгээгээ Docker контейнерт хэрхэн ажиллуулах талаар ярих болно. Энэ нь програмыг Kubernetes кластер дээр ажиллуулахад бэлтгэхэд шаардлагатай.

Докер савнууд

Kubernetes нь контейнерт агуулагдсан програмуудыг байрлуулах, масштаблах, удирдах ажлыг автоматжуулах систем юм. Үүнийг "контейнер оркестр" гэж бас нэрлэдэг. Хэрэв Кубернетес контейнертэй ажилладаг бол энэ системийг ашиглахаасаа өмнө бид эхлээд эдгээр савыг авах ёстой. Гэхдээ эхлээд сав гэж юу болох талаар ярилцъя. Энэ нь юу вэ гэсэн асуултын хамгийн сайн хариултыг эндээс олж болно баримт бичиг Докер руу:

Контейнерийн дүрс нь програмыг ажиллуулахад шаардлагатай бүх зүйлийг багтаасан хөнгөн жинтэй, бие даасан, гүйцэтгэх боломжтой багц юм: програмын код, гүйцэтгэх орчин, системийн хэрэгсэл ба номын сан, тохиргоо. Контейнержүүлсэн программуудыг Линукс болон Windows орчинд ашиглах боломжтой бөгөөд дэд бүтцээс үл хамааран тэдгээр нь үргэлж ижилхэн ажиллах болно.

Энэ нь контейнеруудыг үйлдвэрлэлийн сервер зэрэг ямар ч компьютер дээр ажиллуулах боломжтой бөгөөд тэдгээрт агуулагдах програмууд нь ямар ч орчинд адилхан ажиллах болно гэсэн үг юм.

Контейнеруудын онцлог шинж чанаруудыг судалж, тэдгээрийг программуудыг ажиллуулах бусад аргуудтай харьцуулахын тулд виртуал машин болон контейнер ашиглан React програмд ​​үйлчлэх жишээг харцгаая.

▍Виртуал машин ашиглан React програмын статик файлд үйлчлэх

Виртуал машин ашиглан статик файлын үйлчилгээг зохион байгуулахыг оролдоход бид дараахь сул талуудтай тулгарах болно.

  1. Виртуал машин бүр нь бүрэн хэмжээний үйлдлийн систем учраас нөөцийг үр ашиггүй ашиглах.
  2. Платформын хамаарал. Орон нутгийн компьютер дээр ажилладаг зүйл үйлдвэрлэлийн сервер дээр ажиллахгүй байж болно.
  3. Виртуал машинд суурилсан шийдлийг удаан, нөөц их шаарддаг масштабтай болгох.

Kubernetes зааварчилгаа 1-р хэсэг: Програмууд, бичил үйлчилгээнүүд, савнууд
Виртуал машин дээр ажиллаж байгаа статик файлуудад үйлчлэх Nginx вэб сервер

Хэрэв ижил төстэй асуудлыг шийдэхийн тулд контейнер ашигладаг бол виртуал машинтай харьцуулахад дараахь давуу талуудыг тэмдэглэж болно.

  1. Нөөцийг үр ашигтай ашиглах: Docker ашиглан үйлдлийн системтэй ажиллах.
  2. Платформ бие даасан. Хөгжүүлэгчийн компьютер дээрээ ажиллуулж болох контейнер хаана ч ажиллах болно.
  3. Зургийн давхаргыг ашиглах замаар хөнгөн байршуулалт.

Kubernetes зааварчилгаа 1-р хэсэг: Програмууд, бичил үйлчилгээнүүд, савнууд
Контейнер дотор ажиллаж байгаа статик файлуудад үйлчлэх Nginx вэб сервер

Бид зөвхөн виртуал машин болон контейнеруудыг цөөн хэдэн зүйлээр харьцуулсан боловч энэ нь чингэлэгийн давуу талыг мэдрэхэд хангалттай юм. энд Та Docker контейнерийн талаар дэлгэрэнгүй мэдээлэл авах боломжтой.

▍React програмд ​​зориулсан контейнер дүрсийг бүтээх

Docker контейнерын үндсэн блок нь файл юм Dockerfile. Энэ файлын эхэнд савны үндсэн дүрсийн бичлэг хийгдсэн бөгөөд дараа нь тодорхой хэрэглээний хэрэгцээг хангахуйц савыг хэрхэн үүсгэхийг харуулсан дараалсан заавар байдаг.

Файлтай ажиллаж эхлэхээс өмнө Dockerfile, React програмын файлуудыг Nginx серверт байршуулахад бэлтгэхийн тулд юу хийснийг санацгаая:

  1. React програмын багцыг бүтээх (npm run build).
  2. Nginx серверийг эхлүүлж байна.
  3. Лавлах агуулгыг хуулж байна build төслийн хавтаснаас sa-frontend серверийн хавтас руу nginx/html.

Контейнер үүсгэх болон локал компьютер дээрээ гүйцэтгэсэн дээрх алхмуудын хоорондын уялдааг доороос харж болно.

▍SA-Frontend програмд ​​зориулж Dockerfile-г бэлтгэж байна

Үүнд агуулагдах заавар Dockerfile өргөдөл гаргах SA-Frontend, зөвхөн хоёр багаас бүрдэнэ. Үнэн хэрэгтээ Nginx хөгжүүлэлтийн баг үндсэн програмыг бэлтгэсэн зураг Nginx-д зориулж, бид өөрсдийн дүр төрхийг бий болгоход ашиглах болно. Эдгээр нь бидний тайлбарлах шаардлагатай хоёр алхам юм:

  1. Зургийн үндэс нь Nginx дүрс байх ёстой.
  2. Фолдерын агуулга sa-frontend/build зургийн хавтас руу хуулах шаардлагатай nginx/html.

Хэрэв та энэ тайлбараас файл руу очвол Dockerfile, дараа нь иймэрхүү харагдах болно:

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

Таны харж байгаагаар энд бүх зүйл маш энгийн бөгөөд файлын агуулга нь уншихад ойлгомжтой, ойлгомжтой болж хувирдаг. Энэ файл нь системийг зураг авахыг хэлдэг nginx дотор нь байгаа бүх зүйлтэй хамт, лавлахын агуулгыг хуулж ав build лавлах руу nginx/html.

Эндээс танд фолдероос файл хуулах хэрэгтэйг би яаж мэдэх вэ гэсэн асуулт гарч ирж магадгүй юм build, өөрөөр хэлбэл зам хаанаас ирсэн /usr/share/nginx/html. Үнэндээ энд бас төвөгтэй зүйл байхгүй. Үнэн хэрэгтээ холбогдох мэдээллийг эндээс авах боломжтой тайлбар зураг.

▍Зургийг бүтээж, хадгалах газарт байршуулах

Дууссан зурагтай ажиллахын өмнө бид үүнийг зургийн агуулах руу түлхэх хэрэгтэй. Үүнийг хийхийн тулд бид үнэгүй үүлэн дүрс байршуулах Docker Hub платформыг ашиглах болно. Ажлын энэ үе шатанд та дараахь зүйлийг хийх хэрэгтэй.

  1. Суулгах Docker.
  2. Docker Hub вэбсайтад бүртгүүлнэ үү.
  3. Терминал дээр дараах тушаалыг ажиллуулж бүртгэлдээ нэвтэрнэ үү.
    docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"

Одоо та лавлах руу очихын тулд терминалыг ашиглах хэрэгтэй sa-frontend тэнд дараах тушаалыг ажиллуулна уу:

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

Энд болон бусад ижил төстэй командуудад $DOCKER_USER_ID Docker Hub хэрэглэгчийн нэрээр солигдох ёстой. Жишээлбэл, тушаалын энэ хэсэг дараах байдалтай байж болно. rinormaloku/sentiment-analysis-frontend.

Энэ тохиолдолд энэ командыг үүнээс хасах замаар богиносгож болно -f Dockerfile, учир нь энэ файл нь бидний энэ тушаалыг гүйцэтгэж байгаа хавтсанд аль хэдийн байгаа.

Дууссан зургийг хадгалах газар руу илгээхийн тулд бидэнд дараах тушаал хэрэгтэй.

docker push $DOCKER_USER_ID/sentiment-analysis-frontend

Үүнийг бөглөсний дараа зургийг үүлэн хадгалах санд амжилттай байршуулсан эсэхийг ойлгохын тулд Docker Hub дээрх хадгалах газруудынхаа жагсаалтыг шалгана уу.

▍Савыг ажиллуулж байна

Одоо хэн ч гэсэн нэртэй зургийг татаж аваад ажиллуулж болно $DOCKER_USER_ID/sentiment-analysis-frontend. Үүнийг хийхийн тулд та дараах тушаалуудын дарааллыг ажиллуулах хэрэгтэй.

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

Одоо контейнер ажиллаж байна, бид өөрт хэрэгтэй бусад зургийг бүтээх замаар үргэлжлүүлэн ажиллах боломжтой. Гэхдээ үргэлжлүүлэхээсээ өмнө дизайныг ойлгоцгооё 80:80, энэ нь зураг эхлүүлэх команд дээр гарч ирэх бөгөөд ойлгомжгүй мэт санагдаж магадгүй.

  • Эхний тоо 80 — энэ бол хостын портын дугаар (өөрөөр хэлбэл дотоод компьютер).
  • Хоёр дахь тоо 80 хүсэлтийг дамжуулах ёстой контейнерийн порт юм.

Дараах жишээг авч үзье.

Kubernetes зааварчилгаа 1-р хэсэг: Програмууд, бичил үйлчилгээнүүд, савнууд
Порт дамжуулах

Систем нь портоос ирсэн хүсэлтийг дахин чиглүүлдэг <hostPort> боомт руу <containerPort>. Энэ нь порт руу нэвтрэх явдал юм 80 компьютер порт руу дахин чиглэгддэг 80 сав.

Боомтоос хойш 80 локал компьютер дээр нээгдсэн бол та энэ компьютерээс програм руу хандах боломжтой localhost:80. Хэрэв таны систем Docker-ийг дэмждэггүй бол програмыг Docker виртуал машин дээр ажиллуулж болох бөгөөд хаяг нь иймэрхүү харагдах болно. <docker-machine ip>:80. Docker виртуал машины IP хаягийг мэдэхийн тулд та тушаалыг ашиглаж болно docker-machine ip.

Энэ үед урд талын програмын контейнерийг амжилттай ажиллуулсны дараа та түүний хуудсыг хөтөч дээр нээх боломжтой байх ёстой.

▍.dockerignore файл

Хэрэглээний зургийг цуглуулж байна SA-Frontend, энэ үйл явц маш удаан болж байгааг бид анзаарсан. Энэ нь зураг бүтээх контекстийг Docker дэмон руу илгээх ёстой учраас ийм зүйл тохиолддог. Бүтээлийн контекстийг төлөөлөх лавлах нь командын сүүлчийн аргумент гэж тодорхойлогддог docker build. Манай тохиолдолд энэ командын төгсгөлд цэг байдаг. Энэ нь барилгын контекстэд дараах бүтцийг оруулахад хүргэдэг:

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

Гэхдээ энд байгаа бүх хавтаснуудаас бидэнд зөвхөн хавтас л хэрэгтэй build. Өөр юу ч ачаалах нь цаг гарз. Та Docker-д аль санг үл тоомсорлохыг хэлж өгснөөр бүтээцийг хурдасгаж болно. Үүнийг хийхийн тулд бидэнд файл хэрэгтэй .dockerignore. Та, хэрэв та файлыг мэддэг бол .gitignore, энэ файлын бүтэц нь танил мэт санагдаж магадгүй. Энэ нь зураг бүтээх систем үл тоомсорлож болох сангуудын жагсаалтыг гаргадаг. Манай тохиолдолд энэ файлын агуулга дараах байдалтай байна.

node_modules
src
public

файл .dockerignore файлтай нэг хавтсанд байх ёстой Dockerfile. Одоо зургийг бүтээхэд хэдхэн секунд зарцуулагдана.

Одоо Java програмын зураг дээр ажиллацгаая.

▍Java програмд ​​зориулсан контейнер дүрсийг бүтээх

Контейнерийн дүрсийг бүтээхэд хэрэгтэй бүх зүйлээ та аль хэдийн сурчихсан байна. Тийм ч учраас энэ хэсэг маш богино байх болно.

Файлыг нээнэ үү Dockerfileтөслийн хавтсанд байгаа sa-webapp. Хэрэв та энэ файлын текстийг уншвал дотор нь түлхүүр үгсээс эхлээд зөвхөн хоёр шинэ бүтэц харагдах болно ENV и EXPOSE:

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

Түлхүүр үг ENV Docker контейнер доторх орчны хувьсагчдыг зарлах боломжийг танд олгоно. Ялангуяа манай тохиолдолд энэ нь текстийн шинжилгээ хийдэг програмын API-д хандах URL-г зааж өгөх боломжийг олгодог.

Түлхүүр үг EXPOSE Docker-д порт нээхийг хэлэх боломжийг танд олгоно. Бид програмыг ажиллуулах явцад энэ портыг ашиглах болно. Эндээс та үүнийг анзаарч болно Dockerfile өргөдөл гаргах SA-Frontend тийм тушаал байхгүй. Энэ нь зөвхөн баримт бичгийн зориулалттай, өөрөөр хэлбэл, энэ барилга нь уншихад зориулагдсан болно Dockerfile.

Зургийг бүтээж, хадгалах газар руу түлхэх нь өмнөх жишээн дээрхтэй яг адилхан харагдаж байна. Хэрэв та өөрийн чадвардаа бүрэн итгэлтэй биш байгаа бол холбогдох тушаалуудыг файлаас олж болно README.md хавтсанд sa-webapp.

▍Python програмд ​​зориулсан контейнер дүрсийг бүтээх

Хэрэв та файлын агуулгыг харвал Dockerfile хавтсанд sa-logic, тэгвэл та тэндээс өөртөө шинэ зүйл олохгүй. Зургийг бүтээх, хадгалах газар руу илгээх командууд нь танд аль хэдийн танил болсон байх ёстой, гэхдээ манай бусад програмуудын нэгэн адил тэдгээрийг файлаас олж болно. README.md хавтсанд sa-logic.

▍ Контейнерт суулгасан програмуудыг турших

Та туршиж үзээгүй зүйлдээ итгэж болох уу? Би ч чадахгүй. Бид савнуудаа туршиж үзье.

  1. Програмын савыг ажиллуулцгаая sa-logic порт дээр сонсохоор тохируулна уу 5050:
    docker run -d -p 5050:5000 $DOCKER_USER_ID/sentiment-analysis-logic
  2. Програмын савыг ажиллуулцгаая sa-webapp порт дээр сонсохоор тохируулна уу 8080. Нэмж дурдахад, бид Python програм Java програмын хүсэлтийг сонсох портыг орчны хувьсагчийг дахин хуваарилах хэрэгтэй. 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 контейнер эсвэл виртуал машины IP хаягийг хэрхэн олж мэдэхийг хүсвэл файлыг үзнэ үү README.

Програмын савыг ажиллуулцгаая sa-frontend:

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

Одоо бүх зүйл хөтөч дээрх хаяг руу очиход бэлэн боллоо localhost:80 мөн програмыг туршиж үзээрэй.

Хэрэв та портоо сольсон бол гэдгийг анхаарна уу sa-webapp, эсвэл хэрэв та Docker виртуал машин ажиллуулж байгаа бол файлыг засварлах шаардлагатай болно App.js хавтаснаас sa-frontendаргын IP хаяг эсвэл портын дугаарыг өөрчлөх замаар analyzeSentence(), хуучирсан мэдээллийн оронд одоогийн мэдээллийг орлуулах. Үүний дараа та зургийг дахин угсарч, ашиглах хэрэгтэй.

Бидний хэрэглээний диаграм одоо иймэрхүү харагдаж байна.

Kubernetes зааварчилгаа 1-р хэсэг: Програмууд, бичил үйлчилгээнүүд, савнууд
Бичил үйлчилгээ нь саванд ажилладаг

Дүгнэлт: яагаад бидэнд Кубернетес кластер хэрэгтэй байна вэ?

Бид дөнгөж сая файлуудыг шалгасан Dockerfile, хэрхэн дүрс бүтээж, тэдгээрийг Docker репозитор руу түлхэх талаар ярилцав. Нэмж дурдахад бид файлыг ашиглан зургийн угсралтыг хэрхэн хурдасгах талаар сурсан .dockerignore. Үүний үр дүнд манай микро үйлчилгээнүүд одоо Docker контейнерт ажилладаг. Энд танд яагаад Кубернетес хэрэгтэй байгаа талаар бүрэн үндэслэлтэй асуулт гарч ирж магадгүй юм. Энэ материалын хоёр дахь хэсгийг энэ асуултад хариулахад зориулах болно. Энэ хооронд дараах асуултыг анхаарч үзээрэй.
Текст дүн шинжилгээ хийх манай вэб програм дэлхий даяар алдартай болсон гэж бодъё. Түүнд минут тутамд сая сая хүсэлт ирдэг. Энэ нь бичил үйлчилгээ гэсэн үг юм sa-webapp и sa-logic асар их ачаалалтай байх болно. Бичил үйлчилгээ ажиллуулж буй контейнеруудыг хэрхэн томруулах вэ?

Kubernetes зааварчилгаа 1-р хэсэг: Програмууд, бичил үйлчилгээнүүд, савнууд

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх