Kubernetes سبق حصو 1: ايپليڪيشنون، مائڪرو سروسز، ۽ ڪنٽينرز

اسان جي درخواست تي، حبر هڪ حب ٺاهي ڪوبنيٿس ۽ اسان ان ۾ پهرين اشاعت رکڻ تي خوش آهيون. رڪنيت حاصل ڪريو!

Kubernetes آسان آهي. بئنڪ مون کي هن علائقي ۾ ڪم ڪرڻ لاء تمام گهڻو پئسا ڇو ڏيندا آهن، جڏهن ته ڪو به هن ٽيڪنالاجي کي صرف چند ڪلاڪن ۾ ماسٽر ڪري سگهي ٿو؟

Kubernetes سبق حصو 1: ايپليڪيشنون، مائڪرو سروسز، ۽ ڪنٽينرز

جيڪڏهن توهان کي شڪ آهي ته ڪبرنيٽس ايترو جلدي سکي سگهجي ٿو، مان مشورو ڏيان ٿو ته توهان ان کي پاڻ ڪرڻ جي ڪوشش ڪريو. يعني، هن مواد ۾ مهارت حاصل ڪرڻ بعد، توهان هڪ ايپليڪيشن هلائي سگهو ٿا مائڪرو سروسز جي بنياد تي ڪبرنيٽس ڪلستر ۾. مان هن جي ضمانت ڏئي سگهان ٿو، ڇاڪاڻ ته اهو ساڳيو طريقو آهي جيڪو آئون هتي استعمال ڪريان ٿو ته آئون پنهنجن گراهڪن کي سيکاريان ٿو ڪبرنيٽس سان ڪيئن ڪم ڪجي. ڇا هي گائيڊ ٻين کان مختلف آهي؟ حقيقت ۾، ڪيتريون ئي شيون. تنهن ڪري، انهن مان اڪثر مواد سادي شين جي وضاحت سان شروع ٿئي ٿو - ڪبرنيٽس جا تصور ۽ ڪيبيڪل ڪمانڊ جون خاصيتون. انهن مضمونن جا ليکڪ فرض ڪن ٿا ته انهن جو پڙهندڙ واقف آهي ايپليڪيشن ڊولپمينٽ، مائڪرو سروسز، ۽ ڊاڪر ڪنٽينرز. اسان ٻئي طرف وينداسين. پهرين، اچو ته ڪمپيوٽر تي مائڪرو سروسز جي بنياد تي ايپليڪيشن کي ڪيئن هلائڻ جي باري ۾ ڳالهايون. ان کان پوء اسان هر مائڪرو سروس لاء ڪنٽينر تصويرن جي تعمير تي نظر ڪنداسين. ۽ ان کان پوء، اسان Kubernetes سان واقف ٿينداسين ۽ ڪبرنيٽس پاران منظم ڪيل ڪلستر ۾ مائڪرو سروسز جي بنياد تي ايپليڪيشن جي تعیناتي جو تجزيو ڪنداسين.

اهو طريقو، ڪبرنيٽس ڏانهن بتدريج طريقي سان، سمجھڻ جي کوٽائي ڏيندو ته ڇا ٿي رهيو آهي جيڪو سراسري ماڻهوءَ کي اهو سمجهڻ جي ضرورت آهي ته ڪبرنيٽس ۾ هر شيءِ کي ڪيئن منظم ڪيو ويو آهي. Kubernetes يقيناً هڪ سادي ٽيڪنالوجي آهي، بشرطيڪ ته جيڪو به ان ۾ مهارت حاصل ڪرڻ چاهي ٿو اهو ڄاڻي ٿو ته اهو ڪٿي ۽ ڪيئن استعمال ٿئي ٿو.

ھاڻي، اڳتي وڌڻ جي بغير، اچو ته ڪم تي وڃو ۽ ان ايپليڪيشن بابت ڳالهايون جنھن سان اسان ڪم ڪنداسين.

تجرباتي ايپ

