የኩበርኔትስ ማጠናከሪያ ትምህርት ክፍል 1፡ አፕሊኬሽኖች፣ ማይክሮ አገልግሎቶች እና ኮንቴይነሮች

በጥያቄያችን መሰረት ሀብር ማዕከል ፈጠረ ኩባንያቶች እና የመጀመሪያውን እትም በእሱ ውስጥ በማስቀመጥ ደስተኞች ነን. ሰብስክራይብ ያድርጉ!

Kubernetes ቀላል ነው. ለምንድን ነው ባንኮች በዚህ አካባቢ ለመስራት ብዙ ገንዘብ የሚከፍሉኝ, ማንም ሰው ይህን ቴክኖሎጂ በጥቂት ሰዓታት ውስጥ መቆጣጠር ይችላል?

የኩበርኔትስ ማጠናከሪያ ትምህርት ክፍል 1፡ አፕሊኬሽኖች፣ ማይክሮ አገልግሎቶች እና ኮንቴይነሮች

ኩበርኔትስ በፍጥነት መማር እንደሚቻል ከተጠራጠሩ እራስዎ ለማድረግ እንዲሞክሩ እመክርዎታለሁ። ይኸውም ይህንን ቁሳቁስ በሚገባ ከተለማመዱ በኋላ በኩበርኔትስ ክላስተር ውስጥ ባሉ ማይክሮ አገልግሎቶች ላይ የተመሠረተ መተግበሪያን ማሄድ ይችላሉ። ለዚህ ዋስትና መስጠት እችላለሁ, ምክንያቱም ደንበኞቻችን ከኩበርኔትስ ጋር እንዴት እንደሚሠሩ ለማስተማር እዚህ የምጠቀምበት ተመሳሳይ ዘዴ ነው. ይህ መመሪያ ከሌሎች የሚለየው ምንድን ነው? በእውነቱ, ብዙ ነገሮች. ስለዚህ, አብዛኛዎቹ እነዚህ ቁሳቁሶች ቀለል ያሉ ነገሮችን በማብራራት ይጀምራሉ - የ Kubernetes ጽንሰ-ሀሳቦች እና የ kubectl ትዕዛዝ ባህሪያት. የእነዚህ ጽሑፎች ደራሲዎች አንባቢያቸው የመተግበሪያ ልማትን, ማይክሮ ሰርቪስ እና የዶከር ኮንቴይነሮችን እንደሚያውቅ ይገምታሉ. በሌላ መንገድ እንሄዳለን. በመጀመሪያ፣ በኮምፒዩተር ላይ ባሉ ማይክሮ ሰርቪስ ላይ የተመሰረተ መተግበሪያን እንዴት ማስኬድ እንዳለብን እንነጋገር። ከዚያም ለእያንዳንዱ ማይክሮ አገልግሎት የእቃ መጫኛ ምስሎችን እንመለከታለን. እና ከዚያ በኋላ ከኩበርኔትስ ጋር እንተዋወቃለን እና በኩበርኔትስ በሚተዳደረው ክላስተር ውስጥ በማይክሮ ሰርቪስ ላይ በመመስረት የመተግበሪያውን መዘርጋት እንመረምራለን ።

ይህ አቀራረብ ወደ ኩበርኔትስ ቀስ በቀስ አቀራረብ ፣ ሁሉም ነገር በኩበርኔትስ ውስጥ እንዴት በቀላሉ እንደተቀናጀ ለመረዳት ተራ ሰው የሚያስፈልገው ምን እየሆነ ያለውን ጥልቅ ግንዛቤ ይሰጣል። ኩበርኔትስ በእርግጥ ቀላል ቴክኖሎጂ ነው፣ ማንም ሊያውቅ የሚፈልግ የት እና እንዴት ጥቅም ላይ እንደሚውል እስካወቀ ድረስ።

አሁን፣ ብዙ ሳንጨነቅ፣ ወደ ሥራ እንግባና ስለምንሠራው መተግበሪያ እንነጋገር።

የሙከራ መተግበሪያ

የእኛ መተግበሪያ አንድ ተግባር ብቻ ይሰራል። እንደ ግብአት አንድ ዓረፍተ ነገር ይወስዳል ፣ ከዚያ በኋላ ፣ የጽሑፍ ትንታኔ መሳሪያዎችን በመጠቀም ፣ የዚህን ዓረፍተ ነገር ስሜት ትንተና ያካሂዳል ፣ የአረፍተ ነገሩን ደራሲ ለተወሰነ ነገር ያለውን ስሜታዊ አመለካከት ይገመግማል።

የዚህ መተግበሪያ ዋና መስኮት ይህን ይመስላል።

የኩበርኔትስ ማጠናከሪያ ትምህርት ክፍል 1፡ አፕሊኬሽኖች፣ ማይክሮ አገልግሎቶች እና ኮንቴይነሮች
ስሜት ትንተና የድር መተግበሪያ

ከቴክኒካዊ እይታ አንፃር ፣ አፕሊኬሽኑ ሶስት ጥቃቅን አገልግሎቶችን ያቀፈ ነው ፣ እያንዳንዱም የተወሰኑ ተግባራትን ይፈታል ።

  • SA-Frontend React static ፋይሎችን የሚያገለግል የNginx ድር አገልጋይ ነው።
  • SA-WebApp በጃቫ የተፃፈ ከግንባር የሚጠየቁ ጥያቄዎችን የሚያስተናግድ የድር መተግበሪያ ነው።
  • SA-Logic የጽሑፍ ስሜትን ትንተና የሚያከናውን የፓይዘን መተግበሪያ ነው።

ማይክሮ ሰርቪስ በተናጥል አለመኖሩን ልብ ማለት ያስፈልጋል. "የስራዎች መለያየት" የሚለውን ሀሳብ ተግባራዊ ያደርጋሉ, ግን በተመሳሳይ ጊዜ እርስ በርስ መግባባት ያስፈልጋቸዋል.

የኩበርኔትስ ማጠናከሪያ ትምህርት ክፍል 1፡ አፕሊኬሽኖች፣ ማይክሮ አገልግሎቶች እና ኮንቴይነሮች
ውሂብ በመተግበሪያው ውስጥ ይፈስሳል

ከላይ ባለው ሥዕል ውስጥ በመተግበሪያው ውስጥ ያለውን የውሂብ ፍሰቶች በማሳየት የስርዓቱን ቁጥር ያላቸውን ደረጃዎች ማየት ይችላሉ. እንከፋፍላቸው፡-

  1. አሳሹ ከአገልጋዩ ፋይል ይጠይቃል index.html (ይህም በተራው የReact መተግበሪያ ጥቅልን ይጭናል)።
  2. ተጠቃሚው ከመተግበሪያው ጋር ይገናኛል፣ ይህ በፀደይ ወቅት ላይ የተመሰረተ የድር መተግበሪያ ጥሪ ያደርጋል።
  3. የድረ-ገጽ አፕሊኬሽኑ ጽሑፉን ወደ Python መተግበሪያ ለመተንተን ጥያቄውን ያስተላልፋል።
  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.

በዚህ አቀራረብ, የ React መተግበሪያ በሚሰበሰብበት ጊዜ የተፈጠረው ፋይል index.html ላይ ይገኛል። [your_nginx_installation_dir]/html/index.html. ይህ በነባሪ የ Nginx አገልጋይ ወደ እሱ ሲገባ የሚያወጣው ፋይል ነው። አገልጋዩ ወደብ ላይ ለማዳመጥ ተዋቅሯል። 80, ነገር ግን ፋይሉን በማረም በሚፈልጉት መንገድ ማበጀት ይችላሉ [your_nginx_installation_dir]/conf/nginx.conf.

አሁን አሳሽዎን ይክፈቱ እና ወደ ይሂዱ localhost:80. React መተግበሪያ ገጹን ያያሉ።

የኩበርኔትስ ማጠናከሪያ ትምህርት ክፍል 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. የ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በስፕሪንግ ላይ የተመሠረተ የድር መተግበሪያን ማሄድ አለብን።