اسان جي ايپليڪيشن صرف هڪ فنڪشن انجام ڏيندو. اهو، ان پٽ جي طور تي، هڪ جملو وٺندو آهي، جنهن کان پوء، متن جي تجزيي جا اوزار استعمال ڪندي، هن جملي جي جذباتي تجزيي کي انجام ڏئي ٿو، هڪ خاص اعتراض جي سزا جي ليکڪ جي جذباتي رويي جو جائزو وٺڻ.

هي اهو آهي جيڪو هن ايپليڪيشن جي مکيه ونڊو وانگر ڏسڻ ۾ اچي ٿو.

Kubernetes سبق حصو 1: ايپليڪيشنون، مائڪرو سروسز، ۽ ڪنٽينرز
جذبي جو تجزيو ويب ايپليڪيشن

ٽيڪنيڪل نقطي نظر کان، ايپليڪيشن ٽن مائڪرو سروسز تي مشتمل آهي، جن مان هر هڪ ڪم جو هڪ خاص سيٽ حل ڪري ٿو:

  • SA-Frontend ھڪڙو Nginx ويب سرور آھي جيڪو ڪم ڪري ٿو ريڪٽ جامد فائلن کي.
  • SA-WebApp جاوا ۾ لکيل هڪ ويب ايپليڪيشن آهي جيڪا فرنٽ اينڊ کان درخواستن کي سنڀاليندي آهي.
  • SA-Logic هڪ Python ايپليڪيشن آهي جيڪا متن جي جذبي جو تجزيو ڪري ٿي.

اهو نوٽ ڪرڻ ضروري آهي ته مائڪرو سروسز اڪيلائي ۾ موجود نه آهن. اهي "فرضن جي علحدگي" جي خيال کي لاڳو ڪن ٿا، پر انهن کي، ساڳئي وقت، هڪ ٻئي سان لهه وچڙ جي ضرورت آهي.

Kubernetes سبق حصو 1: ايپليڪيشنون، مائڪرو سروسز، ۽ ڪنٽينرز
ايپليڪيشن ۾ ڊيٽا وهندو آهي

مٿي ڏنل ڊراگرام ۾، توھان ڏسي سگھوٿا سسٽم جا نمبر ٿيل مرحلا، ايپليڪيشن ۾ ڊيٽا جي وهڪري کي بيان ڪندي. اچو ته ان کي ٽوڙيو:

  1. برائوزر سرور کان فائل جي درخواست ڪري ٿو index.html (جيڪو بدلي ۾ React ايپ پيڪيج لوڊ ڪري ٿو).
  2. صارف ايپليڪيشن سان لهه وچڙ ۾ اچي ٿو، اهو هڪ ويب ايپليڪيشن کي ڪال ڪري ٿو بهار جي بنياد تي.
  3. ويب ايپليڪيشن متن کي پارس ڪرڻ جي درخواست کي پيٿون ايپليڪيشن ڏانهن موڪلي ٿو.
  4. پٿون ايپليڪيشن متن جي جذبي جو تجزيو ڪري ٿو ۽ نتيجو واپس ڪري ٿو درخواست جي جواب جي طور تي.
  5. اسپرنگ ايپليڪيشن ري ايڪٽ ايپليڪيشن جو جواب موڪلي ٿو (جيڪو، موڙ ۾، صارف کي پارس ٿيل متن جو نتيجو ڏيکاري ٿو).

انهن سڀني ايپليڪيشنن لاء ڪوڊ ڳولي سگھجي ٿو هتي. مان صلاح ڏيان ٿو ته توهان هن ذخيري کي هن وقت پاڻ ڏانهن نقل ڪريو، ڇاڪاڻ ته ان سان گڏ اسان جي اڳيان ڪيترائي دلچسپ تجربا آهن.

مقامي مشين تي مائڪرو سروسز جي بنياد تي ايپليڪيشن هلائڻ

ايپليڪيشن کي ڪم ڪرڻ لاء، اسان کي سڀني ٽن مائڪرو سروسز شروع ڪرڻ جي ضرورت آهي. اچو ته انهن مان سڀ کان خوبصورت سان شروع ڪريون - سامهون واري ايپليڪيشن.