የኩበርኔትስ ማጠናከሪያ ትምህርት ክፍል 1፡ አፕሊኬሽኖች፣ ማይክሮ አገልግሎቶች እና ኮንቴይነሮች
የPOST ጥያቄን መቀበል የሚችል የስፕሪንግ መተግበሪያ እንፈልጋለን

▍በፀደይ ወቅት ላይ በመመስረት የድር መተግበሪያን ማቋቋም

የስፕሪንግ መተግበሪያን ለማሰማራት 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

የዚህ ንብረት ዋጋ ወደ Python መተግበሪያችን አድራሻ መጠቆም አለበት።

እሱን በማዋቀር ለSፕሪንግ ድር መተግበሪያ የጽሁፍ መተንተን ጥያቄዎችን የት መሄድ እንዳለበት እንነግረዋለን።

ህይወታችንን እንዳናወሳስብ፣ የ Python መተግበሪያ በ ላይ እንደሚገኝ እንወስናለን። localhost:5000 እና ስለእሱ ላለመርሳት ይሞክሩ. በዚህ ምክንያት የፀደይ አፕሊኬሽኑን ለመጀመር ትእዛዝ ይህንን ይመስላል።

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

የኩበርኔትስ ማጠናከሪያ ትምህርት ክፍል 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/

▍የኮድ ጥናት

ለጥያቄዎች እንዴት ምላሽ እንደሚሰጥ ለመረዳት የ 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. የፍላስክ አፕሊኬሽኑን በማስጀመር ላይ፣ ይህም በ ላይ ይገኛል። 0.0.0.0:5000 (እንዲሁም የቅጹን ግንባታ በመጠቀም ሊደርሱበት ይችላሉ localhost:5000).

አሁን አፕሊኬሽኑን ያካተቱ ማይክሮ ሰርቪስ እየሰሩ ነው። እርስ በርስ እንዲገናኙ ተዘጋጅተዋል. በዚህ የሥራ ደረጃ ላይ የመተግበሪያው ንድፍ ምን እንደሚመስል እነሆ.

የኩበርኔትስ ማጠናከሪያ ትምህርት ክፍል 1፡ አፕሊኬሽኖች፣ ማይክሮ አገልግሎቶች እና ኮንቴይነሮች
አፕሊኬሽኑን ያካተቱ ሁሉም ማይክሮ አገልገሎቶች ወደ ጤናማ ሁኔታ ያመጣሉ

አሁን፣ ከመቀጠላችን በፊት፣ React መተግበሪያን በአሳሽ ውስጥ ይክፈቱ እና የተወሰነ አረፍተ ነገርን በእሱ ላይ ለመተንተን ይሞክሩ። ሁሉም ነገር በትክክል ከተሰራ - አዝራሩን ከተጫኑ በኋላ Send የትንታኔ ውጤቱን ከጽሑፍ ሳጥኑ በታች ያያሉ።

በሚቀጥለው ክፍል ማይክሮ አገልግሎቶቻችንን በ Docker ኮንቴይነሮች ውስጥ እንዴት እንደሚሰራ እንነጋገራለን ። በ Kubernetes ክላስተር ውስጥ ለማሄድ ማመልከቻውን ለማዘጋጀት ይህ አስፈላጊ ነው.

የዶከር መያዣዎች

ኩባንያቶች በኮንቴይነር የተያዙ አፕሊኬሽኖችን የማሰማራት፣ የመጠን እና የማስተዳደር ስርዓት ነው። እሱም "የኮንቴይነር ኦርኬስትራ" ተብሎም ይጠራል. Kubernetes ከመያዣዎች ጋር የሚሠራ ከሆነ, ይህን ስርዓት ከመጠቀምዎ በፊት በመጀመሪያ እነዚህን መያዣዎች ማግኘት አለብን. ግን በመጀመሪያ ስለ መያዣዎች ምን እንደሆኑ እንነጋገር ። ምን እንደሆነ ለሚለው ጥያቄ በጣም ጥሩው መልስ ሊገኝ ይችላል ሰነድ ወደ ዶከር፡

የእቃ መያዢያ ምስል ቀላል ክብደት ያለው፣ ራሱን የቻለ፣ ተፈጻሚነት ያለው ፓኬጅ ነው፣ እሱን ለማስኬድ አስፈላጊ የሆኑትን ሁሉ የሚያካትት፡ የመተግበሪያ ኮድ፣ የሩጫ ጊዜ አካባቢ፣ የስርዓት መሳሪያዎች እና ቤተ-መጻሕፍት፣ መቼቶች። በኮንቴይነር የተያዙ ፕሮግራሞች በሁለቱም ሊኑክስ እና ዊንዶውስ አከባቢዎች ጥቅም ላይ ሊውሉ ይችላሉ እና መሠረተ ልማቱ ምንም ይሁን ምን ሁልጊዜ ተመሳሳይ ይሰራሉ።

ይህ ማለት ኮንቴይነሮች የማምረቻ አገልጋዮችን ጨምሮ በማንኛውም ኮምፒዩተር ላይ ሊሰሩ ይችላሉ, እና በማንኛውም አካባቢ, በውስጣቸው የተካተቱት አፕሊኬሽኖች በተመሳሳይ መንገድ ይሰራሉ.

የመያዣዎችን ገፅታዎች ለመዳሰስ እና አፕሊኬሽኖችን ለማስኬድ ከሌሎች መንገዶች ጋር ለማነፃፀር፣ ቨርቹዋል ማሽን እና ኮንቴነር በመጠቀም የሬክት አፕሊኬሽን የማገልገልን ምሳሌ እንመልከት።

▍ቨርችዋል ማሽንን በመጠቀም የReact መተግበሪያ የማይንቀሳቀሱ ፋይሎችን ማገልገል

ምናባዊ ማሽኖችን በመጠቀም የማይንቀሳቀሱ ፋይሎችን ጥገና ለማደራጀት በመሞከር የሚከተሉትን ጉዳቶች ያጋጥሙናል ።

  1. እያንዳንዱ ቨርቹዋል ማሽን የተሟላ ኦፕሬቲንግ ሲስተም ስለሆነ ውጤታማ ያልሆነ የሃብት አጠቃቀም።
  2. የመድረክ ጥገኝነት። በአንዳንድ የሀገር ውስጥ ኮምፒዩተሮች ላይ የሚሰራው በምርት አገልጋይ ላይ ላይሰራ ይችላል።
  3. የቨርቹዋል ማሽን መፍትሄ ቀርፋፋ እና ግብአቶች የተጠናከረ ልኬት።

የኩበርኔትስ ማጠናከሪያ ትምህርት ክፍል 1፡ አፕሊኬሽኖች፣ ማይክሮ አገልግሎቶች እና ኮንቴይነሮች
በምናባዊ ማሽን ውስጥ የሚሰሩ የማይንቀሳቀሱ ፋይሎችን የሚያገለግል Nginx ድር አገልጋይ

ኮንቴይነሮች ተመሳሳይ ችግር ለመፍታት ጥቅም ላይ የሚውሉ ከሆነ, ከቨርቹዋል ማሽኖች ጋር ሲነጻጸር, የሚከተሉት ጥንካሬዎች ሊታወቁ ይችላሉ.

  1. የሀብት አጠቃቀም፡- ዶከርን በመጠቀም ከስርዓተ ክወናው ጋር መስራት።
  2. የመድረክ ነፃነት። አንድ ገንቢ በራሱ ኮምፒዩተር የሚሰራበት ኮንቴይነር የትም ይሰራል።
  3. የምስል ንብርብሮችን በመጠቀም ቀላል ክብደት ማሰማራት።

የኩበርኔትስ ማጠናከሪያ ትምህርት ክፍል 1፡ አፕሊኬሽኖች፣ ማይክሮ አገልግሎቶች እና ኮንቴይነሮች
በኮንቴይነር ውስጥ የሚሰሩ የማይንቀሳቀሱ ፋይሎችን የሚያገለግል Nginx ድር አገልጋይ