▍مقامي ترقيءَ لاءِ رد عمل قائم ڪرڻ

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.

هن طريقي سان، ريڪٽ ايپليڪيشن جي اسيمبليء دوران ٺاهيل فائل index.html تي دستياب هوندي [your_nginx_installation_dir]/html/index.html. اها فائل آهي جيڪا، ڊفالٽ طور، نينڪس سرور مسئلا جڏهن ان تائين رسائي حاصل ڪري ٿي. سرور هڪ بندرگاهه تي ٻڌڻ لاءِ ترتيب ڏنل آهي 80، پر توھان ان کي ترتيب ڏئي سگھوٿا جيئن توھان چاھيو فائل کي ايڊٽ ڪندي [your_nginx_installation_dir]/conf/nginx.conf.

ھاڻي توھان جو برائوزر کوليو ۽ وڃو localhost:80. توھان ڏسندا React ايپ صفحو.

Kubernetes سبق حصو 1: ايپليڪيشنون، مائڪرو سروسز، ۽ ڪنٽينرز
Nginx سرور پاران پيش ڪيل ريڪٽ ايپ

جيڪڏھن توھان ھاڻي ڪجھ داخل ڪريو فيلڊ ۾ 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. 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;

ڪوڊ تمام سٺو ڪم ڪرڻ لڳي. هتي ڇا غلط آهي، بهرحال؟ جيڪڏهن توهان فرض ڪيو ته جنهن ايڊريس تي ايپليڪيشن پوسٽ جي درخواست موڪلڻ جي ڪوشش ڪري رهي آهي، اتي اڃا تائين ڪجھ به نه آهي جيڪو هن درخواست کي قبول ڪري سگهي ۽ ان تي عمل ڪري، پوءِ توهان بلڪل صحيح هوندا. يعني، ايڊريس تي اچڻ واري درخواستن تي عمل ڪرڻ لاءِ http://localhost:8080/sentiment، اسان کي بهار جي بنياد تي هڪ ويب ايپليڪيشن هلائڻ جي ضرورت آهي.

Kubernetes سبق حصو 1: ايپليڪيشنون، مائڪرو سروسز، ۽ ڪنٽينرز
اسان کي هڪ بهار جي درخواست جي ضرورت آهي جيڪا پوسٽ درخواست قبول ڪري سگهي

▍بهار جي بنياد تي ويب ايپليڪيشن کي ترتيب ڏيڻ

اسپرنگ ايپليڪيشن کي ترتيب ڏيڻ لاءِ، توھان کي ضرورت آھي JDK8 ۽ Maven ۽ صحيح طرح سان ترتيب ڏنل ماحوليات. هي سڀ انسٽال ڪرڻ کان پوءِ، توهان اسان جي پروجيڪٽ تي ڪم جاري رکي سگهو ٿا.

▍ ايپليڪيشن کي جار فائل ۾ پيڪ ڪرڻ

نيويگيٽ ڪريو، ٽرمينل استعمال ڪندي، فولڊر ڏانھن sa-webapp ۽ ھيٺ ڏنل حڪم داخل ڪريو:

mvn install

فولڊر ۾ هن حڪم کي عمل ڪرڻ کان پوء sa-webapp ڊاريڪٽري ٺاهي ويندي target. ھي اھو آھي جتي جاوا ايپليڪيشن واقع ٿيندي، ھڪڙي جار فائل ۾ ڀريل، فائل جي نمائندگي ڪندي sentiment-analysis-web-0.0.1-SNAPSHOT.jar.

▍جاوا ايپليڪيشن لانچ ڪرڻ

فولڊر ڏانھن وو 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. اچو ته ڪوڊ جو تجزيو ڪريون جتي غلطي ٿئي ٿي.

▍جاوا ايپليڪيشن ڪوڊ تجزيو

هتي ڪوڊ جو ٽڪرو آهي جتي غلطي ٿئي ٿي.

@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

ھن ملڪيت جي قيمت اسان جي پٿون ايپليڪيشن جي ايڊريس ڏانھن اشارو ڪرڻ گھرجي.