ቨርቹዋል ማሽኖችን እና ኮንቴይነሮችን በጥቂት ነጥቦች ላይ ብቻ አነጻጽረናል፣ነገር ግን ያ እንኳን ለኮንቴይነሮች ጥንካሬ ስሜት በቂ ነው። ይህ ነው ስለ ዶከር ኮንቴይነሮች ዝርዝሮችን ማግኘት ይችላሉ።

▍ለReact መተግበሪያ የመያዣ ምስል በመገንባት ላይ

የዶከር ኮንቴይነር መሰረታዊ የግንባታ ቁሳቁስ ፋይሉ ነው Dockerfile. በዚህ ፋይል መጀመሪያ ላይ የመያዣው መሰረታዊ ምስል ይመዘገባል, ከዚያም የማመልከቻውን ፍላጎቶች የሚያሟላ መያዣ እንዴት እንደሚፈጠር የሚጠቁሙ ተከታታይ መመሪያዎች ተካትተዋል.

ከፋይሉ ጋር መስራት ከመጀመራችን በፊት Dockerfileወደ Nginx አገልጋይ ለመስቀል የReact መተግበሪያ ፋይሎችን ለማዘጋጀት ያደረግነውን ያስታውሱ፡-

  1. React መተግበሪያ ጥቅል መገንባት (npm run build).
  2. የ Nginx አገልጋይን በመጀመር ላይ።
  3. የማውጫውን ይዘቶች መቅዳት build ከፕሮጀክት አቃፊ sa-frontend ወደ የአገልጋይ አቃፊ nginx/html.

ከዚህ በታች መያዣን በመፍጠር እና በአካባቢያዊ ኮምፒዩተር ላይ በተከናወኑት ከላይ በተጠቀሱት ደረጃዎች መካከል ያለውን ተመሳሳይነት ማየት ይችላሉ.

▍ ለSA-Frontent መተግበሪያ የዶክ ፋይል በማዘጋጀት ላይ

ውስጥ የሚካተቱ መመሪያዎች 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 ጥያቄው መዞር ያለበት የመያዣው ወደብ ነው።

የሚከተለውን ምሳሌ ተመልከት።

የኩበርኔትስ ማጠናከሪያ ትምህርት ክፍል 1፡ አፕሊኬሽኖች፣ ማይክሮ አገልግሎቶች እና ኮንቴይነሮች
ወደብ ማስተላለፍ

ስርዓቱ ከወደቡ የሚመጡ ጥያቄዎችን ያስተላልፋል <hostPort> ወደ ወደብ <containerPort>. ወደብ መድረስ ማለት ነው። 80 ኮምፒዩተሩ ወደ ወደብ ይዛወራል። 80 መያዣ.

ወደብ ጀምሮ 80 በአካባቢው ኮምፒዩተር ላይ የተከፈተ መተግበሪያን ከዚህ ኮምፒውተር በ ላይ ማግኘት ይችላሉ። localhost:80. ስርዓትዎ ዶከርን የማይደግፍ ከሆነ፣ አፕሊኬሽኑን በ Docker ቨርቹዋል ማሽን ላይ ማስኬድ ይችላሉ፣ አድራሻውም ይህን ይመስላል። <docker-machine ip>:80. የዶከር ምናባዊ ማሽንን የአይፒ አድራሻ ለማወቅ ትዕዛዙን መጠቀም ይችላሉ። docker-machine ip.

በዚህ ጊዜ፣ አንዴ የፊት-መጨረሻ መተግበሪያ መያዣ በተሳካ ሁኔታ ከተጀመረ፣ ገጹን በአሳሽ ውስጥ መክፈት መቻል አለብዎት።

▍.dockerignore ፋይል