ان کي ترتيب ڏيڻ سان، اسان اسپرنگ ويب ايپليڪيشن کي ٻڌايون ٿا جتي ان کي ٽيڪسٽ پارسنگ درخواستون ڪرڻ لاءِ وڃڻو پوندو.

اسان جي زندگين کي پيچيده نه ڪرڻ لاء، اسان اهو فيصلو ڪنداسين ته پٿون ايپليڪيشن دستياب هوندي localhost:5000 ۽ ان جي باري ۾ نه وسارڻ جي ڪوشش ڪريو. نتيجي طور، بهار جي ايپليڪيشن کي شروع ڪرڻ جو حڪم هن طرح نظر ايندو:

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

Kubernetes سبق حصو 1: ايپليڪيشنون، مائڪرو سروسز، ۽ ڪنٽينرز
اسان جي سسٽم ۾ 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/

▍ ڪوڊ ريسرچ

اچو ته ڏسو پٿون ايپليڪيشن ڪوڊ کي سمجهڻ لاءِ ته اهو ڪيئن درخواستن جو جواب ڏئي ٿو:

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. فلاسڪ ايپليڪيشن لانچ ڪندي، جيڪا دستياب هوندي 0.0.0.0:5000 (توهان پڻ ان تائين رسائي ڪري سگهو ٿا فارم جي تعمير استعمال ڪندي localhost:5000).

هاڻي مائڪرو سروسز جيڪي ٺاهي رهيا آهن ايپليڪيشن هلائي رهيا آهن. اهي هڪ ٻئي سان رابطو ڪرڻ لاء مقرر آهن. هتي اهو آهي ته اپليڪيشن ڊاگرام ڪم جي هن مرحلي تي ڇا ڏسڻ ۾ اچي ٿو.

Kubernetes سبق حصو 1: ايپليڪيشنون، مائڪرو سروسز، ۽ ڪنٽينرز
سڀئي مائڪرو سروسز جيڪي ايپليڪيشن ٺاهيندا آهن انهن کي صحتمند حالت ۾ آندو ويو آهي

ھاڻي، ان کان اڳ جو اسان جاري رکون، برائوزر ۾ React ايپ کوليو ۽ ان سان ڪجھ جملو پارس ڪرڻ جي ڪوشش ڪريو. جيڪڏھن سڀڪنھن شيء کي صحيح ڪيو ويو آهي - بٽڻ کي دٻائڻ کان پوء Send توھان ڏسندا تجزيو جا نتيجا ٽيڪسٽ باڪس ھيٺان.

ايندڙ حصي ۾، اسان بابت ڳالهائينداسين ته ڪيئن اسان جي مائڪرو سروسز کي ڊاکر ڪنٽينرز ۾ هلائڻ. ڪبرنيٽس ڪلستر ۾ هلائڻ لاءِ ايپليڪيشن تيار ڪرڻ لاءِ اهو ضروري آهي.

ڊڪر ڪنٽينر

ڪوبنيٿس ڪنٽرول ٿيل ايپليڪيشنن جي ترتيب، اسڪيلنگ ۽ انتظام کي خودڪار ڪرڻ لاء هڪ سسٽم آهي. اهو پڻ سڏيو ويندو آهي "ڪنٽينر آرڪيسٽرٽر". جيڪڏهن ڪبرنيٽس ڪنٽينرز سان ڪم ڪري ٿو، پوء هن سسٽم کي استعمال ڪرڻ کان پهريان، اسان کي پهريان اهي ڪنٽينرز حاصل ڪرڻ گهرجن. پر پهرين، اچو ته ان بابت ڳالهايون ڪنٽينر ڇا آهن. شايد ان سوال جو بهترين جواب ان ۾ ملي سگهي ٿو ته اهو ڇا آهي دستاويز Docker ڏانهن:

هڪ ڪنٽينر جي تصوير هڪ هلڪو وزن، خود مختيار، قابل عمل پيڪيج آهي جنهن ۾ هڪ ايپليڪيشن شامل آهي، جنهن ۾ هر شيءِ شامل آهي ان کي هلائڻ لاءِ: ايپليڪيشن ڪوڊ، رن ٽائم ماحول، سسٽم اوزار ۽ لائبريريون، سيٽنگون. ڪنٽينر ٿيل پروگرامن ٻنهي لينڪس ۽ ونڊوز ماحول ۾ استعمال ڪري سگھجن ٿا ۽ هميشه بنيادي ڍانچي کان سواءِ ساڳيو ڪم ڪندا.

ان جو مطلب اهو آهي ته ڪنٽينرز ڪنهن به ڪمپيوٽر تي هلائي سگھجن ٿا، بشمول پروڊڪشن سرور، ۽ ڪنهن به ماحول ۾، انهن ۾ بند ٿيل ايپليڪيشنون ساڳيو ڪم ڪنديون.

ڪنٽينرز جي خاصيتن کي ڳولڻ ۽ ايپليڪيشنن کي هلائڻ جي ٻين طريقن سان مقابلو ڪرڻ لاء، اچو ته هڪ ورچوئل مشين ۽ ڪنٽينر استعمال ڪندي ري ايڪٽ ايپليڪيشن جي خدمت جو مثال ڏسو.

▍ ورچوئل مشين استعمال ڪندي ريڪٽ ايپليڪيشن جون جامد فائلون پيش ڪرڻ

مجازي مشينن کي استعمال ڪندي جامد فائلن جي سار سنڀال کي منظم ڪرڻ جي ڪوشش ڪندي، اسان هيٺ ڏنل نقصانن کي منهن ڪنداسين:

  1. وسيلن جي غير موثر استعمال، ڇاڪاڻ ته هر مجازي مشين هڪ مڪمل آپريٽنگ سسٽم آهي.
  2. پليٽ فارم تي انحصار. ڪجھ مقامي ڪمپيوٽر تي ڇا ڪم ڪري سگھي ٿو پروڊڪٽ سرور تي ڪم نٿو ڪري سگھي.
  3. هڪ مجازي مشين حل جي سست ۽ وسيلن جي گھڻائي اسڪيلنگ.

Kubernetes سبق حصو 1: ايپليڪيشنون، مائڪرو سروسز، ۽ ڪنٽينرز
Nginx ويب سرور هڪ مجازي مشين ۾ هلندڙ جامد فائلن جي خدمت ڪري ٿو

جيڪڏهن ڪنٽينرز هڪ جهڙي مسئلي کي حل ڪرڻ لاء استعمال ڪيا ويا آهن، پوء، مجازي مشينن جي مقابلي ۾، هيٺ ڏنل قوتن کي نوٽ ڪري سگهجي ٿو:

  1. وسيلن جو موثر استعمال: Docker استعمال ڪندي آپريٽنگ سسٽم سان ڪم.
  2. پليٽ فارم جي آزادي. هڪ ڪنٽينر جيڪو هڪ ڊولپر هلائي سگهي ٿو پنهنجي ڪمپيوٽر تي ڪٿي به هلندو.
  3. تصويري تہن جي استعمال ذريعي هلڪو وزن جي ترتيب.

Kubernetes سبق حصو 1: ايپليڪيشنون، مائڪرو سروسز، ۽ ڪنٽينرز
Nginx ويب سرور هڪ ڪنٽينر ۾ هلندڙ جامد فائلن جي خدمت ڪري ٿو

اسان صرف ڪجھ پوائنٽن تي ورچوئل مشينن ۽ ڪنٽينرز جو مقابلو ڪيو آھي، پر اھو به ڪافي آھي ڪنٽينرز جي طاقت کي محسوس ڪرڻ لاءِ. اهو آهي توھان ڳولي سگھوٿا تفصيل بابت ڊاڪر ڪنٽينرز.

▍ React ايپ لاءِ ڪنٽينر جي تصوير ٺاهڻ