የመተግበሪያውን ምስል መገንባት SA-Frontend, ይህ ሂደት እጅግ በጣም ቀርፋፋ መሆኑን ልናስተውል እንችላለን. ይህ የሆነበት ምክንያት የምስል ግንባታ አውድ ወደ ዶከር ዴሞን መላክ አለበት። የግንባታ አውድ የሚወክለው ማውጫ ለትእዛዙ የመጨረሻ መከራከሪያ ሆኖ ተሰጥቷል። 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 ኮንቴይነሮች ውስጥ የአካባቢ ተለዋዋጮችን እንዲያውጁ ያስችልዎታል። በተለይም, በእኛ ሁኔታ, የጽሑፍ ትንታኔን የሚያከናውን የመተግበሪያውን ኤፒአይ ለመድረስ ዩአርኤል እንዲያዘጋጁ ይፈቅድልዎታል.

ቁልፍ ቃል 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

የኮንቴይነር ወይም የዶከር ቪኤም አይፒ አድራሻን እንዴት ማግኘት እንደሚችሉ ለማወቅ ፋይሉን ይመልከቱ README.

የማመልከቻውን መያዣ እንጀምር sa-frontend:

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

አሁን ሁሉም ነገር በአሳሹ ውስጥ ወደ አድራሻው ለማሰስ ዝግጁ ነው localhost:80 እና መተግበሪያውን ይሞክሩት።

እባክዎን ወደቡን ከቀየሩ ለ sa-webapp, ወይም Docker VM እያሄዱ ከሆነ ፋይሉን ማርትዕ ያስፈልግዎታል App.js ከአቃፊ sa-frontendበስልቱ ውስጥ የአይፒ አድራሻውን ወይም የወደብ ቁጥርን በመቀየር analyzeSentence()ጊዜ ያለፈበት መረጃን ሳይሆን የአሁኑን መረጃ በመተካት. ከዚያ በኋላ ምስሉን እንደገና መሰብሰብ እና መጠቀም ያስፈልግዎታል.

አሁን የኛ አፕሊኬሽን ሥዕላዊ መግለጫ ይህን ይመስላል።

የኩበርኔትስ ማጠናከሪያ ትምህርት ክፍል 1፡ አፕሊኬሽኖች፣ ማይክሮ አገልግሎቶች እና ኮንቴይነሮች
ማይክሮ ሰርቪስ በመያዣዎች ውስጥ ይሰራል

ማጠቃለያ፡ ለምን የኩበርኔትስ ክላስተር ያስፈልገናል?

አሁን ፋይሎቹን ገምግመናል። Dockerfileምስሎችን እንዴት እንደሚገነቡ እና ወደ Docker ማከማቻ እንዴት እንደሚገፉ ተናግሯል። በተጨማሪም, ፋይሉን በመጠቀም ምስሎችን እንዴት ማፋጠን እንደሚቻል ተምረናል .dockerignore. በዚህ ምክንያት የእኛ ማይክሮ ሰርቪስ አሁን በዶከር ኮንቴይነሮች ውስጥ እየሰሩ ናቸው። እዚህ ኩበርኔትስ ለምን እንደምንፈልግ ሙሉ በሙሉ ትክክለኛ ጥያቄ ሊኖርዎት ይችላል። የዚህ ጥያቄ መልስ በዚህ ቁሳቁስ ሁለተኛ ክፍል ላይ ይወሰናል. እስከዚያው ድረስ የሚከተለውን ጥያቄ አስብበት፡-
የኛ የጽሁፍ ትንተና ዌብ አፕሊኬሽን በአለም አቀፍ ደረጃ ታዋቂ ሆኗል ብለን እናስብ። በየደቂቃው በሚሊዮን የሚቆጠሩ ጥያቄዎች ወደ እሱ ይመጣሉ። ይህ ማለት ማይክሮ ሰርቪስ ማለት ነው sa-webapp и sa-logic በከፍተኛ ጭንቀት ውስጥ ይሆናል. ማይክሮ አግልግሎቶችን የሚያካሂዱ መያዣዎችን እንዴት መመዘን ይቻላል?

የኩበርኔትስ ማጠናከሪያ ትምህርት ክፍል 1፡ አፕሊኬሽኖች፣ ማይክሮ አገልግሎቶች እና ኮንቴይነሮች

ምንጭ: hab.com

አስተያየት ያክሉ