ڊاکر ڪنٽينر جو بنيادي بلڊنگ بلاڪ فائل آهي Dockerfile. هن فائل جي شروعات ۾، ڪنٽينر جي هڪ بنيادي تصوير رڪارڊ ڪئي وئي آهي، پوء هدايتن جو هڪ سلسلو شامل ڪيو ويو آهي جيڪو ظاهر ڪري ٿو ته هڪ ڪنٽينر ڪيئن ٺاهيو جيڪو ايپليڪيشن جي ضرورتن کي پورو ڪندو.

ان کان اڳ جو اسان فائل سان ڪم ڪرڻ شروع ڪيو Dockerfile، ياد رکو ته اسان Nginx سرور تي اپلوڊ ڪرڻ لاءِ React ايپليڪيشن جون فائلون تيار ڪرڻ لاءِ ڇا ڪيو:

  1. React ايپ پيڪيج ٺاهڻ (npm run build).
  2. Nginx سرور شروع ڪندي.
  3. ڊاريڪٽري جي مواد کي نقل ڪندي build پروجيڪٽ فولڊر مان sa-frontend سرور فولڊر ڏانهن nginx/html.

هيٺ توهان هڪ ڪنٽينر ٺاهڻ ۽ مقامي ڪمپيوٽر تي ڪيل مٿين ڪارناما جي وچ ۾ برابري ڏسي سگهو ٿا.

▍ SA-Frontend ايپليڪيشن لاءِ Dockerfile تيار ڪرڻ

هدايتون شامل ڪرڻ لاء Dockerfile درخواست لاءِ SA-Frontend، صرف ٻن ٽيمن تي مشتمل آهي. حقيقت اها آهي ته نينگڪس ڊولپمينٽ ٽيم هڪ بنيادي تيار ڪئي آهي تصوير آهي 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-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. ٻيو ڪجهه به ڊائون لوڊ ڪرڻ وقت جو ضايع آهي. توھان ڊاڪر کي ٻڌائڻ سان تعمير کي تيز ڪري سگھو ٿا ڪھڙي ڊائريڪٽرن کي نظرانداز ڪرڻ. هن کي ڪرڻ لاء، اسان کي هڪ فائل جي ضرورت آهي .dockerignore. توهان، جيڪڏهن توهان فائل سان واقف آهيو .gitignore، هن فائل جي جوڙجڪ شايد واقف نظر ايندي. اهو ڊائريڪٽرن کي لسٽ ڪري ٿو جيڪا تصوير جي تعمير سسٽم کي نظر انداز ڪري سگهي ٿي. اسان جي صورت ۾، هن فائل جو مواد هن طرح نظر اچي ٿو:

node_modules
src
public

فائيل .dockerignore فائل جي طور تي ساڳئي فولڊر ۾ هجڻ گهرجي Dockerfile. هاڻي تصوير جي اسيمبلي چند سيڪنڊن وٺي ويندي.

اچو ته ھاڻي جاوا ايپليڪيشن لاءِ تصوير سان ڊيل ڪريون.

▍ جاوا ايپليڪيشن لاءِ ڪنٽينر جي تصوير ٺاهڻ

توهان کي خبر آهي ته ڇا، ۽ توهان اڳ ۾ ئي سڀ ڪجهه سکيو آهي جيڪو توهان کي ڪنٽينر تصويرون ٺاهڻ جي ضرورت آهي. ان ڪري هي حصو تمام مختصر ٿيندو.

فائل کوليو Dockerfile، جيڪو پروجيڪٽ فولڊر ۾ واقع آهي sa-webapp. جيڪڏهن توهان هن فائل جو متن پڙهو، ته ان ۾ توهان کي صرف ٻه نوان تعميرات ملندا جيڪي لفظن سان شروع ٿين ٿيون ENV и EXPOSE:

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

چاٻي ENV توهان کي اجازت ڏئي ٿو ته ماحول جي متغيرن کي Docker ڪنٽينرز اندر. خاص طور تي، اسان جي صورت ۾، اهو توهان کي اجازت ڏئي ٿو ته هڪ URL سيٽ ڪرڻ لاء ايپليڪيشن جي API تائين رسائي ڪرڻ لاء جيڪو ٽيڪسٽ تجزيو انجام ڏئي ٿو.

چاٻي EXPOSE توهان کي اجازت ڏئي ٿو ڊڪر کي بندرگاهه کولڻ لاءِ. اسان ايپليڪيشن سان ڪم ڪرڻ دوران هن بندرگاهن کي استعمال ڪرڻ وارا آهيون. هتي توهان ان ۾ ڏسي سگهو ٿا 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. ان کان علاوه، اسان کي بندرگاهن کي سيٽ ڪرڻ جي ضرورت آهي جنهن تي پائٿون ايپليڪيشن جاوا ايپليڪيشن جي درخواستن لاء ماحول جي متغير کي ٻيهر ترتيب ڏيڻ سان ٻڌندي. 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

هڪ ڪنٽينر يا ڊاڪر VM جي IP پتي کي ڪيئن ڳولڻ لاءِ، فائل ڏانهن رجوع ڪريو ريڊيو.

اچو ته ايپليڪيشن ڪنٽينر شروع ڪريون sa-frontend:

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

ھاڻي سڀ ڪجھ تيار آھي برائوزر ۾ ايڊريس ڏانھن وڃڻ لاءِ localhost:80 ۽ ايپ کي جانچيو.

مهرباني ڪري نوٽ ڪريو ته جيڪڏهن توهان بندرگاهه کي تبديل ڪيو sa-webapp، يا جيڪڏهن توهان ڊاڪر VM هلائي رهيا آهيو، توهان کي فائل کي ايڊٽ ڪرڻ جي ضرورت پوندي App.js فولڊر مان sa-frontendطريقي سان IP پتي يا پورٽ نمبر تبديل ڪندي analyzeSentence()پراڻي معلومات جي بدران موجوده معلومات کي تبديل ڪندي. ان کان پوء، توهان کي تصوير کي ٻيهر گڏ ڪرڻ ۽ ان کي استعمال ڪرڻ جي ضرورت آهي.

ھاڻي اھو آھي جيڪو اسان جي ايپليڪيشن ڊاگرام وانگر ڏسڻ ۾ اچي ٿو.

Kubernetes سبق حصو 1: ايپليڪيشنون، مائڪرو سروسز، ۽ ڪنٽينرز
مائڪرو سروسز ڪنٽينرز ۾ هلن ٿيون

خلاصو: اسان کي ڪبرنيٽس ڪلستر جي ضرورت ڇو آهي؟

اسان صرف فائلن جو جائزو ورتو Dockerfile، انهي بابت ڳالهايو ته ڪيئن تصويرون ٺاهيون ۽ انهن کي ڊاڪر مخزن ڏانهن ڌڪيو. ان کان علاوه، اسان سکيو ته فائل کي استعمال ڪندي تصويرن جي اسيمبلي کي ڪيئن تيز ڪجي .dockerignore. نتيجي طور، اسان جون مائڪرو سروسز ھاڻي ڊاڪر ڪنٽينرز ۾ ھلنديون آھن. هتي توهان وٽ شايد مڪمل طور تي صحيح سوال آهي ته اسان کي ڪبرنيٽس جي ضرورت ڇو آهي. هن سوال جو جواب هن مواد جي ٻئي حصي کي وقف ڪيو ويندو. ساڳئي وقت ۾، هيٺ ڏنل سوال تي غور ڪريو:
اچو ته فرض ڪريون ته اسان جي ٽيڪسٽ analysis ويب ايپليڪيشن سڄي دنيا ۾ مشهور ٿي چڪي آهي. هن وٽ هر منٽ لکين درخواستون اچن ٿيون. هن جو مطلب آهي microservices sa-webapp и sa-logic وڏي دٻاءُ هيٺ هوندو. ڪنٽينرز کي ڪيئن ماپيو وڃي جيڪي مائڪرو سروسز هلائيندا آهن؟

Kubernetes سبق حصو 1: ايپليڪيشنون، مائڪرو سروسز، ۽ ڪنٽينرز

جو ذريعو: www.habr.com

تبصرو شامل ڪريو